gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:05 25 4
gpt4 key购买 nike

假设我想使用 shadow dom 创建一个自定义元素。模板中的某些元素具有在链接的 css 文件中指定的类名。现在我想让css规则对元素产生影响。但由于 shadow 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>

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

最佳答案

要在 Shadow DOM 中使用导入的字体(例如,FontAwesome),您应该:

1°声明字体

首先,包括 <link rel="stylesheet">主文档中的元素。它将声明一个 @font-face使字体可用于文档中所有文本的 CSS 规则。

2°导入样式表

然后,导入带有 @import url 的同一文件<template> 中的 CSS 规则节点制作.fa-* Shadow DOM 中可用的类选择器:

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<template id="blog-header">
<style>
@import url("https://use.fontawesome.com/releases/v5.7.1/css/all.css")
</style>
<header>
<h1>DreamLine</h1>
//...
</header>
</template>

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});
/* 
@font-face {
font-family: "FontAwesome";
src: url("https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome-webfont.woff2?v=4.5.0") format('woff2');
}
*/
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<template id="blog-header">
<style>
@import url("https://use.fontawesome.com/releases/v5.7.1/css/all.css")
</style>
<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>

<blog-header></blog-header>

2019 年更新

现在您可以使用 <link rel="stylesheet">而不是 @import url()在 Shadow DOM 中。

关于javascript - 如何让导入的 css 字体/图标对 shadow dom 中的元素产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com