clearfix after 清除css浮動

2021-09-06 12:42:39 字數 1792 閱讀 9060

在寫html**的時候,發現在firefox等符合w3c標準的瀏覽器中,如果有乙個div作為外部容器,內部的div如果設定了float樣式,則外部的容器div因為內部沒有clear,導致不能被撐開。看下面的例子:

test div

cssbbs

test div

test div

test div

執行這段**,大家可以看到,作為外部容器的邊框為紅色的div,沒有被撐開。這是因為內部的div因為float:left之後,就丟失了clear:both和display:block的樣式,所以外部的div不會被撐開。 我們想讓外部容器的div隨著內部div增多而增加高度,要怎麼解決呢?

以前我都是用這樣的方法來解決: test div

test div

test div

test div

test div

我們看到,在容器div內要顯示出來的float:left的所有的div之後,我們新增了這樣的乙個div:

。這樣,其實就在最後增加了clear的動作。

但是,我總覺得,這麼多加乙個div有點不妥。一是多了乙個沒有意義的div,二是在用dojo做drag & drop的時候,由於這個div是容器div的乙個字節點,如果這個節點被移動,則會造成排版上的bug:如果要顯示的藍框的div被移到這個div之後,則因為clear:both,它會被強制換一行顯示。所以,我一直在尋找更好的解決辦法。

解決的辦法: 首先設定這樣的css: css**:

**:.clearfix:after 然後,我們再修改原來的html**,讓外部的容器div來使用這個css: html4strict**:

.clearfix:after

* html .clearfix

在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

* html .clearfix

因為轉義字元"\",mac ie瀏覽器會忽略掉這段hack,但windows ie不會,它會應用 * html .clearfix 來達到撐開div容器的目的(貌似mac ie沒有辦法解決這個問題,不過幸好使用者數量是在是太少了,safari支援就可以了:p)。

以下**可以這麼解釋:

.clearfix:after   <----這是針對於ie6的,因為ie6不支援:after偽類,這個神奇的zoom:1讓ie6的元素可以清除浮動來包裹內部元素。具體意思的話,不用深究,聽說微軟的工程師自己都無法解釋清楚。height:1%效果也是一樣。

整段**就相當於在浮動元素後面跟了個寬高為0的空div,然後設定它clear:both來達到清除浮動的效果。 之所以用它,是因為,你不必在html檔案中寫入大量無意義的空標籤,又能清除浮動。

話說回來,你這段**真是個累贅啊,這樣寫不利於維護。 只要寫乙個.clearfix就行了,然後在需要清浮動的元素中  新增clearfix類名就好了。

如:

clearfix after的用法,清除浮動

今天回顧一下css中的清除浮動 所有主流瀏覽器都支援 after 偽元素。clearfix after.clearfix 不知道有什麼用處,不加ie7也沒有問題 測試 html head title new document title meta name generator content edi...

用clearfix after消除 css浮動

在寫html 的時候,創造在firefox等符合w3c標準的瀏覽器中,如果有乙個div作為外部容器,內部的div如果設定了float樣式,則外部的容器div因為內部沒有clear,導致不能被撐開。看下面的例子 testdiv cssbbs testdiv testdiv testdiv 執行這段 大...

CSS清除浮動 清除float浮動

css清除浮動方法集合 一般浮動是什麼情況呢?一般是乙個盒子裡使用了css float浮動屬性,導致父級物件盒子不能被撐開,這樣css float浮動就產生了。浮動產生樣式效果截圖 本來兩個黑色物件盒子是在紅色盒子內,因為對兩個黑色盒子使用了float浮動,所以兩個黑色盒子產生了浮動,導致紅色盒子不...