首页 文章

Web组件中阴影dom的外部样式表

提问于
浏览
10

我正在学习带阴影根的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 回答

  • 9

    Shadow DOM不会对链接标记做出反应 . 事实上,当您使用链接标记时,Chrome 41会引发错误 . 我们通过使用硫化在构建时内联CSS类来解决这个限制 . 这在分离CSS和组件定义时非常方便 .

  • 0

    链接标签在Shadow DOM according to the spec中是惰性的 . 但是,您可以使用 @import ,尽管它有自己的性能问题 .

    Polymer解决这个问题的方式是查看 link 标签并使用 xhr 加载这些样式并应用它们 .

    edit:

    从事Shadow DOM工作的人都知道这个缺点,需要修复它 . 希望将来我们能够提供一个支持外部样式表的系统 .

相关问题