阴影根或阴影根中所有顶级元素的 CSS 选择器

标签 css html shadow-dom

我需要一个在影子根内的 css 中使用的选择器,它选择影子根的所有子级(但不是孙子级),无论它们是什么标签并且不给它们一个 ID。

在下面的示例中,SPAN、A、P 和 DIV 应该有一个红色边框,但 SPAN IN DIV 没有。

<my-element>
  #shadow-root
    <span>SPAN</span>
    <a>A</a>
    <p>P</p>
    <div>
      DIV
      <span>SPAN IN DIV</span>
    </div>
    <style>
      :root>*{border:1px red solid;}
    </style>
</my-element>

我希望,:root -Selector 会在 shadow dom 内完成这项工作,但事实并非如此。

如果有人展示如何在影子根上设置 ID,这也是一个可能的解决方案。

更新:

尝试使用 #shadow-root > *作为选择器:

似乎不起作用。可能只是谷歌浏览器开发人员工具将阴影根元素可视化。

最佳答案

使用此选择器::host > *:host选择器在 https://drafts.csswg.org/css-scoping/#host-selector 中描述

document.querySelector( 'my-element' )
  .attachShadow( { mode: 'open' } )
  .innerHTML = `
    <span>SPAN</span>
    <a>A</a>
    <p>P</p>
    <div>
      DIV
      <span>SPAN IN DIV</span>
    </div>
    <style>
      :host>*{border:1px red solid;}
    </style>`
<my-element>
</my-element>

:host也可以包含一个复合选择器,它必须放在括号中。例如。 :host([foo=bar])选择具有属性 foo 的宿主元素设置为 bar .

关于阴影根或阴影根中所有顶级元素的 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42627939/

相关文章:

css - 并排两个div,右边div固定宽度,左边div占用剩余空间

html - CSS 居中 DIV 包含其他 DIV

html - 标题文本不会到达代码底部

html - 多个 :selectors on one CSS element?

html - 绝对定位的元素不显示 margin-left 效果

html - md-chips 与 md-select 在多选模式下

javascript - 在 web 组件中引用 light DOM

jquery - 知道什么溢出:hidden has hidden

polymer - 是否可以使用 Polymer 查询包括 shadow dom 在内的所有元素?

javascript - 如何与输入字段中浏览器插入的 Shadow DOM 内容进行交互?