子元素浮動父容器高度不能自適應的CSS解決方法

網頁前端工作者經常會遇到子元素設置float浮動後導致父容器高度不能自適應,也就是俗稱的外部容器不能被“撐大”,常見表現爲背景或邊框異常,這時我們就需要來清除“閉合浮動”,方法主要有以下4種:

1. 額外標籤法
這種方法就是向父容器的末尾再插入一個額外的標籤,並令其清除浮動(clear)以撐大父容器。這種方法瀏覽器兼容性好,沒有什麼問題,缺點就是需要額外的(而且通常是無語義的)標籤。
雖然許多人不喜歡這種方法,但是它卻是W3C推薦的方法。

<div style="clear:both;"></div>

或者使用

<br style="clear:both;" />

2. 使用after僞類
這種方法就是對父容器使用after僞類和內容聲明在指定的現在內容末尾添加新的內容。經常的做法就是添加一個“點”,因爲它比較小不太引人注意。然後我們再利用它來清除浮動(閉合浮動元素),並隱藏這個內容。
這種方法兼容性一般,但經過各種 hack 也可以應付不同瀏覽器了,同時又可以保證html比較乾淨,所以用得還是比較多的。
以下爲一個採用僞類的CSS示範寫法:

#box:after{  
     content:"."; //這裏也可以是空content: "";
     height:0;  
     visibility:hidden; //這裏或者可以用overflow:hidden 
     display:block;  
     clear:both;  
}
#box{*zoom:1;}//兼容IE7以下

或者

#box:after{  
     content:""; //這裏也可以是空content: "";
     display:table;  
     clear:both;  
}
#box{*zoom:1;}//兼容IE7以下

3. 設置overflow爲hidden或者auto
這種做法就是將父容器的overflow設爲hidden或auot就可以在標準兼容瀏覽器中閉合浮動元素.
不過使用overflow的時候,可能會對頁面表現帶來影響,而且這種影響是不確定的,你最好是能在多個瀏覽器上測試你的頁面。如無特殊情況,一般推薦使用hidden屬性。

4. 浮動外部元素,float-in-float
這種做法就是讓父容器也浮動,這利用到了浮動元素的一個特性——浮動元素會閉合浮動元素。這種方式在 IE/Win 和標準兼容瀏覽器中都有較好的效果,但缺點也很明顯——父容器未必想浮動就浮動的了,畢竟浮動是一種比較特殊的行爲,有時佈局不允許其浮動也很正常。

通常使用方法

.clearfix { 
  *zoom: 1; 
} 
.clearfix:before,.clearfix:after { 
  display: table; 
  line-height: 0; 
  content: ""; 
} 
.clearfix:after { 
  clear: both; 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章