You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨<use>元素Shadow DOM边界的CSS选择器兼容性问题及解决方案问询

跨元素Shadow DOM边界的CSS选择器兼容性问题及解决方案问询

我最近碰到一个CSS兼容性的小坑,想跟大家请教下解决方案,先看我的测试代码:

<style>
body:has(:checked) .my-text { fill: blue; }
</style>
<input type="checkbox" checked>
<svg>
  <defs>
    <g id="my-g">
      <text y="20" class="my-text">This is blue in Chrome, black in Firefox</text>
      <text y="40">This is black</text>
    </g>
  </defs>
  <use href="#my-g" y="45"></use>
</svg>

这段代码在Chrome里能让.my-text类的文本变成蓝色,但在Firefox里它还是黑色的。我猜原因应该是Firefox会把<use>引用的元素放到#shadow-root里面,导致CSS里的后代选择器没法把它们识别成body:has(:checked)的后代元素。

我现在有几个疑问想请教大家:

  • 有没有办法在不使用JS也不使用CSS变量(比如像:checked { --text-color: blue; }这种写法)的前提下,让这段代码在Firefox里也正常生效?
  • 有没有CSS组合器能打通DOM(也就是:has(:checked)所在的上下文)和Shadow DOM之间的边界?
  • 另外我也很好奇,Chrome和Firefox这两种行为,到底哪一个是符合CSS规范的?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 14:08:16