相关疑难解决方法(0)

从 ShadowDOM 内部加载链接时,不会加载外部字体

首先我想说我知道这个问题类似于:

如何让导入的css字体/图标对shadow dom中的元素产生影响?

事实并非如此,也没有帮助。

问题:我最近决定使用 ShadowDOM 来封装我的项目中的样式。一开始我认为它按预期工作,但我注意到一些来自外部 CSS 文件的图标消失了。重要的是要注意,这些样式是外部的,并且进行更改的可能性是有限的。

我已经准备了代码来演示该问题(请参阅下面的代码片段)。

一切似乎都工作正常,除了 @font-face

正如您所看到的,包含带图标的外部 CSS 文件的 HTML 在 ShadowDOM 之外按预期工作。我也想在 ShadowDOM 中使用它。

我怎样才能做到这一点?

注意:如果您检查开发工具,网络选项卡中的 CSS 路径存在问题,但这是 SO 片段问题。如果您在本地运行该代码片段,则网络中一切正常。

const body = document.getElementsByTagName('body')[0];
const wrapper = document.querySelector('.wrapper')

const handleAddToShadowClick = (param) => {
  const host = document.querySelector('#shadowHost');
  if(param === 'insideShadow') {
    const shadowRoot = host.attachShadow({mode: 'open'});
     shadowRoot.innerHTML = firstComponent
  } else {
    const shadowRoot = host;
    wrapper !== null ? body.removeChild(wrapper): '' 
    shadowRoot.innerHTML = firstComponent
  }
}

const firstComponent = …
Run Code Online (Sandbox Code Playgroud)

javascript css font-face shadow-dom icon-fonts

7
推荐指数
1
解决办法
1648
查看次数

如何让导入的css对阴影dom中的元素产生影响?

假设我想使用阴影dom创建自定义元素.模板中的某些元素具有在链接的css文件中指定的类名.现在我想让css规则对元素产生影响.但由于影子dom风格的边界,我无法实现.

<link rel="stylesheet" type="text/css"
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<template id="blog-header">
<header>
    <h1>DreamLine</h1>
    <nav>
        <ul>
            <li><a href="#0">Tour</a></li>
            <li><a href="#0">Blog</a></li>
            <li><a href="#0">Contact</a></li>
            <li><a href="#0">Error</a></li>
            <li><a href="#0"><i class="fa fa-search"></i>Search</a></li>
        </ul>
    </nav>
</header>
</template>
<script type="text/javascript">
var importDoc = document.currentScript.ownerDocument;
var proto = Object.create(HTMLElement.prototype, {
    createdCallback: {
        value: function () {
            var t = importDoc.querySelector("#blog-header");
            var clone = document.importNode(t.content, true);
            this.createShadowRoot().appendChild(clone);
        }
    }
});
document.registerElement("blog-header", {
    prototype: proto
});
</script>
Run Code Online (Sandbox Code Playgroud)

你看,fa-search是一个在font-awesome css文件中定义的类,我该如何设置<i>元素的样式?

javascript web-component shadow-dom html5-template custom-element

5
推荐指数
1
解决办法
1135
查看次数