在寫HTML代碼的時候,發現在Firefox等符合W3C標準的瀏覽器中,如果有一個DIV作為外部容器,內部的DIV如果設置了float樣式,則外部的容器DIV因為內部沒有clear,導致不能被撐開。看下面的例子:
HTML4STRICT代碼:
代碼:
<div style=”border:2px solid red;”>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>CSSBBS</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
</div>
大家可以看到,作為外部容器的邊框為紅色的DIV,沒有被撐開。這是因為內部的DIV因為float:left之后,就丟失了clear:both和display:block的樣式,所以外部的DIV不會被撐開。
我們想讓外部容器的DIV隨著內部DIV增多而增加高度,要怎么解決呢?
以前我都是用這樣的方法來解決:
HTML4STRICT代碼:
代碼:
<div style=”border:2px solid red;”>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”float:left;width:80px;height:80px;border:1px solid blue;”>TEST DIV</div>
<div style=”clear:both;”></div>
</div>
我們看到,在容器DIV內要顯示出來的float:left的所有的DIV之后,我們添加了這樣的一個DIV:<div style="clear:both"></div> 。這樣,其實就在最后增加了clear的動作。
但是,我總覺得,這么多加一個DIV有點不妥。一是多了一個沒有意義的DIV,二是在用dojo做Drag & Drop的時候,由于這個DIV是容器DIV的一個字節點,如果這個節點被移動,則會造成排版上的Bug:如果要顯示的藍框的DIV被移到這個DIV之后,則因為clear:both,它會被強制換一行顯示。所以,我一直在尋找更好的解決辦法。
昨天在無數次的詢問了Google大仙后,我終于找到了How To Clear Floats Without Structural Markup 這篇文章,找到了解決的辦法。
首先設置這樣的CSS:
CSS代碼:
代碼:
.clearfix:after {
content: “.”;
display: block;
height: 0;
新聞熱點
疑難解答