用 :after 清除浮動,:before 處理 Margin Collpase 怎麼理解?
BFC 與 hasLayout 都看過,但理解不深,希望可以舉個例子說明下清除浮動時,加上:before 處理 margin collpase 的原理。
準確地說,並不是清除浮動,而是清除浮動後造成的影響,元素設置為float:left或者float:right之後,會脫離文檔流,簡單來講,就是該元素的位置不屬於該元素了。所以會造成浮動元素之後的元素替代佔有該元素的位置。同樣,也會造成父級元素高度不能自適應為子元素的高度。所以通常來講,清除浮動的方式有以下幾種,
- 設置父級元素overflow:hidden 觸發BFC使父級元素自適應為子元素的高度。
- 在浮動元素之後增加一個沒有實際作用的元素代替實際的元素替代浮動元素之後的元素受到浮動的影響,簡單來講,就是李代桃僵,借屍還魂。
- clearfix方式
第三種實際是第二種的升級版,代碼說明:
未清除浮動:&
&
&
&
&
&
&
&
&
&
子級元素1
&
&
結果如下:
很明顯:父級元素未顯示為藍色,因為沒有設置高度,也沒有自適應為內容的高度,子元素1和子元素2浮動造成了自身脫離了文檔流,其他元素受到影響,佔據了浮動元素的位置。overflow:hidden方式觸發BFC&
&
&
&
&
&
&
&
&
&
子級元素1
&