第 73 题: 介绍下 BFC、IFC、GFC 和 FFC
BFC(Block Formatting Context)块格式化上下文, 是 Web 页面的可视 CSS 渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。BFC 就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。 我们经常使用到 BFC,只不过不知道它是 BFC 而已。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
页面的布局基本单位Box.
一个页面有多个盒子构成。盒子分为行内盒子,块级盒子,弹性盒子。不同的盒子参与不同的formatting context(定义容器渲染规则,决定子元素的定位,以及和其他元素的关系和相互作用)。
常见的有bfc,ffc,gfc,ifc
哪些元素生成BFC
根元素
position 不为relative
float不为none
overflow不为visible
display为flex inline-flex inline-block tabel-cell
bfc 解决设么样的问题
bfc区域不与float 区域重叠。
双边距问题。
计算bfc高度,浮动元素也参与计算。
子集浮动元素,父级overflow:hidden 具有高度
布局规则,ifc 相对简单
gfc 网格布局格式化上下文 二维
解决table 问题。
display:grid;
grid-template-rows:20px 40px;
grid-template-columns:repeat(3,1fr)
3列2行
子元素 位置设置
grid-column-start:
grid-column-end
grid-row-start:
grid-row-end:
grid-row:1/3
grid-column:2/4
bfc 拓展
防止垂直边距重叠
防止元素浮动导致父类元素高度坍塌
防止元素浮动导致浮动节点覆盖兄弟节点
@chenluily0451 香
题目可以再加一个:堆叠上下文(The stacking context)
NBA
会显得问的人懂的多
这种问题有什么意义么,…最多问问BFC差不多了,平时写的时候就是顺手就打上去了,这玩意就是个概念。难不成你用
grid
布局或者flex
布局的时候先想想我用的这个叫做GFC
,FFC
,它们具有什么样的特点或者特性?KFC?
UFO
USB?
总结了一下 https://wz71014q.github.io/2019/03/23/CSS-%E5%8F%AF%E8%A7%86%E5%8C%96%E6%A0%BC%E5%BC%8F%E6%A8%A1%E5%9E%8B/
KFC
bfc: 块级格式化上下文 https://www.w3.org/TR/2011/REC-CSS2-20110607/visuren.html
ifc: 内联格式化上下文 https://www.w3.org/TR/2011/REC-CSS2-20110607/visuren.html
gfc:网格格式化上下文 display: grid
ffc: 弹性格式化上下文 display: flex
BFC
BFC(Block Formatting Contexts)直译为"块级格式化上下文"。Block Formatting Contexts就是页面上的一个隔离的渲染区域,容器里面的子元素不会在布局上影响到外面的元素,反之也是如此。如何产生BFC?
float的值不为none。
overflow的值不为visible。
position的值不为relative和static。
display的值为table-cell, table-caption, inline-block中的任何一个。
那BFC一般有什么用呢?
IFC
IFC(Inline Formatting Contexts)直译为"内联格式化上下文",IFC的line box(线框)高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的padding/margin影响)
IFC中的line box一般左右都贴紧整个IFC,但是会因为float元素而扰乱。float元素会位于IFC与与line box之间,使得line box宽度缩短。 同个ifc下的多个line box高度会不同。 IFC中时不可能有块级元素的,当插入块级元素时(如p中插入div)会产生两个匿名块与div分隔开,即产生两个IFC,每个IFC对外表现为块级元素,与div垂直排列。
那么IFC一般有什么用呢?
GFC
GFC(GridLayout Formatting Contexts)直译为"网格布局格式化上下文",当为一个元素设置display值为grid的时候,此元素将会获得一个独立的渲染区域,我们可以通过在网格容器(grid container)上定义网格定义行(grid definition rows)和网格定义列(grid definition columns)属性各在网格项目(grid item)上定义网格行(grid row)和网格列(grid columns)为每一个网格项目(grid item)定义位置和空间。
https://juejin.im/entry/5938daf7a0bb9f006b2295db
块级格式化上下文BFC,内联格式化上下文IFC,网格布局格式化上下文GFC,自适应格式化上下文FFC
BFC(Block formatting contexts):块级格式上下文
页面上的一个隔离的渲染区域,那么他是如何产生的呢?可以触发BFC的元素有float、position、overflow、display:table-cell/ inline-block/table-caption ;BFC有什么作用呢?比如说实现多栏布局’
IFC(Inline formatting contexts):内联格式上下文
IFC的line box(线框)高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的padding/margin影响)IFC中的line box一般左右都贴紧整个IFC,但是会因为float元素而扰乱。float元素会位于IFC与与line box之间,使得line box宽度缩短。 同个ifc下的多个line box高度会不同
IFC中时不可能有块级元素的,当插入块级元素时(如p中插入div)会产生两个匿名块与div分隔开,即产生两个IFC,每个IFC对外表现为块级元素,与div垂直排列。
那么IFC一般有什么用呢?
水平居中:当一个块要在环境中水平居中时,设置其为inline-block则会在外层产生IFC,通过text-align则可以使其水平居中。
垂直居中:创建一个IFC,用其中一个元素撑开父元素的高度,然后设置其vertical-align:middle,其他行内元素则可以在此父元素下垂直居中。
GFC(GrideLayout formatting contexts):网格布局格式化上下文
当为一个元素设置display值为grid的时候,此元素将会获得一个独立的渲染区域,我们可以通过在网格容器(grid container)上定义网格定义行(grid definition rows)和网格定义列(grid definition columns)属性各在网格项目(grid item)上定义网格行(grid row)和网格列(grid columns)为每一个网格项目(grid item)定义位置和空间。那么GFC有什么用呢,和table又有什么区别呢?首先同样是一个二维的表格,但GridLayout会有更加丰富的属性来控制行列,控制对齐以及更为精细的渲染语义和控制。
FFC(Flex formatting contexts):自适应格式上下文
display值为flex或者inline-flex的元素将会生成自适应容器(flex container),可惜这个牛逼的属性只有谷歌和火狐支持,不过在移动端也足够了,至少safari和chrome还是OK的,毕竟这俩在移动端才是王道。Flex Box 由伸缩容器和伸缩项目组成。通过设置元素的 display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素,而设置为 inline-flex 的容器则渲染为一个行内元素。伸缩容器中的每一个子元素都是一个伸缩项目。伸缩项目可以是任意数量的。伸缩容器外和伸缩项目内的一切元素都不受影响。简单地说,Flexbox 定义了伸缩容器内伸缩项目该如何布局。
在这
https://blog.csdn.net/qq_39985511/article/details/90200283