我正在学习带有影子根的网络组件,如果可以通过开箱即用的代码加载外部样式表,那么它似乎无法在Google上找到?我还没有使用聚合物或任何其他Web组件库(还)。代码如下:
<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>
如果我将链接标记放在第一个脚本标记的上方,我会调整整个网络时代的样式,而不是网页组件。
如果我把它放在div.holla-back
之下,它就不会有任何风格。
如何将外部样式表与Web组件一起使用?
答案 0 :(得分:9)
链接标记在Shadow DOM according to the spec中是惰性的。但是,您可以使用@import
,但这有其自身的性能问题。
Polymer解决这个问题的方法是查看link
标记并使用xhr
加载这些样式并应用它们。
修改强>
从事Shadow DOM工作的人都知道这个缺点,需要修复它。希望将来我们能够提供一个支持外部样式表的系统。
答案 1 :(得分:0)
Shadow DOM不会对链接标记做出反应。事实上,当您使用链接标记时,Chrome 41会引发错误。我们通过使用硫化在构建时内联CSS类来解决这个限制。这对于分离CSS和组件定义非常方便。