清除浮動(clearfix)

2021-05-23 21:58:57 字數 1841 閱讀 6829

web前端

2008-12-07 15:52:02

閱讀1089

字型大小:大

小訂閱

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

html4strict**:

test div

test div

test div

test div

test div

顯示的結果如下:

容器div沒有被撐開

大家可以看到,作為外部容器的邊框為紅色的div,沒有被撐開。這是因為內部的div因為float:left之後,就丟失了clear:both和display:block的樣式,所以外部的div不會被撐開。

我們想讓外部容器的div隨著內部div增多而增加高度,要怎麼解決呢?

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

html4strict**:

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,它會被強制換一行顯示。所以,我一直在尋找更好的解決辦法。

昨天在無數次的詢問了google大仙後,我終於找到了

how to clear floats without structural markup

這篇文章,找到了解決的辦法。

首先設定這樣的css:

css**:

.clearfix

:after

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

html4strict**:

test div

test div

test div

test div

test div

在firefox裡測試一下,哈哈,這樣做的確很有效,顯示正常,而且dojo的 drag & drop 也不會有問題了。原來,這個clearfix的css使用了after這個偽物件,它將在應用clearfix的元素的結尾新增content中的內容。在這裡新增了乙個句號".",並且把它的display設定成block;高度設為0;clear設為both;visibility設為隱藏。這樣就達到了撐開容器的目的啦。

css**:

.clearfix

:after

/* hides from ie-mac /*/

* html

.clearfix

/* end hide from ie-mac */

因為轉義字元"/",mac ie瀏覽器會忽略掉這段hack,但windows ie不會,它會應用

* html .clearfix 來達到撐開div容器的目的(貌似mac ie沒有辦法解決這個問題,不過幸好使用者數量是在是太少了,safari支援就可以了:p)。

測試一下,果然大功告成。

clearfix清除浮動

工作中有用到這些東西,也只是看到別人這麼用就照用了,沒有理解。查到了他的乙個原理介紹,記錄下。首先,bootstrap裡面的寫法 clearfix clearfix before,clearfix after clearfix after 在乙個有float 屬性元素的外層增加乙個擁有clearfi...

clearfix清除浮動

終極版一 clearfix after clearfix ie 7 6 解釋下 content 200b 這個引數,unicode字元裡有乙個 零寬度空格 即 u 200b,代替原來的 可以縮減 量。而且不再使用visibility hidden。clearfix before,clearfix a...

清除浮動clearfix

學習標籤 css clearfix 什麼是.clearfix css 複製 clearfix after clearfix 上述 說明 css 複製 clearfix after clearfix 這是針對於ie6的,因為ie6不支援 after偽類,這個神奇的zoom 1讓ie6的元素可以清除浮動...