定义
BFC(Block formatting context)直译为"块级格式化上下文",可以理解为一个独立的区域,不受外界干扰
分解
BFC = Box + Formatting context
Box
是CSS布局的基本单位,一个页面由很多个Box组成,根据display
属性,又分为block-level box
,其display
为block,list-item,table
;另一个为inline-level box
,其display
为inline,inline-block,inline-table
Formatting Context
是W3C规范中的一个概念,它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)
和 Inline formatting context (简称IFC)
。
BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。
布局规则
- 内部元素会在垂直方向放置
- 元素垂直方向的距离由
margin
决定 - BFC的区域不会与
float box
重叠 - BFC是页面上的一个独立容器,容器内子元素不会影响外面的元素,也不受外面影响
- 计算BFC高度时,浮动元素也参与计算
形成条件
- 浮动
- 绝对或者固定定位
display
为inline-block/table-cell/flex/inline-flex/table-caption
- 设置了
overflow
应用场景
margin重叠
两个相邻的元素同时设置了margin
时,之间的margin
会重叠
如果想要它不重叠,给第二个P
包一个div
,并将div
的overflow:hidden
形成一个BFC
这个应用场景比较少,大多数情况下布局的时候其实是希望它重叠的
一个经常遇到的情况,两个div
嵌套,给里面的div
设置margin
后,外面的div
也出现了margin
,因为两个div
之间发生了margin
重叠,重叠的结果会使margin
比较小的div
变成与另外一个div
一致的margin
解决办法: 把外层的div
变成BFC
即可
自适应两栏布局
基于BFC的区域不会与float box重叠
的特性,可以将左侧栏float:left
,然后右侧栏变为BFC
清除浮动
基于计算BFC高度时,浮动元素也参与计算
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。