代码之家  ›  专栏  ›  技术社区  ›  Domi

如何将常见的CSS类应用于阴影元素?

  •  0
  • Domi  · 技术社区  · 4 年前

    正如所指出的那样 here :

    由于样式隔离是Shadow DOM的一个特性,因此您无法定义将在Shadow DOM范围内应用的全局CSS规则。

    是否有任何方法可以在某些全局中全局定义简单的CSS类 styles.css 文件(例如),我们可以在各种地方使用,并在单个组件中重复使用它们?

    目前,简单的答案是添加一个相应的 <link href="styles.css"> 标记我们定义的每个组件。这是 proposed here 允许web组件使用引导类,并再次 here 以支持离子。这是一个好方法吗?如果我们把大 样式.css 在数十或数百个组件中?

    0 回复  |  直到 4 年前
        1
  •  1
  •   lamplightdev    4 年前

    Constructable Stylesheets 正是为了解决这个问题。

    简而言之,这是一种在组件之间共享相同样式表的方法,而无需每次都请求样式表。目前只有Chrome,但有一个 polyfill 而且,至少Firefox似乎 support this proposal .

        2
  •  0
  •   GZstudio GZstudio    4 年前

    也许它能帮助你。从这个链接 https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM

    您有以下内容:

    内部风格与外部风格

    在上面的示例中,我们使用 元素,但完全有可能通过引用 而是从元素中提取外部样式表。

    例如,看看我们的代码 弹出信息框外部样式表示例(请参阅源代码):

    // Apply external styles to the shadow dom
    const linkElem = document.createElement('link');
    linkElem.setAttribute('rel', 'stylesheet');
    linkElem.setAttribute('href', 'style.css');
    
    // Attach the created element to the shadow dom
    shadow.appendChild(linkElem);
    

    请注意,元素不会阻挡阴影根的绘制,因此 样式表中可能会出现未样式化内容(FOUC)的闪烁 荷载。

    许多现代浏览器都对标签进行了优化 从公共节点克隆或具有相同文本,以允许它们 共享一个支持样式表。通过此优化 外部和内部风格的表现应该相似。

    为了使其尽可能独立和模块化,我建议这样做:

    let myStyles = querySelector('rel[href="style.css"]');
    shadowDOM.appendChild(myStyles);
    

    通常,除了将样式直接添加到shadowDOM之外,您没有其他选择。