尽管像<div>
这样的元素通常会增长以适应它们的内容,但使用float
属性可能会给CSS新手带来惊人的问题:如果浮动元素具有非浮动父元素,则父元素将折叠。
例如:
<div><div style="float: left;">Div 1</div><div style="float: left;">Div 2</div></div>
此示例中的父div将不扩大包含其浮动子级-它似乎具有height: 0
。
我想在这里创建一个详尽的解决方案列表。如果您知道跨浏览器兼容性问题,请指出它们。
浮动父级。
<div style="float: left;"><div style="float: left;">Div 1</div><div style="float: left;">Div 2</div></div>
优点:语义代码。
缺点:您可能并不总是希望父元素浮动。即使您这样做了,您是否浮动父元素的父元素,依此类推?您必须浮动每个祖先元素吗?
给父级一个明确的高度。
<div style="height: 300px;"><div style="float: left;">Div 1</div><div style="float: left;">Div 2</div></div>
优点:语义代码。
缺点:不灵活-如果内容更改或浏览器调整大小,布局将中断。
在父元素中附加一个“间隔”元素,如下所示:
<div><div style="float: left;">Div 1</div><div style="float: left;">Div 2</div><div class="spacer" style="clear: both;"></div></div>
优点:直接编写代码。
缺点:不是语义的;间隔div仅作为布局黑客存在。
将父级设置为overflow: auto
。
<div style="overflow: auto;"><div style="float: left;">Div 1</div><div style="float: left;">Div 2</div></div>
优点:不需要额外的div。
缺点:看起来像是黑客攻击-这不是overflow
属性的既定目的。