CSS 系列之BFC
什么是 BFC?
BFC 即 Block Formatting Contexts (块级格式化上下文),它属于定位方案中的普通流。
我们可以把具有 BFC 特性的元素看作为隔离了的独立容器,容器内的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。
简单来说,就是 BFC 有一个自己的空间,在空间内怎么做,都不会影响外面。
BFC 原理
BFC元素垂直方向的边距会发生重叠,属于不同BFC的外边距不会发生重叠。BFC区域不会与浮动元素的布局重叠。BFC元素是一个独立的容器,外面的元素不会影响到内部元素,同样,内部元素也不会影响外部元素。- 浮动元素也会参与
BFC高度的计算。
触发 BFC
只要元素满足下面任一条件即可出发 BFC 特性
body根元素- 浮动元素:
float除none以外的值 - 绝对定位元素:
position的absolute和fixed display为inline-block、table-cells、flexoverflow除了visible之外的值 (如:hidden、auto、scroll)
BFC 特性及应用
1. 同一个 BFC 下外边距会发生折叠
1 | .box { |
1 | <body> |

从结果来看,两个 div 元素都处在同一个 BFC 容器下,也就是 body 根元素。所以 first 的下边距与 second 的上边距发生重叠,且保留大的值。所以两个元素之间的距离只有 100px,而不是 150px。
我们想要两个盒子不进行折叠,这时候只需要将两个盒子设置为 BFC 容器就可以了。
1 | .container { |
1 | <div class="container"><div class="box first"></div></div> |
这时候,两个盒子的垂直边距就变成了 150px。
2. BFC 可以包含浮动的元素(清除浮动)
浮动的元素会脱离标准文档流,我们看一个不设置 BFC 是的例子。
1 | .box { |
1 | <div class="box"> |
我们来看看显示效果,这时候 box 容器没有出发 BFC,显示时 child 是有浮动起来的,脱离文档流。

由于 child 元素浮动,脱离了文档流,所以容器只剩下 4px 的高度。
现在我们让 box 触发 BFC,这时候就会将浮动元素包裹起来。
1 | .box { |

我们看到,我们给 box 容器设置 overflow: hidden 触发 BFC,将浮动元素也包裹进 box 元素,清除了浮动效果。
相关文章推荐
-------------------- 本文结束
感谢阅读 --------------------