浮動,絕對定位元素,非塊盒的塊容器(例如,
inline-blocks
,table-cells
和table-captions
)和overflow
不爲visible
的塊盒(當該值已被傳播到視口時除外(except when that value has been propagated to the viewport))會爲它們的內容創建一個新的塊格式化上下文html
BFC佈局規則:佈局
BFC內部盒會在垂直方向,一個接一個的放置post
盒的垂直方向的距離由margin
決定.屬於同一個BFC的兩個相鄰盒子的margin
會發生重疊學習
每一個元素的margin box
的左邊,與包含塊border box
的左邊相接觸(對於從左往右的格式化,不然相反).即便存在浮動也如此flex
BFC的區域不會與float box
重疊(利用這個特性能夠作自適應窗口大小)code
BFC就是頁面上的一個隔離的獨立容器,容器裏面的子元素不會影響到外面的元素.反之也是如此htm
計算BFC高度時,浮動元素也參與計算(清除浮動的原理)blog
塊格式化上下文由如下之一建立:get
根元素或其它包含它的元素it
浮動(元素的float
不是none
)
絕對定位的元素(元素具備position
爲absolute
或fixed
)
行內塊 inline-blocks(元素具備display:inline-block
)
表格單元格(元素具備display:table-cell
,表格單元格默認屬性)
表格標題(元素具備display:table-caption
,表格標題默認屬性)
塊元素 元素具備overflow
值不是visible
彈性盒子flex boxes(元素具備display:flex
或inline-flex
)
display:flow-root
一個塊格式化上下文包括建立它的元素內部全部內容,除了會建立新的塊格式化上下文的元素
BFC能夠解決margin
摺疊問題,須要注意的是,overflow:hidden
等屬性只在父子元素下起做用,相鄰兄弟元素無效
BFC能夠改變float的覆蓋兄弟元素的問題,實現一側定寬的佈局,還能夠解決父元素塌陷問題