gpt4 book ai didi

javascript - 使用 polyfill 的 Shadow DOM v1 样式

转载 作者:行者123 更新时间:2023-11-30 15:30:33 25 4
gpt4 key购买 nike

我正在尝试仅使用 ShadowDOM v1(没有 Polymer 或其他 Web 组件),但我无法使用 polyfill 来设置样式。

特殊的 :host::slotted CSS 选择器不起作用。

我试过 various polyfills ,但是 TBH,我有点迷路了。我看过this question ,但它使用的是自定义元素和模板。我的场景没有这些。

任何人都可以帮助我使这段代码在 Firefox 或 Edge 中工作吗? - 具体来说,您应该看到三种颜色:蓝色、红色和黄色,但只有红色有效。

const shadowHtml =
`<style>
:host {
background: yellow;
}
.inside {
background: red;
margin: 10px;
}
::slotted(div[slot="content"]) {
background: blue;
color: white;
}
</style>
<div>
<p>i am yellow</p>
<div class=inside>i am red</div>
<slot name="content"></slot>
</div>`;


const root = document.querySelector('#root');
const shadow = root.attachShadow({ mode: 'open' });
shadow.innerHTML = shadowHtml;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Shadow DOM v1 Test</title>
<script src="https://rawgit.com/webcomponents/webcomponentsjs/v1/webcomponents-lite.js"></script>
</head>
<body>
<div id=root>
<div slot="content">
<p>I am blue</p>
</div>
</div>
</body>
</html>

最佳答案

webcomponents-lite.js “v1”现在嵌入了一个 Shadow DOM v1 polyfill:

  • ShadyDOM提供 attachShadow() 的垫片
  • ShadyCSS模拟 :host 的对象和 ::slotted() .

请注意,要使用它,您必须将模板字符串放在 <template> 中元素才能调用ShadyCSS.prepareTemplate()

const makeTemplate = function (strings) {
const template = document.createElement('template');
template.innerHTML = strings[0];
return template;
}

const shadowHtml =
makeTemplate`<style>
:host {
background: yellow;
}
.inside {
background: red;
margin: 10px;
}
::slotted(div[slot="content"]) {
background: blue;
color: white;
}
</style>
<div>
<p>i am yellow</p>
<div class=inside>i am red</div>
<slot name="content"></slot>
</div>`
ShadyCSS.prepareTemplate(shadowHtml, 'div');

const root = document.querySelector('#root');
const shadow = root.attachShadow({ mode: 'open' });
shadow.innerHTML = shadowHtml.innerHTML;
<script src="https://cdn.rawgit.com/webcomponents/shadydom/master/shadydom.min.js"></script>
<script src="https://cdn.rawgit.com/webcomponents/shadycss/master/scoping-shim.min.js"></script>

<div id=root>
<div slot="content">
<p>I am blue</p>
</div>
</div>

关于javascript - 使用 polyfill 的 Shadow DOM v1 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com