css -- 为什么:last-child 无效?

在产品需求中,总有对第一个或者最后一个同类元素进行特殊的样式处理。

如果使用js来判断哪个是第一个、最后一个也并不是不可以。
但是,完全属于css的管理范围为什么要去使用js呢?

css选择器出场!

下面仅展示:last-child效果

1.期望效果

代码展示:

<template>
  <div class="root-container">
    <div class="father">
      <div class="child" v-for="item in 10" :key="item">
        一共10个元素,我是第{{item}}个
        <template v-if="item== 10">(css控制我的颜色)</template>
      </div>
    </div>
  </div>
</template>
<style lang='scss' scoped>
.father {
  width: 500px;
  border: 1px solid #b2b6b6;
  text-align: center;
  .child {
    padding: 10px 0;
    &:last-child {
      color: red;
    }
  }
}
</style>

展示的效果也和期望中的一样,最后一个元素文字为红色
在这里插入图片描述

2. 非期望效果

但有时候:last-child实现的却和想象中的 不太一样!!!!
代码如下:

<template>
  <div class="root-container">
    <div class="father">
      <div class="child" v-for="item in 10" :key="item">
        一共10个元素,我是第{{item}}个
        <template v-if="item== 10">(css控制我的颜色)</template>
      </div>
      <p>我是多余的元素</p>
    </div>
  </div>
</template>
<style lang='scss' scoped>
.father {
  width: 500px;
  border: 1px solid #b2b6b6;
  text-align: center;
  .child {
    padding: 10px 0;
    &:last-child {
      color: red;
    }
  }
}
</style>

看代码也可以看出来,仅仅是多了一个p标签,明明把:last-child是设置给了.child,但是需要的效果却没有了。
在这里插入图片描述

3. 分析问题

为什么:last-child没有起作用?

3.1 el:last-child 的匹配规则

  • 1.查找 el 选择器匹配元素的所有同级元素(siblings)
  • 2.在同级元素中查找最后一个元素
  • 3.检验最后一个元素是否与选择器 el 匹配

期望中的效果实现了,是因为el:last-child匹配到的最后一个元素也是.child
非期望效果出现,是因为el:last-child匹配到的最后一个元素也是p标签而不是.child

4. 解决办法

方法1、
:last-child在其父元素内没有其它的标签,即让其父元素仅包含该种类型标签

方法2、
使用其它标签选择器:last-of-type
具体使用规则 :last-of-type — MDN

在这里插入图片描述

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 在这个问题中,你提到了:last-child选择器。:last-child选择器用于选择某个元素的最后一个子元素。\[1\]如果你想要选择最后一个子元素的话,可以直接使用el:last-child的形式,不需要指定具体的子元素名。\[2\]然而,如果你想要限制最后一个子元素的名字,可以使用name1 name2:last-child的形式,其中name2表示最后一个子元素的名字。\[2\]在使用:last-child选择器时,它的匹配规则是首先查找与选择器el匹配的所有同级元素,然后在这些同级元素中找到最后一个元素,最后检查这个最后一个元素是否与选择器el匹配。\[3\]希望这个回答能够解决你的问题。 #### 引用[.reference_title] - *1* *3* [css -- 为什么:last-child 无效?](https://blog.csdn.net/Dark_programmer/article/details/122948613)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CSS的选择器 :first-child和:last-child](https://blog.csdn.net/Learning_xzj/article/details/119838827)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值