【发布时间】:2010-09-18 03:21:24
【问题描述】:
虽然像<div>s 这样的元素通常会增长以适应其内容,但使用float 属性可能会给CSS 新手带来一个令人吃惊的问题:如果浮动元素有非浮动的父元素,则父元素会折叠。
例如:
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
此示例中的父 div 将不会扩展以包含其浮动的子级 - 它似乎具有 height: 0。
你如何解决这个问题?
我想在这里创建一个详尽的解决方案列表。如果您知道跨浏览器兼容性问题,请指出。
解决方案 1
浮动父级。
<div style="float: left;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
优点:语义代码。
缺点:您可能并不总是希望父级浮动。即使你这样做了,你会浮动父母的父母,等等吗?你必须浮动每个祖先元素吗?
解决方案 2
给父母一个明确的高度。
<div style="height: 300px;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
优点:语义代码。
缺点:不灵活 - 如果内容更改或浏览器调整大小,布局将会中断。
解决方案 3
在父元素中添加一个“spacer”元素,如下所示:
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
<div class="spacer" style="clear: both;"></div>
</div>
优点:代码简单。
缺点:没有语义;间隔 div 仅作为布局技巧存在。
解决方案 4
将父级设置为overflow: auto。
<div style="overflow: auto;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
优点:不需要额外的 div。
缺点:看起来像个 hack - 这不是 overflow 属性的既定用途。
评论?其他建议?
【问题讨论】:
-
我不知道溢出:自动技巧 - 我一直使用清除 div 方法。感谢您的提示。
-
提示:解决方案 4 似乎适用于 Firefox 3+,但不适用于 IE7。为此,您需要解决方案 3
-
在这里看到stackoverflow.com/questions/11830433/…
overflow:auto似乎有一些问题,它在不应该有的地方添加了滚动条,所以改用overflow:hidden -
关于
overflow属性,您可能对我对以下问题的回答感兴趣:Why does overflow: hidden have the unexpected side-effect of growing in height to contain floated elements? -
+1 表示
overflow: auto。这是唯一对我有用的。
标签: html css layout css-float clearfix