文章首發於掘金css
一、float的值不是none。
二、position的值不是static或者relative。
三、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
四、overflow的值不是visiblehtml
<style> body { width: 300px; position: relative; } .aside { width: 100px; height: 150px; float: left; background: #666666; } .main { height: 200px; background: #fcc; } </style> <body> <div class="aside"></div> <div class="main"></div> </body>
若是咱們想要的效果是兩個盒子分開,那麼咱們能夠利用BFC的佈局規則:BFC區域不會與float box重疊的原則,咱們給main加上overflow:hidden的屬性,神奇的事情發生了:
web
<style> body { width: 500px; } .par { border: 5px solid #fcc; /* 下面幾種方式都會生成bfc */ /* overflow: hidden; */ /* display: inline-block; */ /* position: absolute; */ /* float: left; */ } .child { border: 5px solid #f66; width: 100px; height: 100px; float: left; } </style>
上述代碼由於浮動,會出現par高度塌陷的狀況,爲了達到清除內部浮動,咱們能夠觸發par生成bfc,那麼par在計算高度的時候,par內部的浮動元素child也會參與計算,因此咱們給par加上overflow:hidden的屬性後問題就解決了。
ide
<style> p { color: #f55; background: #fcc; width: 200px; line-height: 100px; margin: 100px; } </style> <body> <p>haha</p> <p>hehe</p> </body>
正常咱們給兩個p 標籤都加上了margin:100px,可是兩個p之間只有100px,爲何呢,同一個BFC環境時候,重疊的margin只去最大的,因此若是想解決這個問題,咱們能夠把下面的p標籤包一層BFC。佈局
<style> p { color: #f55; background: #fcc; width: 200px; line-height: 100px; margin: 100px; } .warp { overflow: hidden; } </style> <p>haha</p> <div class="warp"> <p>hehe</p> </div>