【发布时间】:2013-06-11 03:59:39
【问题描述】:
这个 (http://jsfiddle.net/77RRA/1/) 有效,而这个 (http://jsfiddle.net/77RRA/) 无效。
clearfix 不应该替换<div style="clear: both;"></div> 行吗?
【问题讨论】:
这个 (http://jsfiddle.net/77RRA/1/) 有效,而这个 (http://jsfiddle.net/77RRA/) 无效。
clearfix 不应该替换<div style="clear: both;"></div> 行吗?
【问题讨论】:
clearfix 不应该替换行
<div style="clear: both;"></div>
是的。 clearfix 用于避免非语义的空标签。但是,要使其正常工作,您需要将其放置在父元素上。 (Example)
但是,在您的情况下,它并没有解决兄弟姐妹将忽略浮动元素的问题。这不是 clearfix 的意图,您只需在您的#child 兄弟上添加clear:right(或both)即可恢复正常的文档流。
【讨论】:
clear:both; - 但是这仍然不能解决问题,浮动元素会从正常的文档流中取出!看看你修改过的例子:jsfiddle.net/owtqncfb/9
在您的情况下,您正在尝试从自身清除浮动元素(使用属于自身的伪元素)。
Clear 应该在浮动元素之后的元素上。
其他一些规则也可以实现这一点。
#main {
background: lightgreen;
width: 100px;
height: 200px;
}
#one {
float: right;
display: block;
}
#child {
background: red;
width: 100%;
height: 20px;
display:inline-block
}
display:inline-block; 将从浮动元素的任何一侧清除此元素。
【讨论】:
display:inline-block; 是可能的,但使用它并不可行,因为有时您需要另一种显示类型,毕竟这就是clear 的用途。
“clearfix 不应该替换<div style="clear: both;"></div>? 行”
假设您有一个容器,里面装着几件物品。如果所有这些项目都是浮动的,则容器实际上会丢失其高度信息。所以边距底部和背景样式显示错误。 clearfix 通过在容器元素前后添加伪元素 + 设置 display: table; 将其拉伸回其全高来解决此问题。
在您的情况下,您必须在 #child 上添加 clear: both;
【讨论】: