【问题标题】:Global Styles do not override shadow dom style全局样式不会覆盖阴影 dom 样式
【发布时间】:2019-02-20 10:32:46
【问题描述】:

根据https://developers.google.com/web/fundamentals/web-components/shadowdom#stylefromoutside

外部样式总是胜过 shadow DOM 中定义的样式。为了 例如,如果用户编写选择器 fancy-tabs { width: 500px; }, 它将胜过组件的规则::host { width: 650px;}。

这在我的示例中似乎不起作用。我已经设置了一个应用程序覆盖组件。在里面我有一个 .child 类的 div。根据上述来源,我希望孩子在全局范围内设置填充:

app-overlay .child {
  padding: 0 25%;
}

在此处查看完整示例:http://plnkr.co/edit/YQOmtxSA9AThCcNmrEJc?p=preview

请注意,设置为全局的 padding 不会应用于 app-overlay 子项(尽管它应该赢得组件的样式)。

有没有我遗漏的步骤?

【问题讨论】:

  • 在原生实例中,您可以使用 chrome 开发者工具来检查和检查完整的 css 应用堆栈
  • 感谢@Attersson。我已经检查了好几次,但没有成功。最终我找到了答案(见下面我的答案)。再次感谢:)
  • 请注意,在引文中:“胜过 shadow DOM 中定义的样式”的意思是“胜过 :host 样式”,而不是子元素样式。
  • 我试过:host。仍然没有工作。它仅适用于可继承属性的情况。如果您为自定义元素本身设置样式 AFAIK,则此短语也是正确的。
  • 实际上它适用于 :host

标签: javascript web-component shadow-dom


【解决方案1】:

好的,这只是令人困惑,所以我把它放在这里以防有人撞到它。

通过全局范围样式覆盖仅适用于可继承的 CSS 属性。 如果您想设置一些不可继承的属性(如填充 - 请参阅完整列表 here)。

所以我猜想对不可继承属性执行此操作的唯一方法是通过模板(例如调用文件)或 css 变量注入 CSS。

【讨论】:

  • 你也试过padding: inherit!important吗?
  • 关于 !important - 这是 shadow DOM 保护我们的组件免受攻击的主要内容之一。关于继承 - 你不能继承填充 - 它是不可继承的 :) 只是为了确保 - 我在我的代码中检查了它。您可以在问题中的 plnkr 中尝试。
猜你喜欢
  • 1970-01-01
  • 2018-10-14
  • 2017-04-02
  • 2019-07-21
  • 2012-01-18
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多