css2.1中定義
浮動,絕對定位元素,非塊盒的塊容器(例如,inline-blocks
,table-cells和table-captions
)和overflow
不爲visible
的塊盒會爲它們的內容建立一個新的塊格式化上下文
在一個塊格式化上下文中,盒在豎直方向一個接一個地放置,從包含塊的頂部開始。兩個兄弟盒之間的豎直距離由margin
屬性決定。同一個塊格式化上下文中的相鄰塊級盒之間的豎直margin
會合並
在一個塊格式化上下文中,每個盒的left外邊(left outer edge)挨着包含塊的left邊(對於從右向左的格式化,right邊挨着)。即使存在浮動(儘管一個盒的行盒可能會因爲浮動收縮),這也成立。除非該盒建立了一個新的塊格式化上下文(這種情況下,該盒自身可能會因爲浮動變窄)
MDN中的描述
塊格式化上下文(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
(分別是HTMLtable
、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
,即使該元素沒有包裹在一個多列容器中
創建了塊格式化上下文的元素中的所有內容都會被包含到該BFC
中。
塊格式化上下文對浮動定位與清除浮動都很重要。浮動定位和清除浮動時只會應用於同一個BFC
內的元素。浮動不會影響其它BFC
中元素的佈局,而清除浮動只能清除同一BFC
中在它前面的元素的浮動。外邊距摺疊也只會發生在屬於同一BFC
的塊級元素之間。
總結
BFC就是包住他的所有子元素