BFC 全稱爲塊級格式化上下文(Block Formatting Context),BFC 是 W3C CSS2.1 規範中的一個概念。
它決定了元素如何對其內容進行定位以及與其它元素的關係和相互做用,當涉及到可視化佈局的時候,Block Formatting Context 提供了一個環境,HTML 元素在這個環境中按照必定規則進行佈局。
一個環境中的元素不會影響其它環境中的佈局。好比浮動元素會造成 BFC,浮動元素內容的子元素主要受該浮動元素影響,兩個浮動元素之間是互不影響的。
能夠說 BFC 就是一個做用範圍,把它理解成一個獨立的容器,而且這個容器裏 box 的佈局與這個容器外的 box 絕不相干。html
position: absolute|fixed
)display: inline-block
)display: table-cell
,HTML 表格單元格默認屬性)display: table-caption
,HTML 表格標題默認屬性)垂直外邊距重疊問題瀏覽器
<style> .div1 { background-color: red; height: 50px; margin-bottom: 10px; } .div2 { background-color: blue; height: 50px; margin-top: 20px; } </style> <div class="div1"></div> <div class="div2"></div>
此時,div1 和 div2 垂直間距爲較大的 20px
,而非預期的 20px + 10px
。佈局
將其中一個 div 包裹在 BFC 中,便可解決此問題。flex
<style> .box { overflow: hidden; } .div1 { background-color: red; height: 50px; margin-bottom: 10px; } .div2 { background-color: blue; height: 50px; margin-top: 20px; } </style> <div class="box"> <div class="div1"></div> </div> <div class="div2"></div>
清除浮動code
<style> .box { border: 1px solid black; } .float { float: left; width: 200px; height: 200px; background-color: red; } </style> <div class="box"> <div class="float">1</div> <div class="float">2</div> <div class="float">3</div> </div>
在瀏覽器中預覽,能夠清除看到子元素沒有將父元素撐開。此時讓父元素造成 BFC 便可清除浮動帶來的影響。orm
<style> .box { border: 1px solid black; overflow: hidden; } .float { float: left; width: 200px; height: 200px; background-color: red; } </style> <div class="box"> <div class="float">1</div> <div class="float">2</div> <div class="float">3</div> </div>