<html>
  <style>
    body { color: blue; }
  </style>
  <body>
    <h1>Styles!</h1>
    <p>somebody made a very broad selector</p>
    <isolated-stuff></isolated-stuff>
  </body>
  <script>
    class DemoElement extends HTMLElement {
      constructor() {
        super();
        this.attachShadow({ mode: 'open' });
        this.shadowRoot.innerHTML = `
        <style>div { font-size: 24px; }</style> // I can add `color: initial` here ?
        <div>why am i blue?</div>`;
      }
    }
    customElements.define('isolated-stuff', DemoElement);
  </script>
</html>

我正在努力理解这style scoping for web modules个.

This css-tricks page

请注意,该功能仍然有效(尽管我们必须通过shadowRoot查询 Select 器),但我们已经完全失go 了全局样式.The Shadow DOM boundary (shadow root) prevents styling coming in or going out (sorta like an iframe)

我意识到我正在使用的文档可能不应该使用如此宽泛的body样式.我能找到一些关于为什么我的div中的文本是blue的文档吗?

推荐答案

简而言之,inheritance跨越阴影DOM边界.

请参见3.1. Informative Explanation of Shadow DOM.它特别写道:

...影子树(如果存在)用于构建扁平的元素树,CSS在 Select 符之后将其用于所有目的(包括继承和框构造).

这就是自定义属性(CSS变量)可以跨越Shadow DOM边界的原因,如CSS-Tricks文章中所述.

由于 colored颜色 是继承的属性,并且在您的示例中没有在阴影树中重新分配,因此内部的文本将继承蓝色.

Html相关问答推荐

卡片上方的文本

关于角内按钮范围的混乱

Vue.js复选框对齐问题:在表格单元格中居中复选框

将精选选项的价格合并为一个价格HTML、PHP和JQuery

HTML中的ARIA标签:在元素内部还是外部?(&Q;

如何设计缠绕锚点元素的样式?

希望平稳过渡到悬停状态

顶部有文字的图像的悬停效果

如何在悬停时更改同级元素 CSS

使用HTML和CSS构建简历网站.无法使body元素内的div元素跨越整个网站高度

如何调整底部有 SVG 的元素的高度,使其在所有宽度上看起来都不错?

使用 R markdown 在 html 中包含图像

pull-right 不适用于 bootstrap alert 内的按钮

重点/主动输入的概述问题

将背景图像裁剪成两半

如何根据行中的其中一列将行居中?

CSS 变量不适用于自定义属性回退值

让 Bootstrap 5 模式和背景占据父容器的宽度和高度,而不是全屏

我正在try 向我预先存在的导航栏添加响应式汉堡包导航,但由于某种原因它没有显示

无法使用 Reactjs 多次更新本地存储