我正在尝试使用 ShadowDomv1(使用https://github.com/webcomponents/webcomponentsjs和https://github.com/webcomponents/shadycss),但它不起作用。
ShadowDom 本身可以工作,但 css 没有被封装(正如我们可以看到的h2
css 规则)。
它在 Chrome 和 Safari 上按预期工作(但它们都支持 ShadowDomv1)。
我错过了什么还是不可能?
这里的jsbin:http ://jsbin.com/maqohoxowu/edit?html,output
和代码:
<script type="text/javascript" src="https://rawgithub.com/webcomponents/webcomponentsjs/master/webcomponents-hi-sd-ce.js"></script>
<style type="text/css">
h2 {
color: red;
border-bottom: 1px black dotted;
}
</style>
<h2>h2 red and dotted</h2>
<my-element>
</my-element>
<template id="myElementTemplate">
<style scope="my-element">
h2 {color: blue}
</style>
<div>
<h2>h2 blue and not dotted !</h2> <!-- Should not be dotted because of the encapsulation -->
</div>
</template>
<script type="text/javascript">
ShadyCSS.prepareTemplate(myElementTemplate, 'my-element');
class MyElement extends HTMLElement {
connectedCallback() {
ShadyCSS.styleElement(this);
if (!this.shadowRoot) {
this.attachShadow({mode: 'open'});
this.shadowRoot.appendChild(document.importNode(myElementTemplate.content, true));
}
ShadyCSS.styleElement(this);
}
}
customElements.define("my-element", MyElement);
</script>