我有这个基本场景设置,我试图在包装内浮动div。它工作得很好,但是我想要实现的简单效果是当div具有可变高度时不合作。我已经研究了这一组试图将一个clearfix应用于第三张卡而没有成功。我唯一获得的成功实际上是在第三张牌之后注入了另一个div而且风格清晰。然而,这不是我想采取的方法,因为我不想改变任何干净的标记。关于完成这项工作的最佳方法的想法?如果有必要,我不介意使用简单的JS / jQuery。
所需:
答案 0 :(得分:2)
也许我不理解这个问题,但你不能简单地在第四张卡片上添加“clear:both”吗?
答案 1 :(得分:2)
解决方案1:
使用clear: both
将3n+1
添加到.card:nth-child(3n+1) { clear: both }
元素,或在需要时手动添加类。
解决方案2:
而不是float: left
上的.card
,请使用display: inline-block; vertical-align: top
。您还需要将margin-right
缩减为16px
。
如果您需要支持IE7,则display: inline-block
必须为display:inline-block; *display:inline; zoom:1
。
答案 2 :(得分:1)
您必须以某种方式定义“行”。你可以设置每个div的相同高度(从而设置行高),或者你可以放置一个空高度分隔符,或者你可以从第一个div开始为每个第3个div设置clear:left
。
答案 3 :(得分:1)
解决方案1
如果你真的不喜欢触摸你的标记,你可以使用一些jQuery(感谢thirtydot提示):
<强> Jquery的强>
$('.card:nth-child(3n+1)').css('clear','left');
<小时/> 解决方案2
稍微改变一下HTML可能更干净(也更向后兼容)。 也许将每行包装在自己的包装器中,并应用了clearfix。
jsfiddle:http://jsfiddle.net/leifparker/sh4fR/
您需要添加'clearfix'CSS代码。看小提琴。
<强> HTML 强>
<div id="wrap">
<div class="cards clearfix">
<div class="card">
1 text text text text text text text text text text text text text text text text
text text text text text text text text text text
</div>
<div class="card">
2 text text text text text text text text text text text text text text text text
text text text text text text text text text text
</div>
<div class="card">
3 text text text text text text text text text text text text text text text text
</div>
</div>
<div class="cards clearfix">
<div class="card">
4 text text text text text text text text text text text text text text text text
text text text text text text text text text text
</div>
<div class="card">
5 text text text text text text text text text text text text text text text text
</div>
<div class="card">
6 text text text text text text text text text text text text text text text text
</div>
</div>
答案 4 :(得分:1)
clear:both
选择器设置的 nth-child
就是你想要的。
您可以使用带有jQuery的nth-child
选择器动态添加一个类,用于本机不支持它的旧浏览器:http://api.jquery.com/nth-child-selector/
答案 5 :(得分:1)
将:nth-child
选择器与clear:both
结合使用。以下将清除每第三张牌。由于您使用的是固定宽度(910px),因此可以正常工作。
.card:nth-child(3n+1) {
clear: both;
}
只需将规则添加到现有CSS即可。在Firefox,Chrome和IE中测试:jsfiddle