css hack之清除浮動(dòng)(clearfix)
發(fā)布時(shí)間:2010-10-28 23:28:49 作者:佚名
我要評(píng)論

平常做東西,經(jīng)常要碰到清除浮動(dòng)(對(duì)于一些浮動(dòng)元素) 一般最簡(jiǎn)單的方式是在要清除浮動(dòng)的元素后直接加一div
<div class='clear'></div>
但這樣增加了頁(yè)面的結(jié)構(gòu)的源代碼,造成代碼的擁腫,其實(shí)也可以有更好的辦法,
在浮動(dòng)元素的外包c(diǎn)learfix樣式
<div class="clearfix">
<div class="fl"></div>
<div class="fr"></div>
</div>
.clearfix:after{
visibility:hidden;
display:block;
font-size:0;
content:" ";
clear:both;
height:0;
}
.clearfix { display: inline-table; }
/* Hides from IE-mac \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* End hide from IE-mac */
說(shuō)明:
*對(duì)大多數(shù)符合標(biāo)準(zhǔn)的瀏覽器應(yīng)用第一個(gè)聲明塊,目的是創(chuàng)建一個(gè)隱形的
內(nèi)容為空的塊來(lái)為目標(biāo)元素清除浮動(dòng)。
*第二條為clearfix應(yīng)用 inline-table 顯示屬性,僅僅針對(duì)IE/Mac。
*利用 * / 對(duì) IE/Mac 隱藏一些規(guī)則:
* height:1% 用來(lái)觸發(fā) IE6 下的haslayout。
*重新對(duì) IE/Mac 外的IE應(yīng)用 block 顯示屬性。
*最后一行用于結(jié)束針對(duì) IE/Mac 的hack。
由于此方法針對(duì)的瀏覽器或成為歷史(尤其是Mac下的IE5 ),或正在靠近
標(biāo)準(zhǔn)的路上,這個(gè)方法就不再那么與時(shí)俱進(jìn)了。
拋掉對(duì) IE/Mac 的支持之后,新的清除浮動(dòng)方法:
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}* html .clearfix { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */
說(shuō)明:
IE6 和 IE7 都不支持 :after 這個(gè)偽類(lèi),因此需要后面兩條來(lái)觸發(fā)IE6/7的haslayout,以清除浮動(dòng)。幸運(yùn)的是IE8支持 :after 偽類(lèi)。因此只需要針對(duì)IE6/7的hack了。
糖伴西紅柿說(shuō):
Jeff Starr 在這里針對(duì)IE6/7用了兩條語(yǔ)句來(lái)觸發(fā)haslayout。我在想作者為什么不直接用 * 來(lái)直接對(duì) IE6/7 同時(shí)應(yīng)用 zoom:1 或者直接就寫(xiě)成:
.clearfix:after {visibility: hidden;display: block;font-size: 0;content: " ";clear: both;height: 0;}
.clearfix{*zoom:1;}
以我目前的淺薄認(rèn)知來(lái)講,以上寫(xiě)法應(yīng)該也可以直接達(dá)到同樣效果。關(guān)于這個(gè)地方,在文章的評(píng)論里也有些討論,我希望再聽(tīng)聽(tīng)大家的高見(jiàn)。
我平時(shí)都是用 overflow:hidden 來(lái)清除浮動(dòng)的,因?yàn)閴蚝?jiǎn)單粗暴。但是 overflow 有時(shí)候也不太適用:
父級(jí)元素使用 overflow:hidden 時(shí),如果其子元素定位到部分或全部在父元素之外,父元素就會(huì)對(duì)超出其外的子元素部分進(jìn)行裁剪。
對(duì) css3 來(lái)說(shuō),也會(huì) overflow:hidden 也會(huì)對(duì)一些屬性產(chǎn)生影響。
例如 box-shadow, 當(dāng)父元素使用 overflow:hidden 屬性時(shí),box-shadow 會(huì)被裁剪。
對(duì)于那些不愿意再給標(biāo)簽添加額外的 clearfix 類(lèi)來(lái)清除浮動(dòng)的人來(lái)說(shuō),直接將需要清除浮動(dòng)的元素添加進(jìn)清除浮動(dòng)代碼塊這個(gè)組也是一個(gè)辦法。
.group:after,
#content:after,
#sidebar:after,
#some .other .thing:after
{
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
zoom:1;
}
這種情況下,html 和 css 文件就像一個(gè)蹺蹺板的兩頭。html 代碼倒是整潔了,css 代碼卻出現(xiàn)了一定的繁冗。而且一旦專(zhuān)題頁(yè)面過(guò)長(zhǎng),或者在項(xiàng)目中使用,用這個(gè)清除組的方式反而會(huì)不勝其擾。
歸結(jié)下來(lái),還是得看個(gè)人、項(xiàng)目的權(quán)衡選擇.雖然我一直用簡(jiǎn)單粗暴的overflow:hidden,但是現(xiàn)在更傾向于使用 clearfix,感覺(jué)這種一體化的東西更靠譜,能避免偶爾對(duì) zoom 的遺忘。
但這樣增加了頁(yè)面的結(jié)構(gòu)的源代碼,造成代碼的擁腫,其實(shí)也可以有更好的辦法,
在浮動(dòng)元素的外包c(diǎn)learfix樣式
復(fù)制代碼
代碼如下:<div class="clearfix">
<div class="fl"></div>
<div class="fr"></div>
</div>
.clearfix:after{
visibility:hidden;
display:block;
font-size:0;
content:" ";
clear:both;
height:0;
}
.clearfix { display: inline-table; }
/* Hides from IE-mac \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* End hide from IE-mac */
說(shuō)明:
*對(duì)大多數(shù)符合標(biāo)準(zhǔn)的瀏覽器應(yīng)用第一個(gè)聲明塊,目的是創(chuàng)建一個(gè)隱形的
內(nèi)容為空的塊來(lái)為目標(biāo)元素清除浮動(dòng)。
*第二條為clearfix應(yīng)用 inline-table 顯示屬性,僅僅針對(duì)IE/Mac。
*利用 * / 對(duì) IE/Mac 隱藏一些規(guī)則:
* height:1% 用來(lái)觸發(fā) IE6 下的haslayout。
*重新對(duì) IE/Mac 外的IE應(yīng)用 block 顯示屬性。
*最后一行用于結(jié)束針對(duì) IE/Mac 的hack。
由于此方法針對(duì)的瀏覽器或成為歷史(尤其是Mac下的IE5 ),或正在靠近
標(biāo)準(zhǔn)的路上,這個(gè)方法就不再那么與時(shí)俱進(jìn)了。
拋掉對(duì) IE/Mac 的支持之后,新的清除浮動(dòng)方法:
復(fù)制代碼
代碼如下:.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}* html .clearfix { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */
說(shuō)明:
IE6 和 IE7 都不支持 :after 這個(gè)偽類(lèi),因此需要后面兩條來(lái)觸發(fā)IE6/7的haslayout,以清除浮動(dòng)。幸運(yùn)的是IE8支持 :after 偽類(lèi)。因此只需要針對(duì)IE6/7的hack了。
糖伴西紅柿說(shuō):
Jeff Starr 在這里針對(duì)IE6/7用了兩條語(yǔ)句來(lái)觸發(fā)haslayout。我在想作者為什么不直接用 * 來(lái)直接對(duì) IE6/7 同時(shí)應(yīng)用 zoom:1 或者直接就寫(xiě)成:
復(fù)制代碼
代碼如下:.clearfix:after {visibility: hidden;display: block;font-size: 0;content: " ";clear: both;height: 0;}
.clearfix{*zoom:1;}
以我目前的淺薄認(rèn)知來(lái)講,以上寫(xiě)法應(yīng)該也可以直接達(dá)到同樣效果。關(guān)于這個(gè)地方,在文章的評(píng)論里也有些討論,我希望再聽(tīng)聽(tīng)大家的高見(jiàn)。
我平時(shí)都是用 overflow:hidden 來(lái)清除浮動(dòng)的,因?yàn)閴蚝?jiǎn)單粗暴。但是 overflow 有時(shí)候也不太適用:
父級(jí)元素使用 overflow:hidden 時(shí),如果其子元素定位到部分或全部在父元素之外,父元素就會(huì)對(duì)超出其外的子元素部分進(jìn)行裁剪。
對(duì) css3 來(lái)說(shuō),也會(huì) overflow:hidden 也會(huì)對(duì)一些屬性產(chǎn)生影響。
例如 box-shadow, 當(dāng)父元素使用 overflow:hidden 屬性時(shí),box-shadow 會(huì)被裁剪。
對(duì)于那些不愿意再給標(biāo)簽添加額外的 clearfix 類(lèi)來(lái)清除浮動(dòng)的人來(lái)說(shuō),直接將需要清除浮動(dòng)的元素添加進(jìn)清除浮動(dòng)代碼塊這個(gè)組也是一個(gè)辦法。
復(fù)制代碼
代碼如下:.group:after,
#content:after,
#sidebar:after,
#some .other .thing:after
{
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
zoom:1;
}
這種情況下,html 和 css 文件就像一個(gè)蹺蹺板的兩頭。html 代碼倒是整潔了,css 代碼卻出現(xiàn)了一定的繁冗。而且一旦專(zhuān)題頁(yè)面過(guò)長(zhǎng),或者在項(xiàng)目中使用,用這個(gè)清除組的方式反而會(huì)不勝其擾。
歸結(jié)下來(lái),還是得看個(gè)人、項(xiàng)目的權(quán)衡選擇.雖然我一直用簡(jiǎn)單粗暴的overflow:hidden,但是現(xiàn)在更傾向于使用 clearfix,感覺(jué)這種一體化的東西更靠譜,能避免偶爾對(duì) zoom 的遺忘。
相關(guān)文章
- 這篇文章主要介紹了CSS中使用clearfix清除浮動(dòng)的方法,作者列出了幾個(gè)clearfix的不同的使用方法進(jìn)行對(duì)比,需要的朋友可以參考下2015-07-09
用clearfix:after消除css浮動(dòng)解決外部div不能撐開(kāi)問(wèn)題
如果有一個(gè)DIV作為外部容器,內(nèi)部的DIV如果設(shè)置了float樣式,則外部的容器DIV因?yàn)閮?nèi)部沒(méi)有clear,導(dǎo)致不能被撐開(kāi)。使用clearfix:after,可以解決這個(gè)問(wèn)題2014-06-16css中clearfix清除浮動(dòng)的用法及其原理示例介紹
大家對(duì)css中clearfix并不陌生吧,它的作用就是清除浮動(dòng),下面對(duì)clearfix的定義及實(shí)現(xiàn)原理簡(jiǎn)要的為大家做個(gè)介紹,另外還有個(gè)不錯(cuò)的示例,喜歡的朋友不要錯(cuò)過(guò)2013-11-05css清除浮動(dòng)clearfix:after的用法詳解(附完整代碼)
如果外部有一個(gè)div容器,其內(nèi)部div容器設(shè)置了float樣式,則外部的容器div因?yàn)閮?nèi)部沒(méi)有clear,導(dǎo)致不能撐開(kāi)2023-05-12CSS清除浮動(dòng) clearfix:after 使用技巧及兼容Firefox等符合W3C標(biāo)準(zhǔn)的瀏
在寫(xiě)HTML代碼的時(shí)候,發(fā)現(xiàn)在Firefox等符合W3C標(biāo)準(zhǔn)的瀏覽器中,如果有一個(gè)DIV作為外部容器,內(nèi)部的DIV如果設(shè)置了float樣式,則外部的容器DIV因?yàn)閮?nèi)部沒(méi)有clear,導(dǎo)致不能被2011-10-10淺談css清除浮動(dòng)(clearfix和clear)的用法
下面小編就為大家?guī)?lái)一篇淺談css清除浮動(dòng)(clearfix 和clear)的用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2023-05-12