如何防止浮动图元的父级崩溃?[副本]

这个问题在这里已经有答案了
我可以使用什么“clearfix”方法?

(29个答案)

六年前关闭的

尽管像<部门&gt通常会增长以适应其内容,使用float属性可能会给CSS新手带来一个惊人的问题:如果浮动元素具有非浮动父元素,则父元素将崩溃。

例如:

<部门>
<div style=“float:left;”>第1分部&lt/部门>
<div style=“float:left;”>第2分部&lt/部门>
&lt/部门&gt

本例中的父div将不展开以包含其浮动的子级-它将显示为高度为0

你如何解决这个问题

我想在这里创建一个详尽的解决方案列表。如果您知道跨浏览器兼容性问题,请指出。

解决方案1

浮动父对象

<div style=“float:left;”>
<div style=“float:left;”>第1分部&lt/部门>
<div style=“float:left;”>第2分部&lt/部门>
&lt/部门&gt

优点:语义代码。
缺点:您可能并不总是希望父项浮动。即使你这样做了,你会让父母的父母浮动吗,等等?必须浮动每个祖先元素吗

解决方案2

给父对象一个明确的高度

<div style=“高度:300px;”大于;
<div style=“float:left;”>第1分部&lt/部门>
<div style=“float:left;”>第2分部&lt/部门>
&lt/部门&gt

优点:语义代码。
缺点:不灵活-如果内容更改或浏览器大小调整,布局将中断

解决方案3

加上一个“;垫片;父元素中的元素,如下所示:

<部门>
<div style=“float:left;”>第1分部&lt/部门>
<div style=“float:left;”>第2分部&lt/部门>
<div class=“spacer”style=“clear:both;”和&lt/部门>
&lt/部门&gt

优点:易于编码。
缺点:非语义;间隔器div仅作为布局hack存在

解决方案4

将父项设置为溢出:自动

<div style=“溢出:自动”>
<div style=“float:left;”>第1分部&lt/部门>
<div style=“float:left;”>第2分部&lt/部门>
&lt/部门&gt

Pros:不需要额外的div.
Cons:看起来像是黑客攻击-这不是溢出属性声明的目的

评论?其他建议

解决方案1:

最可靠、最不引人注目的方法似乎是:

演示:http://jsfiddle.net/SO_AMK/wXaEH/

HTML

<div class=“clearfix”>
<div style=“float:left;”>第1分部&lt/部门>
<div style=“float:left;”>第2分部&lt/部门>
&lt/部门>​

CSS

.clearfix::after{
内容:“;
显示:块;
身高:0;
明确:两者皆有;
}

​有了一点CSS目标,您甚至不需要向父级DIV添加类

此解决方案与IE8向后兼容,因此您无需担心较旧的浏览器出现故障

解决方案2:

已建议对解决方案1进行调整,如下所示:

演示:http://jsfiddle.net/wXaEH/162/

HTML

<div class=“clearfix”>
<div style=“float:left;”>第1分部&lt/部门>
<div style=“float:left;”>第2分部&lt/部门>
&lt/部门>​

CSS

.clearfix::after{
内容:“;
显示:块;
身高:0;
明确:两者皆有;
*zoom:expression(this.runtimeStyle['zoom']='1',this.innerHTML+='<div class=“ie7 clear”></div>);
}
.ie7清除{
显示:块;
明确:两者皆有;
}

此解决方案似乎与IE5.5向后兼容,但未经测试

解决方案3:

还可以设置显示:内联块和宽度:100%以在不折叠的情况下模拟普通块元素

演示:http://jsfiddle.net/SO_AMK/ae5ey/

CSS

.clearfix{
显示:内联块;
宽度:100%;
}

此解决方案应与IE5.5向后兼容,但仅在IE6中进行了测试

发表评论