CSS:闭合元素和浮动元素的差别:闭合元素和浮动元素的差别
提示:本文不是教程,而是对闭合浮动元素的方法在某个特定情况下的现象的讨论,涉及float、clear、
overflow、:after等知识,新手勿入。 float属性在页面排版上非常有用,但是也带来很多问题。最常见的就是浮
动元素的闭合问题。 如果一个没有设定高度的不浮动元素的子元
提示:本文不是教程,而是对闭合浮动元素的方法在某个特定情况下的现象的讨论,涉及float、clear、overflow、:after等知
识,新手勿入。
float属性在页面排版上非常有用,但是也带来很多问题。最常见的就是浮动元素的闭合问题。
如果一个没有设定高度的不浮动元素的子元素浮动,则该元素的高度不会包括浮动子元素的高度,而只会包含其内部不浮动元
素的高度,因为浮动元素不属于常规流向,它脱离了文档流。因此如果要元素能够自动包含浮动子元素,则需要闭合浮动元
素。
目前比较常用的有3种方法:
利用浮动子元素后的元素清除浮动(包括添加1个空的元素以清除浮动)。 使用:after伪元素,在元素最后插入清除。 为元素
设定overflow属性除“visible”之外的值。
还有1个方法可以使元素自适应高度:
浮动元素,浮动的元素会包含浮动的后代元素。
下列代码,其显示如图1所示。
提示:所列代码只是关键代码,完整代码请查看示例页面。
CSS:
p,
div{
margin:5px;
}
.wrap{
width:440px;
margin:10px;
clear:both;
}
.div1,
.div2p{
float:left;
width:80px;
margin:8px;
display:inline;
}
XHTML:
<divclass="wrap">
<divclass="div1">div1,浮动</div>
<divclass="div2">
<pclass="div2p">div2内p1</p>
<pclass="div2p">div2内p2</p>
<pclass="div2p3">div2内p3,不浮动</p>
</div>
<divclass="div3">div3,不浮动</div>
</div>
提示:截图是Firefox2.0(以下简称FF)中的效果,如无特殊声明,则表示在WindowsIE7.0(以下简称IE)、Opera9.2(以
下简称Op)、Safari3.0(以下简称Sa)中效果相同。
图1:浮动元素与子元素浮动的元素
如果对.div2p增加CSS:
.div2p{
......
clear:left;
}
由于“clear:left”含义为:不允许本元素左边有浮动框,而div1也是浮动元素,因此,p1和p2下移到了div1的下面,如图2所示。
图2:不浮动的元素内的浮动子元素设定“clear:left”后的效果