我有这段代码:
<div class="post"></div>
<div class="post"></div>
<div class="post"></div>
<div class="post"></div>
<div class="post"></div>
<div class="post"></div>
和css:
.post {position:relative;float:left;margin-right:10px;}
我需要每个3 div.post,第三个有margin-right:0px;
答案 0 :(得分:6)
.post:nth-child(4n)
{
margin-right:0px;
}
答案 1 :(得分:2)
对于现代浏览器,纯CSS nth-child
选择器就足够了:
.post:nth-child(3n) { /* not zero-based */
margin-right: 0px;
}
http://jsfiddle.net/mblase75/EQacc/
如果在第一个div.post
之前还有其他同级元素,则您需要使用nth-of-type
代替:
.post:nth-of-type(3n) {
margin-right:0px;
}
http://jsfiddle.net/mblase75/4vnjt/
对于旧版浏览器(包括IE8及之前版本),需要使用一些JavaScript。我会使用jQuery为每三个项添加一个类,并将该类添加到我的CSS:
.post.thirdchild, .post:nth-child(3n) {
margin-right: 0px;
}
jQuery的:
$('.post:nth-of-type(3n)').addClass('thirdchild');
http://jsfiddle.net/mblase75/Tf9ky/
为什么包括两者?好吧,有些用户可能关闭了JavaScript。
事实上,如果您担心IE&lt; 8,理想的解决方案可能是将0px设为默认保证金,这样帖子就不会溢出他们的容器:
.post {
position: relative;
float: left;
margin-right: 0px;
}
.post.notthirdchild,
.post:nth-child(3n+1),
.post:nth-child(3n+2) {
margin-right: 10px;
}
JS:
$('.post:nth-child(3n+1),.post:nth-child(3n+2').addClass('notthirdchild');
答案 2 :(得分:1)
var i = 0;
$('.post').each(function(){
i++;
if(i%3==0){
$(this).css('margin-right', '0');
}
});
答案 3 :(得分:1)
$(".post:nth-of-type(3n)").css("margin-right", "0");
答案 4 :(得分:1)
以下是使用jQuery&#39; filter()
的方法以及每个项目索引的模数。
索引是从0开始的,因此我在每个索引中添加一个。
$('.post').filter(function (index) {
return ((index + 1) % 3 == 0 ? 1 : 0)
}).css('margin-right', '0px');
对于纯CSS解决方案,请参阅此页面上的nth child
解决方案。
失败:
如果要动态生成div,可以只为每三个项添加一个类。如果它们不是动态的,您仍然可以将类硬编码为每三个项目。
这样的事情:
<div class="post"></div>
<div class="post"></div>
<div class="post no-margin"></div>
<div class="post"></div>
<div class="post"></div>
<div class="post no-margin"></div>
div.post.no-margin {
margin-right:0px;
}