深入分析CSS布局中BFC及例子应用

作者:袖梨 2022-06-25

1、什么是BFC

BFC(Block Formatting Context,块级元素格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。

通俗讲,BFC就是一种布局方式,在创建了 BFC后,其子元素会一个接一个地放置:盒子们自所在的 containing block 顶部起,水平方向上一个接一个撑满整个宽度,垂直方向上他们的起点是包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性。在 同一个BFC中,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有间隔(即父元素的边框,非空内容,padding等)就会发生margin重叠,即margin会发生重合。更重要的是:创建BFC,能消除元素对相邻元素的布局影响,常见的应用 是:使用overflow:hidden创建BFC ,来清除浮动元素对后面元素的布局影响 。
2、如何创建BFC

当一个HTML元素满足下面条件的任何一点,都可以产生BFC:

float的值不为”none” (如:float:left/right)

overflow的值不为”visible”(如:overflow:hidden)

display的值为 “table-cell”, “table-caption”, or “inline-block”中的任何一个

position的值不为 “static” 或 “relative”中的任何一个(如:position:absolute)
3、BFC的作用

1.不和浮动元素重叠

如果一个浮动元素后面跟着一个非浮动的元素,那么就会产生一个覆盖的现象,很多自适应的两栏布局就是这么做的。比如下图的效果,参考例子:

 代码如下 复制代码



用户头像

您好, xxxx


一段文字描述!一段文字描述!一段文字描述!一段文字描述!



2.清除元素内部浮动

只要把父元素设为BFC就可以清理子元素的浮动了,最常见的用法就是在父元素上设置overflow: hidden样式,对于IE6加上zoom:1就可以了(IE Haslayout)。

3.嵌套元素Margin边距折叠问题的解决

按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如没有边框,非空内容,padding等)就会发生margin重叠。

因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠了。

相关文章

精彩推荐