我正在将包含模板的网络组件导入index.html
。为什么my-template
中的样式会对index.html
中的段落产生影响。
换句话说,为什么index.html
中的所有文字都呈现为蓝色?
我认为模板中的CSS在某种程度上是命名空间的。情况不是这样吗?
index.html
<!DOCTYPE html>
<html>
<head>
<style> p { color: red; }</style>
<link rel="import" href="my-component.html"/>
</head>
<body>
<p>FOO</p>
<my-component></my-component>
</body>
</html>
my-component.html
<template id="my-template">
<style>
p {
color: blue;
}
</style>
<p class="foo">BAR</p>
</template>
<script>
(function() {
var importDoc, myComponentProto;
importDoc = document.currentScript.ownerDocument;
myComponentProto = Object.create(HTMLElement.prototype);
myComponentProto.createdCallback = function() {
var template1, template1Clone;
template1 = importDoc.querySelector('#my-template');
template1Clone = importDoc.importNode(template1.content, true);
this.appendChild(template1Clone); // Insert into the DOM.
};
document.registerElement('my-component', {
prototype: myComponentProto
});
}())
</script>
答案 0 :(得分:2)
我认为你想要的是scoped stylesheet。尝试添加scoped
属性:
<style scoped>
p {
color: blue;
}
</style>
答案 1 :(得分:1)
您应该首先创建阴影根以将模板dom隐藏到阴影中:
myComponentProto.createdCallback = function() {
var shadow = this.createShadowRoot();
shadow.appendChild(importDoc.querySelector('#my-template').content);
};