再來一個清除浮動(clearfix)
日期:2013-12-14 來源:攀枝花惠康網絡公司
在寫HTML代碼的時辰,發此刻Firefox等合適W3C尺度的瀏覽器中,如不美觀有一個DIV作為外部容器,內部的DIV如不美觀設置了float樣式,則外部的容器DIV因為內部沒有clear,導致不能被撐開。看下面的例子:
HTML4STRICT代碼:
- <div style=“width:200px;border:1px 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>
顯示的結不美觀如下:

容器DIV沒有被撐開
巨匠可以看到,作為外部容器的邊框為紅色的DIV,沒有被撐開。這是因為內部的DIV因為float:left之后,就丟失蹤了clear:both和display:block的樣式,所以外部的DIV不會被撐開。
HTML4STRICT代碼:
- <div style=“width:200px;border:1px solid red;” class=“clearfix”>
- <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>
我們想讓外部容器的DIV跟著內部DIV增多而增添高度,要怎么解決呢?
以前我都是用這樣的體例來解決:
HTML4STRICT代碼:
- <div style=“width:200px;border:1px 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<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:
昨天在無數次的詢問了Google年夜仙后,我終于找到了How To Clear Floats Without Structural Markup 這篇文章,找到體味決的法子。
可是,在文章中說,Windows IE并不撐持這樣做。所以要讓IE也完美顯示,則必需在clearfix這個CSS界說的后面加上一些專門為IE設定的HACK。CSS如下:
CSS代碼:- .clearfix:after {
- content: “.”;
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
- }
- /* Hides from IE-mac \*/
- * html .clearfix {height: 1%;}
- /* End hide from IE-mac */
在Firefox里測試一下,哈哈,這樣做簡直很有用,顯示正常,而且dojo的 Drag & Drop 也不會有問題了。原本,這個clearfix的CSS使用了after這個偽對象,它將在應用clearfix的元素的結尾添加content中的內容。在這里添加了一個句號”.”,而且把它的display設置成block;高度設為0;clear設為both;visibility設為潛匿。這樣就達到了撐開容器的目的啦。
因為轉義字符”\”,Mac IE瀏覽器會忽略失蹤這段Hack,但Windows IE不會,它會應用 * html .clearfix {height: 1%;} 來達到撐開DIV容器的目的(貌似Mac IE沒有法子解決這個問題,不外幸好用戶數目是在是太少了,Safari撐持就可以了:p)。
測試一下,不美觀真年夜功樂成。
文章來源:攀枝花惠康網絡公司
惠康網絡,是一家專業從事攀枝花網站建設,攀枝花網站制作,攀枝花網站設計公司,提供網站建設一條龍服務(網站域名注冊+網站服務器租用+網站開發+網站維護+網站營銷推廣),惠康網絡立足攀枝花,輻射全中國,攀枝花惠康網絡的客戶已經遍布國內各地大中小城市,我們高效優質的網站建設服務深受用戶好評。