BFC
是什么?
BFC(Block Formatting Context,块级格式化上下文) 是 CSS 中的一种布局机制,它决定了元素如何定位其内容、如何与其他元素的布局和浮动元素进行交互。
特点
BFC 是一个独立的渲染区域,它内部的子元素不会影响外部元素的布局,反之亦然。BFC 为这些内部元素创建了一个局部的环境,在这个环境中,它们按照特定的布局规则排列。
触发条件
float 的值不为 none(即 float: left 或 float: right)。
position 的值为 absolute 或 fixed。
display 的值为 inline-block、table-cell、table-caption、flex 或 inline-flex。
overflow 的值为 hidden、auto、scroll 或 overlay。
contain: layout 属性被使用。
布局规则
BFC 的
内部元素在垂直方向上排列
:BFC 内部的块级元素会一个接一个地垂直排列,且每个元素的顶部紧贴前一个元素的底部(外边距会产生影响)。BFC
不会与浮动元素重叠
:BFC 容器会包裹浮动的子元素,并且不会发生与浮动元素的重叠。BFC 元素的外边界会从包含的浮动元素的边界开始。BFC
内部的元素不会与外部的浮动元素重叠
:BFC 可以用于解决浮动元素造成的布局问题,因为 BFC 元素不会与浮动元素发生重叠。计算高度时,BFC 会包含浮动的子元素:当父元素形成了 BFC,且其中包含浮动元素时,父元素会扩展高度以包含这些浮动元素。这是解决浮动高度塌陷问题的一种方法。
BFC 的
外边距不会与外部元素的外边距重叠
:在正常的文档流中,两个相邻的块级元素的垂直外边距会发生合并(外边距重叠)。如果其中一个元素形成了 BFC,外边距合并将不会发生。
应用场景
清除浮动(解决高度塌陷问题)
当一个父元素包含浮动的子元素时,父元素可能会因为没有包含浮动元素的高度而出现高度塌陷。通过让父元素形成 BFC,可以强制其包含浮动的子元素。防止外边距重叠
在正常文档流中,两个相邻块级元素的垂直外边距会发生合并
。通过让其中一个元素形成 BFC,可以避免这种外边距重叠的情况。自适应布局(避免浮动元素覆盖)
当一个浮动元素与另一个非浮动元素并排时,可能会出现重叠。通过将非浮动元素变成 BFC,可以避免这种重叠。布局中的多栏布局
使用 BFC 可以实现复杂的多栏布局。例如,通过使用 float 和 overflow,可以实现左侧栏和右侧栏浮动,中间内容自适应的布局。