/ deep /和:: shadow在CSS选择器中的含义是什么?

Dre*_*kes 67 css html5 web-component shadow-dom polymer

在查看Polymer时,我在Chrome 37的开发人员工具的样式选项卡中看到以下CSS选择器:

在此输入图像描述

我还看到了一个带有伪选择器的选择器::shadow.

那么,是什么做的/deep/::shadowCSS选择呢?

Dre*_*kes 77


正如Joel H.在评论中指出的那样,Chrome已经弃用了/deep/组合器,它在IE中给出了语法错误.


HTML5 Web Components提供CSS样式的完全封装.

这意味着:

  • 组件中定义的样式不会泄漏并影响页面的其余部分
  • 在页面级别定义的样式不会修改组件自己的样式

但是,有时您希望使用页面级规则来操纵在其shadow DOM中定义的组件元素的表示.为此,您可以添加/deep/到CSS选择器.

因此,在所示的示例中,html /deep/ [self-end]选择html具有该self-end属性的(顶级)元素下的所有元素,包括那些隐藏在Web组件的阴影DOM根中的元素.

如果您需要在阴影根中生成所选元素,则可以::shadow在其父元素上使用伪选择器.

考虑:

<div>
  <span>Outer</span>
  #shadow-root
  <my-component>
    <span>Inner</span>
  </my-component>
</div>
Run Code Online (Sandbox Code Playgroud)

选择器html /deep/ span将选择两个<span>元素.

选择器::shadow span将仅选择内部<span>元素.

在W3C的CSS范围模块规范中了解更多相关信息.

  • 请注意,在2015-2016左右,Chrome已弃用/ deep/combinator.此外,在IE中使用它会给你一个语法错误. (6认同)
  • ::影子也被贬低了 (6认同)
  • @NicoO,很有意思.我刚刚和你的jsfiddle玩了一点(当你评论时我的网站对我来说很糟糕)我似乎无法让`:: shadow`伪选择器为用户代理的shadow DOM工作.使用`/ deep /`确实有效. (2认同)
  • @NicoO似乎不再使用chrome了......标准已更改,因此[>>>是新的/深度/组合者](https://drafts.c​​sswg.org/css-scoping-1/#deep -combinator).而这也不是针对影子dom. (2认同)
  • 有趣的读物:[The New Angular :: ng-deep和阴影穿透组合器掉落](https://hackernoon.com/the-new-angular-ng-deep-and-the-shadow-piercing-combinators-deep并放下4b088dbe459) (2认同)