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