是块级的格式化上下文,其上下文内有其特定的布局规则,是浮动元素与其它元素可发生交互的区域
以下几个常用的方式会创建块级格式化上下文:
<html></html> (根元素即是 BFC)
float 不为 none(浮动元素)
position 为 absolute,fixed(绝对定位元素)
display 值为以下之一
专门用于创建BFC的 flow-root,意在无副作用的创建BFC
行内块级 inline-block
表格相关 table,table-cell…
灵活布局(flex)或栅格布局(grid)的直接子元素(子元素不能为 flex,grid 或 table 容器)
其它详细的创建方法可查阅MDN 文档
BFC 常常用来清除浮动,因为其效果有:
包含内部浮动
排除外部浮动
阻止外边距重叠
通俗来说就是 创建一个内外隔绝的环境,外部不会影响到内部,内部也不会影响到外部
下面代码由一个父元素包裹两个同级的子元素,第二个子元素为浮动元素
由于第二个子元素是浮动的,所以会导致父元素高度坍塌
但是当我们在父元素创建一个 BFC 后,就不会造成高度坍塌了,这是我们说的第一个特性:包含内部浮动
两个同级元素,要构建一个左栏固定宽度 + 右侧填充的布局,左侧使用浮动的话会和右侧重叠
在右侧创建 BFC 后可以解决这个问题,这里利用了 BFC 的 排除外部浮动 特性
一般可以通过给重叠的元素套一个父元素,并设置父元素的内边距 padding、border 等来防止外边距重叠,但如果当前元素不能设置这些属性,这时就要靠 BFC 了
可以通过在元素外部包裹一个创建了 BFC 的元素来防止外边距重叠
参考