- From: Matt Whitlock <notifications@github.com>
- Date: Thu, 18 Apr 2024 00:43:03 -0700
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/609/2063230563@github.com>
In case anyone else searching for an answer comes across this thread, here is what I ended up doing, which works great:
```javascript
const copiedStyleSheet = new CSSStyleSheet();
document.addEventListener("DOMContentLoaded", () => {
if (copiedStyleSheet.replace)
copiedStyleSheet.replace(
[...document.styleSheets].flatMap(
sheet => [...sheet.cssRules].map(rule => rule.cssText)
).join(" ")
);
else
for (const sheet of document.styleSheets)
for (const rule of sheet.cssRules)
copiedStyleSheet.insertRule(rule.cssText, copiedStyleSheet.cssRules.length);
});
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
this.shadowRoot.adoptedStyleSheets = [copiedStyleSheet];
}
}
```
It's wasteful in that it constructs an independent stylesheet containing copies of all of `document`'s stylesheet rules, but at least all shadow roots can share the one `copiedStyleSheet` instance. It would be really fantastic if we could do `shadowRoot.adoptedStyleSheets = [...document.styleSheets]`, but alas, the spec inexplicably does not allow that.
--
Reply to this email directly or view it on GitHub:
https://github.com/WICG/webcomponents/issues/609#issuecomment-2063230563
You are receiving this because you are subscribed to this thread.
Message ID: <WICG/webcomponents/issues/609/2063230563@github.com>
Received on Thursday, 18 April 2024 07:43:07 UTC