当前位置: 首页 > news >正文

CSS 伪类选择器 last-child 和 last-of-type 的区别

文章目录

  • “最后一个”伪类选择器
    • :last-child
    • :last-of-type
    • 总结
    • 参考文章

“最后一个”伪类选择器

:last-child

  • 语法

    element:last-child { style properties }

  • 解释

    :last-child 代表在它父元素中的最后一个子元素。

  • 正例

    • 代码
    <!-- CSS -->
    <style>
      .list {
        width: 300px;
        padding-left: 30px;
      }
    
      .list .item {
        background-color: #eee;
        padding: 6px 12px;
      }
    
      .list item:last-child { /* 关键代码:在.item类选择器上应用:last-child伪类 */
        background-color: green;
        color: yellow;
      }
    </style>
    
    <!-- HTML -->
    <div class="list">
      <p class="item">第 1 行</p>
      <p class="item">第 2 行</p>
      <p class="item">第 3 行</p>
      <p class="item">第 4 行</p>
      <p class="item">第 5 行</p>
      <p class="item">第 6 行</p> <!-- 以上都是 p 标签 -->
      <div class="item">第 7 行</div> <!-- 最后是 div 标签 -->
    </div>
    
    • 效果截图
      last-child正例效果截图
  • 反例

    • 代码
    <!-- CSS -->
    <style>
      .list {
        width: 300px;
        padding-left: 30px;
      }
    
      .list .item {
        background-color: #eee;
        padding: 6px 12px;
      }
    
      .list p.item:last-child { /* 关键代码:在.item类选择器上应用:last-child伪类,且增加了标签限制 */
        background-color: green;
        color: yellow;
      }
    </style>
    
    <!-- HTML -->
    <div class="list">
      <p class="item">第 1 行</p>
      <p class="item">第 2 行</p>
      <p class="item">第 3 行</p>
      <p class="item">第 4 行</p>
      <p class="item">第 5 行</p>
      <p class="item">第 6 行</p> <!-- 以上都是 p 标签 -->
      <div class="item">第 7 行</div> <!-- 最后是 div 标签 -->
    </div>
    
    • 效果截图
      last-child反例效果截图

    反例为何没有生效呢?
    【关键点】 因为 div.list 最后一个元素是 div.item ,而不是 p.item。

:last-of-type

  • 语法

    element:last-of-type { style properties }

  • 解释 1
    :last-of-type 表示了在它父元素的子元素列表中,最后一个给定类型的元素。

  • 示例 1

    • 代码
      <!-- CSS -->
      <style>
        .list {
          width: 300px;
          padding-left: 30px;
        }
    
        .list .item {
          background-color: #eee;
          padding: 6px 12px;
        }
    
        .list p.item:last-of-type { /* 关键代码:在.item类选择器上应用:last-of-type伪类,且增加了标签限制 */
          background-color: green;
          color: yellow;
        }
      </style>
    
      <!-- HTML -->
      <div class="list">
        <p class="item">第 1 行</p>
        <p class="item">第 2 行</p>
        <p class="item">第 3 行</p>
        <p class="item">第 4 行</p>
        <p class="item">第 5 行</p>
        <p class="item">第 6 行</p> <!-- 以上都是 p 标签 -->
        <div class="item">第 7 行</div> <!-- 最后是 div 标签 -->
      </div>
    
    • 效果截图
      last-child反例效果截图
  • 解释 2
    当代码类似 Parent tagName:last-of-type 的作用区域包含父元素的所有子元素中的最后一个选定元素,也包括子元素的最后一个子元素并以此类推。

  • 示例 2

    • 代码
    <!-- CSS -->
    <style>
      .list {
        width: 300px;
        padding-left: 30px;
      }
    
      .list .list-children {
        padding-left: 30px;
      }
    
      .list .item {
        background-color: #eee;
        padding: 6px 12px;
      }
    
      .list p.item:last-of-type { /* 关键代码:在.item类选择器上应用:last-of-type伪类,且增加了标签限制 */
        background-color: red;
        color: yellow;
      }
    </style>
    
    <!-- HTML -->
    <div class="list"> <!-- 父列表 -->
      <p class="item">第 1 行</p>
      <p class="item">第 2 行</p>
      <p class="item">第 3 行</p>
      <p class="item">第 4 行</p>
      <p class="item">第 5 行</p>
      <p class="item">第 6 行</p>  <!-- 父列表的最后一个 p.item -->
      <div class="item">第 7 行</div>
      <div class="list-children"> <!-- 子列表 -->
        <p class="item">第 1 行</p>
        <p class="item">第 2 行</p>
        <p class="item">第 3 行</p>
        <p class="item">第 4 行</p>  <!-- 子列表的最后一个 p.item -->
        <div class="item">第 5 行</div>
      </div>
    </div>
    
    • 效果截图
      last-child反例效果截图

总结

  • element:last-child 必须要满足两个条件才能生效:

    • 必须是匹配 element 选择器的在同级(siblings)元素中的最后一个(即是其父元素的最后一个子元素)

    • element 选择器的在同级(siblings)元素中的最后一个元素必须与 element 选择器匹配。

  • element:last-of-type 只要是其父元素的最后一个匹配 element 选择器的元素即可生效。甚至会对后代满足匹配规则的元素也生效。

last-of-type 本文只做了基本介绍,它还有其他匹配规则,比如元素分组等,由于目前还没有找到合适资源,后续会继续分享,将请期待!

参考文章

  • CSS 选择器 :last-child 与:last-of-type 的区别
  • css 中:last-child 不生效的解决方法
  • :last-of-type - CSS(层叠样式表) | MDN
  • :last-child - CSS(层叠样式表) | MDN

相关文章:

  • string
  • Vue简介及简单应用
  • 停止线程的方法
  • java计算机毕业设计计算机专业在线学习评估软件-演示录像-源码+数据库+系统+lw文档+mybatis+运行部署
  • STM32Cube学习(2)——定时器中断
  • jenkins安装部署(前端+后端)自动发布
  • docker logs 命令
  • 数据结构和算法-全文总结
  • 漏洞复现-CVE-2022-1388命令执行F5 BIG-IP iControl REST
  • labelme标注及标签的统一
  • 日常开发中比较使用的命令行
  • 项目管理证书 PMP 的含金量高吗?
  • RS笔记:深度推荐模型之多任务学习PLE模型 [RecSys 2020 最佳论文 腾讯]
  • 好用的word插件汇总
  • Flutter学习笔记 —— 完成一个简单的新闻展示页
  • [PHP内核探索]PHP中的哈希表
  • 自己简单写的 事件订阅机制
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【剑指offer】让抽象问题具体化
  • js 实现textarea输入字数提示
  • JS笔记四:作用域、变量(函数)提升
  • node.js
  • node学习系列之简单文件上传
  • Object.assign方法不能实现深复制
  • python docx文档转html页面
  • Python进阶细节
  • Sass 快速入门教程
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 从零开始学习部署
  • 每天10道Java面试题,跟我走,offer有!
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何在 Tornado 中实现 Middleware
  • 手机端车牌号码键盘的vue组件
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 怎样选择前端框架
  • 进程与线程(三)——进程/线程间通信
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​水经微图Web1.5.0版即将上线
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (LeetCode) T14. Longest Common Prefix
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (二)springcloud实战之config配置中心
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)创业家杂志:UCWEB天使第一步
  • (转载)hibernate缓存
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net IE10 _doPostBack 未定义
  • .net mvc部分视图
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试