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

  • 原创
  • 作者:程序员三丰
  • 发布时间:2022-09-01 17:27
  • 浏览量:1025
在日常前端开发工作中,总有最后一个同类元素进行特殊的样式处理需求。我们一般会用到 CSS 伪类: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 本文只做了基本介绍,它还有其他匹配规则,比如元素分组等,由于目前还没有找到合适资源,后续会继续分享,将请期待!

参考文章

声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://mp.51blog.xyz/article/33.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas