CSS 通过伪类 nth-child 和 nth-of-type 实现奇偶选择器的区别

导读

  • 本文先通过两个比较全面的实战代码示例,向大家展示:nth-child:nth-of-type的基本使用方法;
  • 然后,对比分析示例结果,做出文中提到的这两个伪类的区别。

语法介绍

个人理解,这两个伪类都是函数式的,都有一个参数,语法格式如下:

:nth-child(n)
:nth-of-type(n)

可以看到它们都有一个参数 n ,它的值有以下三种可能:

  • 可以是一个数字,如:1,2,3;
  • 可以是一个关键字,如:odd(奇数行),even(偶数行)等;
  • 可以是一个公式,如:2n+1(奇数行),2n(偶数行),-n+3(前三个)等。

:nth-child 示例

代码:

<!-- CSS -->
<style>
    body {
        padding: 60px;
    }

    div {
        width: 300px;
    }

    div p,
    div div {
        margin: 10px 0;
        padding: 6px 2px;
        line-height: 20px;
        background-color: #f8f8f8;
        text-indent: 1em;
    }

    .invalid {
        text-decoration: line-through;
    }

    .list-1st p:nth-child(odd) {
        color: blue;
    }

    .list-1st p:nth-child(even) {
        color: red;
    }
</style>

<!-- HTML -->
<h4 class="hello-world">p:nth-child 示例</h4>
<div class="list-1st">
    <p>1. 奇数行 - P标签</p>
    <div class="invalid">2. 偶数行 - DIV标签</div>
    <p>3. 奇数行 - P标签</p>
    <p>4. 偶数行 - P标签</p>
    <div class="invalid">5. 奇数行 - DIV标签</div>
    <p>6. 偶数行 - P标签</p>
    <p>7. 奇数行 - P标签</p>
    <p>8. 偶数行 - P标签</p>
    <div class="invalid">9. 奇数行 - DIV标签</div>
    <div class="invalid">10. 偶数行 - DIV标签</div>
</div>

结果:
在这里插入图片描述

总结(以 p:nth-child(odd) 为例说明):

  • p:nth-child(odd) 样式匹配规则是,首先必须匹配 odd 奇数行元素,其次匹配到的 odd 奇数行的元素类型还必须是 p 标签,必须同时满足这两个条件样式才生效。
  • 结合上面的结果截图进行说明,如,第 1,3,7 是奇数行的同时这三行的元素类型是 p 标签,所以样式生效,而第 2、5、9、10 虽然匹配奇偶规则但是它们不是 p 标签,因此样式不生效。

:nth-of-type 示例

代码:

<!-- CSS -->
<style>
    body {
        padding: 60px;
    }

    div {
        width: 300px;
    }

    div p,
    div div {
        margin: 10px 0;
        padding: 6px 2px;
        line-height: 20px;
        background-color: #f8f8f8;
        text-indent: 1em;
    }

    .invalid {
        text-decoration: line-through;
    }

    .list-2nd div {
        background-color: aquamarine;
    }

    .list-2nd p:nth-of-type(odd) {
        color: blue;
    }

    .list-2nd div:nth-of-type(odd) {
        color: red;
    }
</style>

<!-- HTML -->
<h4 class="hello-world">p:nth-of-type 示例</h4>
<div class="list-2nd">
    <p>1. P标签 - 奇数行</p>
    <div>2. DIV标签 - 奇数行</div>
    <p class="invalid">3. P标签 - 偶数行</p>
    <p>4. P标签 - 奇数行</p>
    <div>5. DIV标签 - 偶数行</div>
    <p class="invalid">6. P标签 - 偶数行</p>
    <p>7. P标签 - 奇数行</p>
    <p class="invalid">8. P标签 - 偶数行</p>
    <div>9. DIV 标签 - 奇数行</div>
    <p>10. P标签 - 奇数行</p>
</div>

结果:
在这里插入图片描述

总结(以 p:nth-of-type(odd) 为例说明):

  • p:nth-of-type(odd) 样式匹配规则是,首先必须匹配元素类型为 p 标签,然后根据匹配到的结果(也就是 div.list-2nd 的所有元素类型为 p 标签的子元素),再从这个结果元素列表中匹配满足 odd 奇数行的子元素,样式才生效。
  • 结合上面的结果截图进行说明,如,先匹配到 div.list-2nd 中所有子元素中 p 标签,然后从这些 p 标签中查找到奇数行元素,给它们设置样式。

:nth-child(n):nth-of-type(n) 的区别

  • 二者都是从父元素的子元素中匹配,或者说从同级兄弟元素中匹配,区别是主要是匹配规则不同;
  • element:nth-child(n) 是先根据 n 匹配规则,在此基础上匹配 element;
  • element:nth-of-type(n) 是先匹配 element,然后从匹配的结果中根据 n 匹配。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
nth-child选择3的倍数的用法是:nth-child(3n)。这个选择器可以选中无序列表中每三个元素之一,也就是第3个、第6个、第9个等等。具体的工作原理是,通过计算每个元素在父元素中的位置,当位置与3取模结果为0时,就会被选中。这样可以方便地选择3的倍数元素。如果需要选择其他情况,可以根据具体需求来使用nth-child选择器。例如,如果要选择前两个元素,可以使用nth-child(-n+2),如果要选择奇数元素,可以使用nth-child(odd),如果要选择偶数元素,可以使用nth-child(even)。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)](https://download.csdn.net/download/weixin_38571759/13238488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [CSS伪类选择器nth-child 选择3的倍数个元素写法](https://blog.csdn.net/kerryqpw/article/details/78237467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西涯三锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值