css 在 2023 年已原生支持 `:has()` 伪类,允许基于后代、兄弟或后续兄弟元素的状态(如 `:hover`)反向影响**前置的、非嵌套的任意元素**,无需 javascript 即可实现跨层级样式联动。
在传统 CSS 中,选择器只能“向下”或“向右”匹配(即子元素、后代、相邻/通用兄弟),无法从一个元素“回溯”影响其前面或完全无关位置的元素——这正是你示例中 #c:hover #a 失败的根本原因:#a 不是 #c 的后代,也不在其兄弟链的左侧可及范围内。
而 CSS :has() 伪类(CSS Selectors Level 4 标准)彻底改变了这一限制。它是一个关系型选择器,语法为 E:has(F),表示“匹配满足条件 E,且在其 DOM 子树中(含后代、兄弟等上下文)存在匹配 F 的元素”。关键在于:E 可以是任意已有元素(如 #a),而 F 描述的是相对于 E 的某种结构关系——包括 ~(后续兄弟)、+(紧邻后续兄弟)甚至嵌套路径。
回到你的原始需求:
other stuff
你想在 #c:hover 时修改 #a 的样式。正确写法是:
立即学习“前端免费学习笔记(深入)”;