【发布时间】:2018-03-25 22:40:00
【问题描述】:
有没有办法将 :host element css 样式继承到 shadow DOM 中? 原因是如果我们开始开发 Web 组件,每个 Web 组件的样式必须在页面上保持一致。
页面可以有全局css,这个全局css样式可以继承到shadow DOM。有 ::shadow 和 /deep/,但现在已弃用。
或者,这是违反模式的吗?如果有,为什么?
我找到了这个 Q/A,但对我来说似乎已经过时了。 Can Shadow DOM elements inherit CSS?
http://plnkr.co/edit/qNSlM0?p=preview
const el = document.querySelector('my-element');
el.attachShadow({mode: 'open'}).innerHTML = `
<!-- SEE THIS 'red' is not red -->
<p class="red">This is defined in Shadow DOM. I want this red with class="red"</p>
<slot></slot>
`;
.red {
padding: 10px;
background: red;
font-size: 25px;
text-transform: uppercase;
color: white;
}
<!DOCTYPE html>
<html>
<head>
<!-- web components polyfills -->
<script src="//unpkg.com/@webcomponents/custom-elements"></script>
<script src="//unpkg.com/@webcomponents/webcomponentsjs"></script>
<script src="//unpkg.com/@webcomponents/shadydom"></script>
<script src="//unpkg.com/@webcomponents/shadycss@1.0.6/apply-shim.min.js"></script>
</head>
<body>
<div>
<p class="red">I'm outside the element (big/white)</p>
<my-element>
<p class="red">Light DOM content is also affected.</p>
</my-element>
<p class="red">I'm outside the element (big/white)</p>
</div>
</body>
</html>
【问题讨论】:
-
您是否考虑过使用 CSS 变量和 mixins 来代替?如果您公开它们,它们将允许您覆盖或配置组件
标签: html shadow-dom