我正在尝试设置 shadow dom 中的文本样式,但没有成功。唯一的事情是我想从 shadow DOM 之外做这件事。另一件重要的事情是,Shadow dom 样式应仅适用于“bar”元素内的 shadow dom。这是我的测试代码:

<!doctype html>

<html>
  <head>
    <style>
      :host(bar) span:first-child {
        text-transform: uppercase;
        color: green;
      }
    </style>
  </head>

  <body>
    <bar></bar>

    <script>
      var bar = document.querySelector('bar');
      var root = bar.createShadowRoot();
      root.innerHTML = '<span>bar</span><span>foo</span>';
    </script>
  </body>
</html>

还有一个额外的问题,究竟是什么
:host(bar:host) { ... }

做 ?

最佳答案

shadow DOM 规范目前仍在开发中,它的大部分功能都在从一个时刻到另一个时刻发生根本性的变化。

要从外部设置 shadow DOM 元素的样式,这取决于您的浏览器是依赖于(过时的)peusdo-element 暴露还是新的 css shadow dom 选择器 ^^ (cat) 和 ^ (hat)
如果浏览器支持新语法,您可以简单地使用 hat ( ^ ) 选择器输入一个元素 shadow dom ,或者如果您希望跨越所有阴影边界,您可以使用 cat ( ^^ ) 选择器来做到这一点。

如果浏览器还不支持它,您需要通过向其添加伪属性 <shadow-element peusdo="myname" /> ,然后在您的 css shadow-host::myname 中引用该伪元素,将您希望设置样式的元素作为其父元素的伪元素公开

至于您的“奖金”问题,您正在引用影子主机元素,但仅当影子主机是 <bar> 元素时,如果您省略第二个 :host,则您所引用的影子主机是 <bar> 元素或具有一个作为其祖先的影子主机.

请注意,由于 API 不断发展,上述信息可能在超过一个月左右后仍然可靠。

关于javascript - 尝试从外部设置 shadow DOM 的样式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20712576/

10-13 06:54