总结下CSS布局中浮动元素的闭合方法
我想只要是跟DIV+CSS打交道的朋友,肯定都碰到过闭合浮动元素的问题,或者叫做清除浮动元素。因为按照CSS的规范,浮动的元素(float)会被移出文档流,当它的高度超出其父容器的高度时,父容器不会自动伸长以闭合浮动元素。这就是我们所碰到的闭合浮动元素的问题。
解决此问题的方法有很多,下面一一分析一下。
一、额外标签法。
这是最常见是一种方法,也是W3C推荐使用的一种方法。此方法的做法就是在内容的末尾加上一个空标签,常用的做法是:
.clearfloat {clear:both;}
然后在内容的末尾加上
<br class="clearfloat" />
或者
<div class="clearfloat"></div>
当然你也可以使用其它的块级元素,但是用<br>的话,在IE中能清除浮动但不能闭合元素。额外标签法的标准写法应该是这样的:
.clearfloat {
clear:both;
height:0;
font-size: 1px;
line-height: 0px;
}
这样基本上就能适应所有的状况了。
此方法最为通用,但是由于增加了一个空标签,某些有“洁僻”的朋友会觉得HTML代码显得不够简洁。
二、使用after伪类
使用after伪类的做法就是在指定的现在内容末尾添加新的内容,通常是加一个小“.”,并把它隐藏,可以通过它来闭合浮动元素。但是,Win/IE6并不支持after伪类,所以还不得不单独针对Win/IE6进行hack处理。
.clearfloat {
display:inline-block;
}
/* Hack Begine \*/ 这里出现的反斜杠(\)是为了区分Win/IE跟Mac/IE,只针对Win/IE进行hack
* html .clearfloat {
height:1%;
}
.clearfloat {
display:block;
}
/* End Hack */
把此类加在浮动元素的父容器上就可以清除浮动。但本民工不喜欢用这种方法,因为我觉得用hack方法太烦琐不好掌握,而且又远离标准。
三、设置父容器的overflow
把父容器的overflow属性设为hidden或auto同样也能清除浮动,但是单单设置overflow属性在IE6中会不起作用,需要触发一下layout,一般可以指定一个维度,或者是用zoom:1;。
#clearfloat {
overflow:auto;
height:1%;
}
此方法用起来也很方便的,但是overflow有可能会影响到浏览器的表现,所以用此方法时多调试一下。另外,此方法能在浏览器表现正常,但是在Dreamweaver中浮动元素还是会乱。
四、浮动外部元素,float-in-float
给浮动元素的父容器也加上浮动属性,浮动元素能闭合浮动元素。此方法很方便,效果也好,但缺点也很明显,父容器并不是想浮动就浮动,相邻元素有可能会发生变化,再嵌套一层DIV的话又会觉得有些烦琐,所以此方法有可能会给布局增加难度。
总结
想要兼容浏览器闭合浮动元素的方法还是很多的,具体情况具体分析,在这里说的也未必详尽,如果哪位朋友有更好的方法或不同的意见,欢迎讨论与分享!