CSS中:first-of-type与:last-of-type用法详解
时间:2026-02-07 19:50:58 173浏览 收藏
目前golang学习网上已经有很多关于文章的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《CSS中:first-of-type与:last-of-type的使用方法》,也希望能帮助到大家,如果阅读完后真的对你学习文章有帮助,欢迎动动手指,评论留言并分享~
:first-of-type匹配父元素中同类型标签的第一个,而非DOM首个子元素;如父元素内有p、div、p,则首p匹配,次p不匹配,且忽略文本/注释节点。

为什么 :first-of-type 并不等于「第一个子元素」
它匹配的是其父元素中**同类型标签的第一个出现**,不是按 DOM 顺序排的第一项。比如父元素里先有 常见误用场景:想给列表第一个 其中第三个 容易踩的坑: 这是最常混淆的点。 示例: 所以当你真正想选“容器里第一个段落”,用 多数情况下, 真正要注意的是父容器里是否混入了同名但不同用途的标签——比如用多个 以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。、再有 ,那么第二个 不会匹配 :first-of-type,但第一个 会——即使它前面还有别的标签。
加样式,却在父 下写 li:first-of-type,结果发现没生效。原因可能是 开头有注释、空格文本节点(虽然不影响渲染,但仍是子节点),或者混入了其他标签如 。此时 :first-of-type 仍有效,但你得确认目标 确实是所有 中的第一个。 等不影响 :first-of-type 的计算:last-of-type 的行为与陷阱:last-of-type 是对称逻辑:找父元素内**同类型标签的最后一个**。但它同样不关心是否“视觉上在末尾”或“DOM 中排最后”。例如:<div>
<p>第一段</p>
<span>中间</span>
<p>第二段</p>
<p>第三段</p>
</div>
会匹配 p:last-of-type,而第二个不会——哪怕它后面跟着 。:last-of-type 可能意外切换目标(比如 JS 新增一个 ,原来“最后一个”就失效了):nth-last-of-type(1) 功能等价,但后者更明确表达“倒数第一个”,可读性略高:last-of-type 不会受孙元素影响对比
:first-child / :last-child 的关键区别:first-child 要求元素**必须是父元素的第一个子节点且类型不限**;而 :first-of-type 只要求它是该类型中的第一个,不管前面有没有别的标签。<article>
<h2>标题</h2>
<p>正文第一段</p>
<p>正文第二段</p>
</article>
p:first-child → 不匹配任何 (因为第一个子是 )p:first-of-type → 匹配第一个 (它是所有 中的第一个)p:last-of-type → 匹配第二个 :first-of-type 更稳妥;想选“整个列表结构里的首个直接子项”,才用 :first-child。实际项目中建议怎么选
:first-of-type 和 :last-of-type 更贴近语义意图:比如文章首段加缩进、表格最后一行设底边框、卡片列表最后一项去 margin。它们对 HTML 结构变化更宽容。:first-of-type:nth-of-type 系列支持不稳定,:first-of-type 相对更稳div:last-of-type 可能选到意料之外的块。