给你http://jsfiddle.net/Dfy59/6/
解释:
by definition 一个 css n-th:child 选择器
匹配其父元素的第 n 个子元素,无论其类型如何。
让我们以您的代码为例(并首先删除 no_bg 节点):
.alternative_cls:nth-child(odd){
background:#ccc;
}
这样应用:
<div class="alternative_cls"> <!-- alternative_cls(n)=1, odd so apply = (grey) -->
ssf
</div>
<div class="alternative_cls"> <!-- alternative_cls(n)=2, even so don't apply = (transparent) -->
ssf
</div>
<div class="alternative_cls"> <!-- alternative_cls(n)=3, odd so apply = (grey)-->
ssf
</div>
<div class="alternative_cls"> <!-- alternative_cls(n)=4, even so don't apply = (transparent) -->
ssf
</div>
..
etc
当您在其间插入具有不同类的 div 时会发生混淆,发生这种情况时,css 仍会将入侵者 div 视为 .alternative_cls 的兄弟,但随后不会将 css 应用于它:
<div class="alternative_cls"> <!-- alternative_cls(n)=1, odd so apply = (grey) -->
ssf
</div>
<div class="no_bg"> <!--alternative_cls(n)=2, but don't apply alternative_cls, just apply no_bg = (pink) -->
ssf
</div>
<div class="alternative_cls"> <!-- n=3, odd so apply = (grey) NOTE: you'd expect the nth-child selector to skip the last node.. but it didn't, which caused the confusion -->
ssf
</div>
<div class="alternative_cls"> <!-- n=2, even so don't apply = (transparent) -->
ssf
</div>
<div class="alternative_cls"> <!-- n=3, odd so apply = (grey)-->
ssf
</div>
<div class="alternative_cls"> <!-- n=4, even so don't apply = (transparent) -->
ssf
</div>
我知道这一点的方法是查看我的 chrome 开发工具并使用 jquery 选择器:
$('.alternative_cls:nth-child(1)')
返回
[<div class="alternative_cls">
ssf
</div>]
但是(这是违反直觉的部分)
$('.alternative_cls:nth-child(2)')
返回
[]
您希望此选择器在 no_bg div 之后立即返回节点。但事实并非如此!
继续..
$('.alternative_cls:nth-child(3)')
返回
[<div class="alternative_cls">
ssf
</div>]
(我建议你自己试试这个概念)
所以要解决这个问题,您只需将 css 设置为
.alternative_cls{
width:100%;
height:60px
}
.alternative_cls:nth-child(1), .alternative_cls:nth-child(even){
background:#ccc;
}
.no_bg{
width:100%;
height:60px;
background:#f8d6d6
}
这会发生
<div class="alternative_cls"> <!-- n=1, apply the nth-child(1) rule = (grey) -->
ssf
</div>
<div class="no_bg"> <!--alternative_cls(n)=2, but don't apply alternative_cls, just apply no_bg = (pink) -->
ssf
</div>
<div class="alternative_cls"> <!-- n=3, odd, so don't apply any rule = (transparent)-->
ssf
</div>
<div class="alternative_cls"> <!-- n=2, even so apply the nth-child(even) rule = (grey) -->
ssf
</div>
<div class="alternative_cls"> <!-- n=3, odd, so don't apply any rule = (transparent)-->
ssf
</div>
<div class="alternative_cls"> <!-- n=4, even so apply the nth-child(even) rule = (grey) -->
ssf
</div>
我希望这可以说清楚.. 所以有了这些知识,你可以继续使用第 n 个子选择器,你只需要考虑这个特性