结构伪类选择器中的nth-child(n)和nth-of-type(n)

nth-child(n) 选择父元素中的一个或多个子元素

  • n可以是数字,公式,关键字

  • n如果是数字,就是选择第n个

  • n可以是关键字:even偶数, odd奇数。

  • n可以是公式:变量只能写n(不能是其他字母),0或者超出的忽略。

公式取值
2n

偶数(相当于even)

2n+1

奇数(相当于odd)

5n五的倍数(5,15,10等)
n+2从第二个开始,到最后(含二)
-n+3前三个(包含三)

具体使用如下

    <style>
        ul li:nth-child(n+3) {
            background-color: antiquewhite;
        }

        ul li:nth-child(-n+2) {
            background-color: azure;
        }
    </style>

<body>
    <ul>
        <li>number1</li>
        <li>number2</li>
        <li>number3</li>
        <li>number4</li>
        <li>number5</li>
    </ul>

</body>

因为n是从0开始计数,n+3表示第3,4,5个(第六个超出ul范围为,故忽略不计)则最后效果为number3,4,5被改为azure背景颜色,-n+2表示第2,1个(第0个超出ul范围,故忽略不计)。

在结构包含单一的情况下,nth-of-type和nth-child(n)用法相似

但在实际开发中会出现更复杂的情况,例如ul中包含了li,divs,span,input等多个子元素

接下来将详细介绍两者之间的区别

在如下情况中,section中包含了p和div两类标签

    <style>
        section div:nth-child(1) {
            background-color: hotpink;
        }
    </style>

<body>
    <section>
        <p>different</p>
        <div>mean1</div>
        <div>mean2</div>
    </section>

运行的结果却是section中的背景颜色都没有变为hotpink

为什么会发生这种情况呢;那是因为nth-child会把所有的section下的子元素都排列序号,different为一号,mean1,mean2分别为二,三号但是执行的时候会看第一个子元素也就是different,然而different所在的<p>与伪类选择器中选中的<div>不匹配,就没有标签被选择出来,故都没有背景颜色。

当在伪类选择器中使用nth-of-type

    <style>
        section div:nth-of-type(1) {
            background-color: blue;
        }
    </style>

<body>
    <section>
        <p>different</p>
        <div>mean1</div>
        <div>mean2</div>
    </section>

就会发现mean1所在的一行背景颜色变为blue,这是由于nth-of-type会把指定标签排列序号,如在上述情况中,选择器会先锁定<div>将mean1,mean2排序为1,2号,再从中选择第一个子元素,故mean1变为blue背景颜色。

二者区别总结

nth-child会先锁定第几个子元素,找到后在看和选择器前面写的标签是否一致。

nth-of-type会先锁定指定的标签(掠过其余标签)在看选择的第几个子元素。

如果是无序列表,nth-child(n)使用更多。

伪类选择器的权重

   
        section div:nth-of-type(1) {
            background-color: blue;
        }
  

在上面这行代码中,nth-of-type属于结构伪类选择器,权重是10,div属于元素选择器(标签选择器)权重是1,section也属于标签选择器权重是1,故整体的权重是12.

所以需要特别注意的是:类选择器,属性选择器,伪类选择器的权重为10.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值