CSS_recall_BFC

;(

? ? ? 如果有幸,被別人看到了,發現有誤的地方,還請批評指正!

)(自己回憶,給自己看);

先說說什么是 BFC。

先來看看官方一點的解釋

Block Formatting Context 塊級格式化上下文。通俗的說也就是一個獨立的塊級渲染區域,該區域有一套自己的的渲染機制來約束塊級盒子的布局,并且與該區域外面的其他區域布局無關。(沒錯,當我第一眼看到別人這么說這么寫的時候,我也是一臉懵逼,似懂非懂。)

我自己的理解

如上所說,創建了BFC的元素,就是一個獨立的盒子,這個獨立的區域內的盒子怎么布局,是不會影響區域以外的部分,反過來也一樣,外面的元素布局,不會影響這個獨立區域內部的元素布局。并且,這個獨立的區域,依然屬于文檔中的普通文檔流。打個比方(我也不知道恰不恰當),大的文檔流就是一個國家,由國家的法律法規約束,我們的家庭是在國家內的一個小家,我們家里有自己的一套規則。在不違反法律法規的原則下,我們想干什么,想吃什么對國家不會有影響。反過來,也一樣。

BFC的特性

01,BFC會阻止外邊距疊加:一般情況,兩個相鄰的塊級框,它們之間的垂直方向的外邊距會發生疊加。 如果這兩個相鄰的塊框不屬于同一個BFC就不會疊加!

02,BFC不會重疊浮動的元素:一個BFC的邊框不能和它里面的元素的margin重疊。也就是說瀏覽器將會給BFC創建隱式的外邊距來阻止它和浮動元素的外邊距的疊加。當給一個挨著浮動的BFC添加負得外邊距不會起作用!!!

BFC的觸發條件

01,float除了none以外的值

02,display:inline-block、table-cell、table-caption

03,overflow:hidden

04,position:absolute,fixed

說了BFC,隨之而來的就是清除浮動

我的理解是,清除浮動,實際上是清除浮動所帶來的影響。

清除浮動的原理,清除浮動的原理其實就是讓浮動這塊的元素形成BFC,就上面的例子,如果有辦法讓父元素包住子元素,那么這個區域就是BFC了,就好進行布局管理了,而這個方法就是清除浮動。

清除浮動的方法大致有這么幾種

1),添加額外的標簽(原理是觸發BFC):此方法的哲學是在某個區域內,浮動元素脫離了文檔流,在浮動元素下面添加一個div標簽,設置clear:both屬性。此方法,通俗易懂,容易掌握。但是,頁面中此方法用得多了,就會出現很多無意義的空標簽,這也違背了結構與表現分離的原則,而且后期維護肯定是噩夢般的存在。所以是堅決不推薦的。

2),這是一個傻瓜式的本辦法,就是給父元素也設置浮動,但是雖然不存在語義化的問題,但又使得父元素與之相鄰的元素的布局受到影響,如果在一直往上設置浮動,恐怕一直設置到body這也不顯示。所以肯定也是堅決不推薦的。

3),給父元素設置overflow:hidden(原理是觸發BFC):此方法不存在語義化的問題,代碼量極少。但是需要注意一個問題,就是內容增多的時候不會自動換行導致溢出的內容被隱藏掉。

4),給父元素設置display:table(原理是觸發BFC):此方法會改變設置改屬性的盒子的盒模型。比如:父盒子沒有寬度,沒有高度,塊級元素默認占滿一行,設置此屬性過后,默認寬度會發生改變。

5),使用偽元素(注意不是偽類):.clearfix:after{content:".";display:block;height:0;visibility:hidden;clear:both;}.clearfix{*zoom:1;}只需注意謹慎使用,如使用不當會造成代碼量增加。

此方法 的原理:

1) display:block 使生成的元素以塊級元素顯示,占滿剩余空間;

2) height:0 避免生成內容破壞原有布局的高度。

3) visibility:hidden 使生成的內容不可見,并允許可能被生成內容蓋住的內容可以進行點擊和交互;

4)通過 content:”.”生成內容作為最后一個元素,至于content里面是點還是其他都是可以的,有些版本可能content 里面內容為空,不推薦這樣做的,firefox直到7.0 content:”” 仍然會產生額外的空隙;(bug!!)

5)zoom:1 觸發IE hasLayout。(IE6,7不支持偽元素故添加此屬性閉合浮動)


順便說一下解決父盒子高度塌陷的問題

如上面所說道的方法就可以用,比如給父盒子添加overflow:hidden,display:table,偽類清除浮動。還有就是添加空元素(所謂的隔墻法),當然還有一種,就是給父盒子設置高度。用哪一種,見仁見智。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,805評論 1 92
  • 一,浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 浮動模型是一種可視化格式模型,浮動...
    DeeJay_Y閱讀 901評論 0 4
  • relative:生成相對定位的元素,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 966評論 0 2
  • 1.CSS基本概念 1.1 CSS的定義 CSS(Cascading Style Sheets)層疊樣式表,主要用...
    寥寥十一閱讀 1,875評論 0 6
  • 一個幾百年村莊 流傳著傳統的思想 村莊并非富裕 卻流露出令人驚嘆的氣息 村莊的座落 圍繞著一條將要干涸的溪邊 幾百...
    雁楠秋閱讀 228評論 4 1