什么是处理一系列需要在同一行上的块级元素的最常见方法(例如,如果需要使用JavaScript修改它们的宽度)?将float:left应用于每个元素与使用定位来放置它们相比,有什么优缺点?
如果您不太关心旧版浏览器(我指的是IE6),那么这里最好的方法就是采用
display:inline-block;
基本上,它创建一个盒子模型元素,而不清除其前后内容,因此它仍然在该行中。每个现代浏览器都能很好地解释它。
<div id="con">
<div class="float"></div>
<div class="float"></div>
</div>
#con { background:#f0f; }
.float { float:left; width:100px; height:100px; background:#0ff; }
如果您运行此代码,您会注意到容器 div(品红色的)只有一个像素高,而浮动 div 是正确的 - 这就是 Sebastian 提到的问题。现在,您可以采纳他的建议并添加 br 或浮动容器,但这不太语义化 - 所以这里有一个稍微更优雅的解决方案。只需将 overflow:hidden; 添加到容器 div 中,如下所示:
#con { background:#f0f; overflow:hidden; }
除非父容器也被分配了浮动标签或底部有一个带有clear:both;的br,否则它们不会随着它们一起拉伸。
我会选择float:left而不是定位。当一个对象拉伸时,浏览器会自动对齐所有内容。因此,您需要关心的内容更少。
我认为不应该显式定位元素,而是使用display:inline指令浏览器使用内联布局来处理元素的定位。
关于float和定位,我认为唯一使用定位对齐它们的方法是使用绝对定位,这意味着您需要处理重新调整(浏览器视口)以保持元素在原位。
我认为通过使用float属性,浏览器会为您处理重新调整大小的问题,并在正确的位置重新渲染元素。
在这种情况下,使用浮点数的唯一缺点是你只能左对齐或右对齐它们,无法居中。但是,你提到你正在使用绝对值来设置宽度,因此你可以将所有浮动元素嵌套在一个DIV元素中,并向父DIV添加margin-right或margin-left来模拟居中对齐。