CSS结构伪类选择器详解

  • :first-child 选中所有兄弟元素中的第一个
  • :last-child 选中所有兄弟元素中的最后一个
  • :nth-child(n) 选中所有兄弟元素中的第n个
  • :first-of-type 选中所有同类型兄弟元素中的第一个
  • :last-of-type 选中所有同类型兄弟元素中的最后一个
  • :nth-of-type(n) 选中所有同类型兄弟元素中的第n个

Ⅰ.关于:first-child,:last-child,:nth-child(n)

  <body>
    <h2>这是第1标题</h2>
    <p>这是第1个p标签</p>
    <li>这是第1个列表</li>
    <p>第2个p标签</p>
    <p>第3个p标签</p>
    <p>第4个p标签</p>
    <h2>这是第2个标题</h2>
    <div>
      <p>这是div下的第1个p标签</p>
      <p>这是div下的第2个p标签</p>
      <p>这是div下的第3个p标签</p>
      <li>这是div下的第1个列表</li>
      <p>这是div下的第4个p标签</p>
      <li>这是div下的第2个列表</li>
    </div>
  </body>
  <style>
    body p:first-child {
      background-color: red;
    }
    body p:last-child {
      background-color: green;
    }
    body p:nth-child(3) {
      background-color: yellow;
    }
  </style>

        以上是一个案例,:nth-child(n) 给我的感觉像是去匹配,p:nth-child(n),就是去找父元素下的第n个‘孩子’,这个孩子必须满足它是p标签,才能被选中。理解这个概念,就能很好理解p:first-child和p:last-child。回到案例,“这是div下的第1个p标签”变红,原因是我们在body的子代(儿子,孙子......)中寻找第一个孩子并且这个孩子是p标签,满足这两个条件,它才能被选中,我们才能给它添加背景色(red)。“这是第1个p标签”背景没变成红色,是因为它是body的第二个孩子,匹配不上。同理适用于:last-child,案例中没有满足条件的标签,也就是匹配不上,所以没有标签的背景变绿色。

Ⅱ.关于:first-of-type,:last-of-type,:nth-of-type(n)

  <body>
    <h2>这是第1标题</h2>
    <p>这是第1个p标签</p>
    <li>这是第1个列表</li>
    <p>第2个p标签</p>
    <p>第3个p标签</p>
    <p>第4个p标签</p>
    <h2>这是第2个标题</h2>
    <div>
      <p>这是div下的第1个p标签</p>
      <p>这是div下的第2个p标签</p>
      <p>这是div下的第3个p标签</p>
      <li>这是div下的第1个列表</li>
      <p>这是div下的第4个p标签</p>
      <li>这是div下的第2个列表</li>
    </div>
  </body>
  <style>
    body p:first-of-type {
      background-color: red;
    }
    body p:last-of-type {
      background-color: green;
    }
    body p:nth-of-type(3) {
      background-color: yellow;
    }
  </style>

        针对于:nth-of-type(n),它给我的感觉就是去寻找,先去把类型符合的标签找出来,再去找第n个。直白点说,p:nth-of-type(n)就是去找第n个p标签,这符合我们平常的理解。说到这,我相信各位能够理解,p:last-of-type就是选择最后一个p标签,同理,p:first-of-type就是选择第一个p标签。值得注意的是,以上案例都是在body的子代中选择。

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

徐晓率

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

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

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

打赏作者

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

抵扣说明:

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

余额充值