例如:
<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属性的官方目的。
overflow属性,您可能会对我在以下问题的回答感兴趣:为什么overflow: hidden会出现意外的副作用,导致高度增加以包含浮动元素? - BoltClockoverflow: auto。这是唯一对我有效的选项。 - Chris Redford