前端知库

:has() 怎样根据后代或相邻元素设置样式?

参考答案

:has() 按相对选择器是否匹配来选择当前元素。例如 .card:has(> img) 选择有直接子图片的卡片,h1:has(+ p) 选择后面紧接段落的 h1。它不只是“父选择器”,也能表达与兄弟元素的关系。

它的权重取参数列表中最高权重选择器的权重,不能因为条件看似简单就忽略层叠影响。:has() 内不能再次嵌套 :has(),伪元素通常也不能作为其参数。

应把匹配范围限制在具体组件,避免在频繁变动的大子树上使用过宽的锚点和条件。它减少的是为样式同步状态所写的部分 JavaScript,不代替业务状态管理;不支持该选择器的目标环境仍需回退。