DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> CSS入門知識 >> CSS詳解 >> 用clearfix:after消除css浮動解決外部div不能撐開問題
用clearfix:after消除css浮動解決外部div不能撐開問題
編輯:CSS詳解     
在寫Html代碼的時候,創造在Firefox等符合W3C標准的浏覽器中,如果有一個DIV作為外部容器,內部的DIV如果設置了float樣式,則外部的容器DIV因為內部沒有clear,導致不能被撐開。看下面的例子:

復制代碼代碼如下:
<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增多而增加高度,要怎麼解決呢?

以前我都是用這樣的法子 來解決:

復制代碼代碼如下:
<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,它會被強制 換一行顯示。所以,我一直在尋找更好的解決措施。

解決的措施:
首先設置這樣的CSS:
CSS代碼:

復制代碼代碼如下:
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}

然後,我們再修正原本的Html代碼,讓外部的容器DIV來應用這個CSS:
Html4STRICT代碼:

復制代碼代碼如下:
<style>
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* Html .clearfix {height: 1%;}

在Firefox裡測試一下,哈哈,這樣做的確很有效,顯示正常,而且dojo的 Drag & Drop 也不會有問題了。原本,這個clearfix的CSS應用了after這個偽對象,它將在利用 clearfix的元素的結尾添加content中的內容。在這裡添加了一個句號".",並且把它的display設置成block;高度設為 0;clear設為both;visibility設為潛藏 。這樣就達到 了撐開容器的目標啦。

但是,Windows IE並不支撐這樣做。所以要讓IE也完善顯示,則必須在clearfix這個CSS定義的後面加上一些專門為IE設定的HACK。CSS如下:
CSS代碼:
代碼:

復制代碼代碼如下:
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* Html .clearfix {height: 1%;}

因為轉義字符"\",Mac IE涉獵器會漠視 掉這段Hack,但Windows IE不會,它會利用 * Html .clearfix {height: 1%;} 來達到 撐開DIV容器的目標(貌似Mac IE沒有措施解決這個問題,不過幸好用戶數量是在是太少了,Safari支撐就可以了:p)。
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved