您的位置:首页 > Web前端 > JavaScript

关于nth-child的疑惑

2016-04-26 19:17 585 查看
正好很久没写代码了,也想试试回答下这个问题,于是就搜索了下,于是就找到了 W3School的CSS3 :nth-child() 选择器,看到了这样一个代码:
p:nth-child(-n+3){
background:#ff0000;
}


12345    <h1>这是标题</h1>    <p>第一个段落。</p>    <p>第二个段落。</p>    <p>第三个段落。</p>    <p>第四个段落。</p>

1

2

3

4

5

6

7

/* @reset */
body{background-color:#FFFFFF;}

/* ==== demo ==== */
p:nth-child(-n+3){
    background:#ff0000;
}

1感觉有点奇怪,我原本以为应该会是前三个段落被选中,像这样:一定是哪里不对了。来看看它的说明: :nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型。 n 可以是数字、关键词或公式。 MSN文档对:nth-child的说明: 伪类:nth-clild(an+b)匹配在文档树中前面有an+b-1个兄弟元素的元素,此时n大于或等于0,并且该元素具有父元素。简而言之,该选择器匹配多个位置满足an+b的子元素。 span:nth-child(-n+3) 匹配前三个子元素中的span元素。 注意到一个特点——“具有父元素”,于是我们给这个例子中的
<p>
加个父元素试试:

1

2

3

4

5

6

7

    <h1>这是标题</h1>
    <div>
        <p>第一个段落。</p>
        <p>第二个段落。</p>
        <p>第三个段落。</p>
        <p>第四个段落。</p>
    </div>

1234567/* @reset */body{background-color:#FFFFFF;}/* ==== demo ==== */p:nth-child(-n+3){    background:#ff0000;}

1

element:nth-child(an + b) { /*规则*/ }

成功。也就是说
nth-child
从最大的父元素”body”开始,匹配“an+b”个元素,如果里面包含”element”,则对其应用样式规则。

1234567891011    <h1>这是标题</h1>    <div>        <p>第一个段落。</p>        <p>第二个段落。</p>        <p>第三个段落。</p>        <p>第四个段落。</p>    </div>    <p>第一个段落。</p>    <p>第二个段落。</p>    <p>第三个段落。</p>    <p>第四个段落。</p>

1

2

3

4

5

6

7

/* @reset */
body{background-color:#FFFFFF;}

/* ==== demo ==== */
p:nth-child(-n+3){
    background:#ff0000;
}

1以上,如果你想更可控的应用到“element”元素上,可以试试:
p:nth-of-type(-n+3){
background:#ff0000;
}


1

2

3

4

5

6

7

8

9

10

11

    <h1>这是标题</h1>
    <div>
        <p>第一个段落。</p>
        <p>第二个段落。</p>
        <p>第三个段落。</p>
        <p>第四个段落。</p>
    </div>
    <p>第一个段落。</p>
    <p>第二个段落。</p>
    <p>第三个段落。</p>
    <p>第四个段落。</p>

12345678910/* @reset */body {    background-color: #FFFFFF;}/* ==== demo ==== */p:nth-of-type(-n+3) {    background: #ff0000;}

1

最后,在Useful :nth-child Recipes中的例子由于都是使用
li
,所以很容易就忽略了上面出现的问题,也是提个醒吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  html javascript css