Web 组件中阴影 dom 的外部样式表
External stylesheets for shadow dom in web components
我正在学习带有影子根的 Web 组件,但似乎无法在 google 上找到是否可以使用开箱即用的代码加载外部样式表?我还没有使用 polymer 或任何其他网络组件库(还)。代码如下:
<script src="../../libs/jquery-2.1.1.min.js"></script>
<script>
var hollaProto = Object.create(HTMLElement.prototype);
hollaProto.createdCallback = function () {
var shadow = this.createShadowRoot();
var content = document.querySelector('link[rel=import]').import.querySelector("div");
$("button[data-command=holla]", content).on("click", function () { alert("Holla!"); });
shadow.appendChild(content);
};
var hollaWidget = document.registerElement("holla-back", {
prototype: hollaProto
});
</script>
<div class="holla-back">
<button data-command="holla">Holla!</button>
</div>
如果我将我的 link 标签放在第一个脚本标签之上,我会为整个网络时代设置样式,而不是 Web 组件。
如果我把它放在 div.holla-back
下,它不会设置任何样式。
如何将外部样式表与 Web 组件一起使用?
Link 标签在 Shadow DOM according to the spec 中是惰性的。但是,您可以使用 @import
,尽管它有其自身的性能问题。
Polymer 解决此问题的方法是查看 link
标签并使用 xhr
加载并应用这些样式。
编辑:
从事 Shadow DOM 工作的人们已经意识到这个缺点并且需要修复。希望将来我们能想出一个支持外部样式表的系统。
Shadow DOM 对 link 标签没有反应。事实上,当您使用 link 标签时,Chrome 41 会抛出一个错误。我们通过在构建时使用 vulcanize 内联 CSS 类 来解决该限制。事实证明,这对于分离 CSS 和组件定义非常方便。
我正在学习带有影子根的 Web 组件,但似乎无法在 google 上找到是否可以使用开箱即用的代码加载外部样式表?我还没有使用 polymer 或任何其他网络组件库(还)。代码如下:
<script src="../../libs/jquery-2.1.1.min.js"></script>
<script>
var hollaProto = Object.create(HTMLElement.prototype);
hollaProto.createdCallback = function () {
var shadow = this.createShadowRoot();
var content = document.querySelector('link[rel=import]').import.querySelector("div");
$("button[data-command=holla]", content).on("click", function () { alert("Holla!"); });
shadow.appendChild(content);
};
var hollaWidget = document.registerElement("holla-back", {
prototype: hollaProto
});
</script>
<div class="holla-back">
<button data-command="holla">Holla!</button>
</div>
如果我将我的 link 标签放在第一个脚本标签之上,我会为整个网络时代设置样式,而不是 Web 组件。
如果我把它放在 div.holla-back
下,它不会设置任何样式。
如何将外部样式表与 Web 组件一起使用?
Link 标签在 Shadow DOM according to the spec 中是惰性的。但是,您可以使用 @import
,尽管它有其自身的性能问题。
Polymer 解决此问题的方法是查看 link
标签并使用 xhr
加载并应用这些样式。
编辑:
从事 Shadow DOM 工作的人们已经意识到这个缺点并且需要修复。希望将来我们能想出一个支持外部样式表的系统。
Shadow DOM 对 link 标签没有反应。事实上,当您使用 link 标签时,Chrome 41 会抛出一个错误。我们通过在构建时使用 vulcanize 内联 CSS 类 来解决该限制。事实证明,这对于分离 CSS 和组件定义非常方便。