尽管像<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。
缺点:似乎是一种黑客行为 - 这不是该overflow
物业的既定目的。