1.BFC 定義css
BFC(Block formatting context)直譯爲"塊級格式化上下文"。它是一個獨立的渲染區域,只有Block-level box參與, 它規定了內部的Block-level Box如何佈局,而且與這個區域外部絕不相干。佈局
2.BFC的生成學習
上文提到BFC是一塊渲染區域,那這塊渲染區域到底在哪,它又是有多大,這些由生成BFC的元素決定,CSS2.1中規定知足下列CSS聲明之一的元素便會生成BFC。spa
3. BFC的約束規則3d
看到以上的幾條約束,想一想咱們學習css時的幾條規則code
4. BFC在佈局中的應用orm
4.1防止margin重疊(塌陷) xml
<style> .topBox{width: 200px;height: 200px;background-color: red;margin-bottom: 20px;} .bottomBox{width: 200px;height: 200px;background-color: black;margin-top: 30px;overflow: hidden;} </style> <body> <div class="topBox"></div> <div class="bottomBox"></div> </body>
margin塌陷問題:在標準文檔流中,塊級標籤之間豎直方向的margin會以大的爲準,這就是margin的塌陷現象。能夠用overflow:hidden產生bfc來解決。blog
<style> .box{overflow: hidden;} .topBox{width: 200px;height: 200px;background-color: red;margin-bottom: 20px;} .bottomBox{width: 200px;height: 200px;background-color: black;margin-top: 30px;overflow: hidden;} </style> <body> <div class="topBox"></div> <div class="box"> <div class="bottomBox"></div> </div> </body>
給其中一個子元素嵌套一個DIV,經過給這個DIV設置屬性觸發BFC就能夠解決問題。文檔
4.2清除內部浮動
<style> .par { border: 5px solid #fcc; width: 300px; } .child { border: 5px solid #f66; width:100px; height: 100px; float: left; } </style> <body> <div class="par"> <div class="child"></div> <div class="child"></div> </div> </body>
這能夠看到由於子元素浮動形成父元素高度塌陷,這時候經過在父元素上添加overflow:hidden;觸發BFC就能解決這個問題了。
<style> .par { border: 5px solid #fcc; width: 300px; overflow: hidden; } .child { border: 5px solid #f66; width:100px; height: 100px; float: left; } </style> <body> <div class="par"> <div class="child"></div> <div class="child"></div> </div> </body>
4.3 兩欄佈局
問題案例:div浮動兄弟這該問題:因爲左側塊級元素髮生了浮動,因此和右側未發生浮動的塊級元素不在同一層內,因此會發生div遮擋問題。能夠給右側元素添加 overflow: hidden,觸發BFC來解決遮擋問題。
<style> .floatBox{ height: 100px; width: 100px; float: left; background: lightblue; } .ordinaryBox{ width: 200px; height: 200px; background: grey; } </style> <body> <div class="floatBox"> 我是一個左浮動的元素 </div> <div class="ordinaryBox"> 我是一個沒有設置浮動, 也沒有觸發 BFC 元素, width: 200px; height:200px; background: grey; </div> </body>
這時候其實第二個元素有部分被浮動元素所覆蓋,可是文本信息不會被浮動元素所覆蓋,若是想避免元素被覆蓋,可觸發第二個元素的BFC特性,在第二個元素中加入overflow:hidden,就會變成: