用clearfix:after消除css浮動(dòng)解決外部div不能撐開問題
發(fā)布時(shí)間:2014-06-16 08:57:25 作者:佚名
我要評論

如果有一個(gè)DIV作為外部容器,內(nèi)部的DIV如果設(shè)置了float樣式,則外部的容器DIV因?yàn)閮?nèi)部沒有clear,導(dǎo)致不能被撐開。使用clearfix:after,可以解決這個(gè)問題
在寫HTML代碼的時(shí)候,創(chuàng)造在Firefox等符合W3C標(biāo)準(zhǔn)的瀏覽器中,如果有一個(gè)DIV作為外部容器,內(nèi)部的DIV如果設(shè)置了float樣式,則外部的容器DIV因?yàn)閮?nèi)部沒有clear,導(dǎo)致不能被撐開??聪旅娴睦樱?
<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>
運(yùn)行這段代碼,大家可以看到,作為外部容器的邊框?yàn)榧t色的DIV,沒有被撐開。這是因?yàn)閮?nèi)部的DIV因?yàn)閒loat:left之后,就喪失了clear:both和display:block的樣式,所以外部的DIV不會(huì)被撐開。
我們想讓外部容器的DIV隨著內(nèi)部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內(nèi)要顯示出來的float:left的所有的DIV之后,我們添加了這樣的一個(gè)DIV:<div style="clear:both"></div>。這樣,其實(shí)就在最后增加了clear的動(dòng)作。
但是,我總感覺,這么多加一個(gè)DIV有點(diǎn)不妥。一是多了一個(gè)沒有意義的DIV,二是在用dojo做Drag & Drop的時(shí)候,由于這個(gè)DIV是容器DIV的一個(gè)字節(jié)點(diǎn),如果這個(gè)節(jié)點(diǎn)被移動(dòng),則會(huì)造成排版上的Bug:如果要顯示的藍(lán)框的DIV被移到這個(gè)DIV之后,則因?yàn)閏lear:both,它會(huì)被強(qiáng)制 換一行顯示。所以,我一直在尋找更好的解決措施。
解決的措施:
首先設(shè)置這樣的CSS:
CSS代碼:
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
然后,我們再修正原本的HTML代碼,讓外部的容器DIV來應(yīng)用這個(gè)CSS:
HTML4STRICT代碼:
<style>
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* html .clearfix {height: 1%;}
在Firefox里測試一下,哈哈,這樣做的確很有效,顯示正常,而且dojo的 Drag & Drop 也不會(huì)有問題了。原本,這個(gè)clearfix的CSS應(yīng)用了after這個(gè)偽對象,它將在利用 clearfix的元素的結(jié)尾添加content中的內(nèi)容。在這里添加了一個(gè)句號".",并且把它的display設(shè)置成block;高度設(shè)為 0;clear設(shè)為both;visibility設(shè)為潛藏 。這樣就達(dá)到 了撐開容器的目標(biāo)啦。
但是,Windows IE并不支撐這樣做。所以要讓IE也完善顯示,則必須在clearfix這個(gè)CSS定義的后面加上一些專門為IE設(shè)定的HACK。CSS如下:
CSS代碼:
代碼:
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* html .clearfix {height: 1%;}
因?yàn)檗D(zhuǎn)義字符"\",Mac IE涉獵器會(huì)漠視 掉這段Hack,但Windows IE不會(huì),它會(huì)利用 * html .clearfix {height: 1%;} 來達(dá)到 撐開DIV容器的目標(biāo)(貌似Mac IE沒有措施解決這個(gè)問題,不過幸好用戶數(shù)量是在是太少了,Safari支撐就可以了:p)。
復(fù)制代碼
代碼如下:<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>
運(yùn)行這段代碼,大家可以看到,作為外部容器的邊框?yàn)榧t色的DIV,沒有被撐開。這是因?yàn)閮?nèi)部的DIV因?yàn)閒loat:left之后,就喪失了clear:both和display:block的樣式,所以外部的DIV不會(huì)被撐開。
我們想讓外部容器的DIV隨著內(nèi)部DIV增多而增加高度,要怎么解決呢?
以前我都是用這樣的法子 來解決:
復(fù)制代碼
代碼如下:<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內(nèi)要顯示出來的float:left的所有的DIV之后,我們添加了這樣的一個(gè)DIV:<div style="clear:both"></div>。這樣,其實(shí)就在最后增加了clear的動(dòng)作。
但是,我總感覺,這么多加一個(gè)DIV有點(diǎn)不妥。一是多了一個(gè)沒有意義的DIV,二是在用dojo做Drag & Drop的時(shí)候,由于這個(gè)DIV是容器DIV的一個(gè)字節(jié)點(diǎn),如果這個(gè)節(jié)點(diǎn)被移動(dòng),則會(huì)造成排版上的Bug:如果要顯示的藍(lán)框的DIV被移到這個(gè)DIV之后,則因?yàn)閏lear:both,它會(huì)被強(qiáng)制 換一行顯示。所以,我一直在尋找更好的解決措施。
解決的措施:
首先設(shè)置這樣的CSS:
CSS代碼:
復(fù)制代碼
代碼如下:.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
然后,我們再修正原本的HTML代碼,讓外部的容器DIV來應(yīng)用這個(gè)CSS:
HTML4STRICT代碼:
復(fù)制代碼
代碼如下:<style>
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* html .clearfix {height: 1%;}
在Firefox里測試一下,哈哈,這樣做的確很有效,顯示正常,而且dojo的 Drag & Drop 也不會(huì)有問題了。原本,這個(gè)clearfix的CSS應(yīng)用了after這個(gè)偽對象,它將在利用 clearfix的元素的結(jié)尾添加content中的內(nèi)容。在這里添加了一個(gè)句號".",并且把它的display設(shè)置成block;高度設(shè)為 0;clear設(shè)為both;visibility設(shè)為潛藏 。這樣就達(dá)到 了撐開容器的目標(biāo)啦。
但是,Windows IE并不支撐這樣做。所以要讓IE也完善顯示,則必須在clearfix這個(gè)CSS定義的后面加上一些專門為IE設(shè)定的HACK。CSS如下:
CSS代碼:
代碼:
復(fù)制代碼
代碼如下:.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* html .clearfix {height: 1%;}
因?yàn)檗D(zhuǎn)義字符"\",Mac IE涉獵器會(huì)漠視 掉這段Hack,但Windows IE不會(huì),它會(huì)利用 * html .clearfix {height: 1%;} 來達(dá)到 撐開DIV容器的目標(biāo)(貌似Mac IE沒有措施解決這個(gè)問題,不過幸好用戶數(shù)量是在是太少了,Safari支撐就可以了:p)。
相關(guān)文章
- 下面小編就為大家?guī)硪黄猚ss之clearfix的用法深入理解(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦2023-05-12
淺談css清除浮動(dòng)(clearfix和clear)的用法
下面小編就為大家?guī)硪黄獪\談css清除浮動(dòng)(clearfix 和clear)的用法,小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧2023-05-12- 這篇文章主要介紹了CSS中使用clearfix清除浮動(dòng)的方法,作者列出了幾個(gè)clearfix的不同的使用方法進(jìn)行對比,需要的朋友可以參考下2015-07-09
css中clearfix清除浮動(dòng)的用法及其原理示例介紹
大家對css中clearfix并不陌生吧,它的作用就是清除浮動(dòng),下面對clearfix的定義及實(shí)現(xiàn)原理簡要的為大家做個(gè)介紹,另外還有個(gè)不錯(cuò)的示例,喜歡的朋友不要錯(cuò)過2013-11-05css清除浮動(dòng)clearfix:after的用法詳解(附完整代碼)
如果外部有一個(gè)div容器,其內(nèi)部div容器設(shè)置了float樣式,則外部的容器div因?yàn)閮?nèi)部沒有clear,導(dǎo)致不能撐開2023-05-12clear 萬能清除浮動(dòng)(clearfix:after)
有時(shí)候我們需要清楚浮動(dòng)的一些操作,這里介紹的是clearfix:after的實(shí)例代碼,需要的朋友可以參考下2023-05-12clearfix:after清除浮動(dòng)的用法及測試代碼
本文主要講解下css中的清除浮動(dòng)的使用,在網(wǎng)頁布局中此屬性的作用不可小視,它的存在對你的布局好壞有所影響,感興趣的朋友可以參考下哈2013-04-26overflow:hidden line-height clearfix:after使用方法介紹
overflow:hidden的作用是隱藏溢出,line-height指的是在DIV中的元素上下居中接下來詳細(xì)介紹它們的用法,感興趣的朋友可以了解下哦2013-01-08什么是clearfix (一文搞清楚css清除浮動(dòng)clearfix)
clearfix 是一種 CSS 技巧,可以在不添加新的 html 標(biāo)簽的前提下,解決讓父元素包含浮動(dòng)的子元素的問題。這個(gè)技巧的版本是很多的,最流行的一個(gè)是 Micro Clearfix Hack2023-05-12