10 09/2014

nth-child 和 nth-of-type 区别

最后更新: Wed Sep 10 2014 12:29:11 GMT+0800

网上转摘的似乎都是同一篇文章,难道就是简体中文世界对技术的态度 - “能用就好,何必太认真”。俺老人家较真如下:

p:nth-child(2n+1) 匹配(p的父节点的)奇数个 p标签

p:nth-of-child(2n+1) 匹配(p的父节点的)p标签的 第奇数个

nth-child 先配置序号,nth-of-type 先匹配标签。观察这段 html 代码

<div class="nthExample">
<div>div 块</div>
<div>div 块</div>
<div>div 块</div>
<p>p 段落</p>
<p>p 段落</p>
<div>div 块</div>
<div>div 块</div>
<p>p 段落</p>
<div>div 块</div>
<p>p 段落</p>
<p>p 段落</p>
<p>p 段落</p>
</div>

先用 nth-child(2n+1)

#nthExample-1 p:nth-child(2n+1) {background:#900;color:#fff;}

效果如下:


div 块

div 块

div 块

p 段落


p 段落


div 块

div 块

p 段落


div 块

p 段落


p 段落


p 段落


意思是:#nthExample-1 下 所有奇数节点,并且是 p 标签的 先选出奇数节点,然后再看是不是 p


而如果 nth-child(2n+1)

#nthExample-2 p:nth-of-type(2n+1) {background:#396;color:#fff;}

效果如下:


div 块

div 块

div 块

p 段落


p 段落


div 块

div 块

p 段落


div 块

p 段落


p 段落


p 段落


意思是:#nthExample-2 下所有 p 标签的 奇数的 那些 先选出p,然后找到 第奇数个的

小练习!

html 代码

<dl>
    <dt>名词</dt>
    <dd>解释</dd>
    <dt>名词</dt>
    <dd>解释</dd>
    <dt>名词</dt>
    <dd>解释</dd>
</dl>

我们想选择第三条解释 (dd),怎么写呢?

如果:dl :nth-child(3) {background:#006;}

你将得到


名词

解释

名词

解释

名词

解释

选择 dl 下的第三个元素(而不是第三个dd)

如果:dd:nth-child(3) {background:#069;}

你将得到


名词

解释

名词

解释

名词

解释

选择 dl 下的第三个元素,并且还是 dd 的(对不起,这两个条件放在一起,太苛刻了)

快请出 nth-of-type 大神吧

dd:nth-of-type(3) {background:green;}

名词

解释

名词

解释

名词

解释

没错,我要的就是第三个 dd

小技巧:nth-of-type(odd) 奇数个,even 偶数;nth-of-type(4n) 每4个;

nth-of-type 的小问题

nth-of-type 处理伪类的时候,有点问题!bug?

比如代码

<style>
div.wrapper .b:nth-of-type(2) {background:#c00;}
</style>

<div class="wrapper">
    <div>111</div>
    <div class="b">222</div>
    <div class="b">333</div>
    <div class="b">444</div>
</div>

效果如下:


111

222

333

444

不是我所要求的 第二个 div.b。用 div.wrapper .b:nth-child(2) {background:#c00;} 效果一样。也就是说,似乎 nth-of-type 只能匹配 标签而不能 .b