- From: Rob Eisenberg <notifications@github.com>
- Date: Thu, 27 Jun 2024 11:45:35 -0700
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/939/2195449815@github.com>
I like `css-modules` and `specifier` approach. It works very well with how one would want to SSR a web component. If `css-modules` could also support the `@sheets` idea that would pretty much sum up what I'm looking for.
For example, common, rarely changing CSS could be multiple sheets in a single, cacheable file, while individual component css could be inlined. You might have something like this:
```html
<link rel="stylesheet" href="design-system.css" specifier="/design-system.css">
<my-element>
<template shadowrootmode="open" css-modules="/design-system.css#typography /my-element.css">
<script type="css" specifier="/my-element.css">
:host {
color: red
}
</script>
<!-- ... -->
</template>
</my-element>
<my-element>
<template shadowrootmode="open" css-modules="/design-system.css#typography /my-element.css">
<!-- ... -->
</template>
</my-element>
```
And in JS you could also do this:
```javascript
import { typography } from "./design-system.css" with { type: "css" };
import styles from "./my-element.css" with { type: "css" };
export class MyElement extends HTMLElement {
constructor() {
super();
// Elided: skip if DSD already exists.
this.attachShadow({ mode: "open" }).adoptedStyleSheets.push(typography, styles);
}
}
customElements.define("my-element", MyElement);
```
This should also work well for component authors who want to distribute their entire design system, providing a single, external CSS file that their customers can easily link, edit, or replace, without component code alterations needed.
--
Reply to this email directly or view it on GitHub:
https://github.com/WICG/webcomponents/issues/939#issuecomment-2195449815
You are receiving this because you are subscribed to this thread.
Message ID: <WICG/webcomponents/issues/939/2195449815@github.com>
Received on Thursday, 27 June 2024 18:45:39 UTC