块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。
下列方式会创建块格式化上下文:
float
不是 none
)position
为 absolute
或 fixed
)display
为 inline-block
)display
为 table-cell
,HTML表格单元格默认为该值)display
为 table-caption
,HTML表格标题默认为该值)display
为 table、
table-row
、 table-row-group、
table-header-group、
table-footer-group
(分别是HTML table、row、tbody、thead、tfoot的默认属性)或 inline-table
)overflow
值不为 visible
的块元素display
值为 flow-root
的元素contain
值为 layout
、content
或 strict
的元素display
为 flex
或 inline-flex
元素的直接子元素)display
为 grid
或 inline-grid
元素的直接子元素)column-count
或 column-width
不为 auto,包括
column-count
为 1
)column-span
为 all
的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中(标准变更,Chrome bug)。块格式化上下文包含创建它的元素内部的所有内容.
块格式化上下文对浮动定位(参见 float
)与清除浮动(参见 clear
)都很重要。浮动定位和清除浮动时只会应用于同一个BFC内的元素。浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。
上文摘自MDN:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context
下面详细说明
触发条件:
positon: absolute/fixed
display: inline-block / table / table-cell...
float
元素ovevflow
!== visible
规则:
应用:
margin
重叠