根据 CSS2.1 规范中的描述,浮动元素将尽可能的向左或向右浮动,直到该元素的外边界碰到其包含块的边界或另一个浮动元素的外边界。
换句话说,在同一包含块内的多个浮动元素是不会互相覆盖的,并且前边的浮动元素可能会“阻挡”其后的浮动元素。除非前边的浮动元素是不可见的。
关于浮动元素的详细资料,请参考 CSS2.1 规范 9.5 中的内容。
关于包含块的详细资料,请参考 CSS2.1 规范 10.1 中的内容。
在 IE6 IE7 IE8(Q) 中,一个零高度的浮动元素仍能阻挡与其向相同方向浮动的兄弟元素。
这个问题将导致一些浮动元素在各浏览器中的位置不一致,在有些浏览器中可能发生布局混乱的现象。
IE6 IE7 IE8(Q) |
---|
分析以下代码:
<div id="Container" style="width:260px; height:30px;
background:lightgrey;"> <div id="Zero_Height"
style="float:left; width:100px; background:black;"><div></div></div> <div id="Floating"
style="float:left; width:100px; height:30px; background:darkgray;"></div>
</div>
根据 CSS2.1 规范中的描述可知,当一个浮动元素的高度为零(即不可见)时,该元素将不能阻挡其他的浮动元素,因为它的外边界也是不可见的。
这段代码在不同的浏览器环境中表现如下:
将 Zero_Height 和 Floating 的 'float' 特性值由 'left' 修改为 'right' 后:
可见,在 IE6 IE7 IE8(Q) 中,Zero_Height 总是能阻挡与其向相同方向浮动的
Floating,这与规范中的描述不符。
在 IE8(S) Firefox Safari Chrome Opera 中,则按照规范进行了正确的处理:Floating 没有被
Zero_Height 阻挡。
这个差异是由 IE6 IE7 IE8(Q) 中处理浮动元素之间的关系的 Bug 造成的,它在 IE8(S) 中被修复。
如果一个页面在 IE6 IE7 IE8(Q) 中被设计,并且触发了该 Bug,那么这个页面在其他浏览器中的布局将与预期的不符。
如果希望一个浮动元素能阻挡与其向相同方向浮动的兄弟元素,请确保其高度不为零;否则,请隐藏该元素,以使页面布局在各浏览器中的表现一致。
操作系统版本: | Windows 7 Ultimate build 7600 |
---|---|
浏览器版本: |
IE6
IE7 IE8 Firefox 3.6 Chrome 4.0.302.3 dev Safari 4.0.4 Opera 10.51 |
测试页面: | zero_height_floating_element.html |
本文更新时间: | 2010-06-21 |
float 浮动 不可见 零高度 阻挡