在進行html佈局及css編寫的時候,你是否遇到過這樣的問題:css
...html
一般咱們使用塊級格式化上下文(BFC)就能解決。前端
塊格式化上下文(Block Formatting Context,BFC) 是Web頁面的可視化CSS渲染的一部分,是塊盒子的佈局過程發生的區域,也是浮動元素與其餘元素交互的區域。瀏覽器
FC(formatting context)直譯過來是格式化上下文,它是頁面中的一塊渲染區域,有一套渲染規則,決定了其子元素如何佈局,以及和其餘元素之間的關係和做用。安全
BFC就是頁面上的一個隔離的獨立容器,容器裏面的子元素不會影響到外面的元素,而且容器元素不會影響兄弟元素的佈局。ide
column-span 爲 all 的元素始終會建立一個新的BFC,即便該元素沒有包裹在一個多列容器中。佈局
下面例子解釋如何讓浮動內容和父元素等高,清楚浮動負面影響post
htmlflex
<div class="outer"> <div class="float">I am a floated element.</div> I am text inside the outer box. </div>
cssspa
.outer { border: 5px dotted rgb(214,129,137); border-radius: 5px; width: 450px; padding: 10px; margin-bottom: 40px; } .float { padding: 10px; border: 5px solid rgba(214,129,137,.4); border-radius: 5px; background-color: rgba(233,78,119,.4); color: #fff; float: left; width: 200px; margin: 0 20px 0 0; }
經過給左側文字設置向左浮動實現文字環繞效果是很常見的作法,當文本足夠長時,會看到以下效果,父元素能夠徹底包裹子元素。
但事實上,float中的文字已經脫離文檔,若是文檔流文字過少,浮動元素就會溢出父元素邊緣。
這時候爲父元素設置overflow: auto
或者除invisible
默認值以外的任何有效值都能建立BFC解決這個問題,使父元素包含浮動元素
.outer { overflow: auto; }
外邊距摺疊的規則是:當兩個塊級元素相鄰而且在同一個塊級格式化上下文時,它們垂直方向上的外邊距會產生重疊
html
<div class="outer"> <p>I am paragraph one and I have a margin top and bottom of 20px</p> <p>I am paragraph two and I have a margin top and bottom of 20px</p> </div>
css
.outer { background-color: #ccc; margin: 0 0 40px 0; } p { padding: 0; margin: 20px 0 20px 0; background-color: rgb(233,78,119); color: #fff; }
因爲p元素的邊緣和外部div上的邊距之間沒有內容,所以二者將會合並,所以段落最終與框的頂部和底部齊平。咱們在段落的上方和下方看不到任何灰色。以下圖:
當父元素設置了BFC以後,父元素與子元素p重疊區域將再也不合並
.outer { background-color: #ccc; margin: 0 0 40px 0; overflow: auto; }
依然像上面例子文字環繞效果的佈局和樣式
html
<div class="outer"> <div class="float">I am a floated element.</div> <div class="text">I am text...</div> </div>
css
.float{ float: left; }
這時候若是不想要右側文字環繞浮動文字盒子,在左側div設置浮動的狀況下,我能夠經過使右邊div成爲BFC,使兩個兄弟div互相隔離、互不影響,從而達到去除文字環繞的效果。
.text { overflow: auto; }
建立BFC的許多方法一般會帶來一些反作用,目前爲止彷佛最安全的就是overflow
屬性,但某些狀況下咱們不須要滾動條,此時滾動條就變成了這種方式的反作用,所以display
有個新的屬性flow-root
能夠在任何須要建立BFC場景下使用,它而且不會帶來任何反作用。
flow-root
瀏覽器兼容狀況:
瀏覽器對此值的支持是有限的,若是要在不支持flex或網格佈局瀏覽器建立回退,瞭解BFC阻止浮動元素的負面影響十分必要。
PS:更多前端資訊、技術乾貨,請關注公衆號「前端新視界」