p:last-of-type能稳定命中父容器中最后一个p元素,忽略其他类型节点;而p:last-child仅匹配父元素的最后一个直接子节点,易因末尾非p元素或嵌套结构失效。

p:last-of-type 就是你要的解法,它能稳定命中父容器中最后一个 p 元素,哪怕后面跟着 div、span 甚至纯文本节点。
为什么 p:last-child 在这里大概率失效
因为 它只做一件事:在所有同为 这个写法实际含义是:“先找所有 最常被忽略的一点::last-of-type 的“父元素”必须是你写的那个选择器的直接父级。嵌套过深、动态插入内容、或使用了 :last-child 只认“位置”:必须是父元素的**最后一个直接子节点**才匹配。一旦 HTML 结构末尾有非 p 的内容(比如 、p:last-child 立刻不生效。
.content p:last-child 写完发现样式没上,一查 DOM 发现末尾是个 script 标签.content 里有个子 section,而它里面也有 p,那个 p 也可能被 p:last-child 错误选中(因为它在 section 里是最后一个子):last-child 完全不关心标签名,只数“第几个子”,所以它和你“找最后一个段落”的意图根本不对齐
p:last-of-type 的实际匹配逻辑p 的兄弟元素中,取 DOM 顺序最靠后的那个。其他类型节点(div、img、文本、注释)全部忽略。
→ p:last-of-type 命中“3”,p:last-child 不命中任何元素article p:last-of-type 是合法的,但匹配的是 article 下的 p,不是任意嵌套深度的 p
想选“带某个 class 的最后一个
p”,p.last-item:last-of-type 不可靠p,取最后一个,再看它有没有 last-item 类”。如果最后一个 p 恰好没这个 class,整条规则就失效——它不是“在所有 .last-item 中找最后一个”,而是“在所有 p 中找最后一个,再过滤 class”。
:nth-last-child(1 of .last-item)(Chrome 105+、Firefox 109+ 支持)document.querySelector('.container p.last-item:last-of-type') 手动加 classp 统一封装进一个容器,再对容器用 div:last-of-type > p
display: contents 都会悄悄改变上下文,导致匹配失败。动手前先用浏览器开发者工具高亮父节点,比反复改选择器快得多。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











