Import CSS files as tagged template literals
npm install lit-css-loaderWebpack loader to import css files as JavaScript tagged-template literal objects.
> _The "Lit" stands for "Literal"_
You can use it to import CSS for various libraries like lit-element, @microsoft/fast-element, or others.
No. This is an optional package who's sole purpose is to make it easier to write
CSS-in-CSS while working on lit-element projects. You can just as easily write
your CSS in some 'styles.css.js' modules a la:
``js:host { display: block; }
import { css } from 'lit-element';
export default css;`
And this may actually be preferred.
Hopefully this package will become quickly obsolete when the [CSS Modules
Proposal][modulesprop] (or something like it) is accepted and implemented.
In the mean time, enjoy importing your CSS into your component files.
| Name | Accepts | Default |
| ----------- | ----------------------------------------------------------------------------- | -------------- |
| include | Array of glob of files to include. | ['*/.css'] |exclude
| | Array of glob of files to exclude. | undefined |cssnano
| | Boolean or Object of [cssnano][nanoopts] options. | false |specifier
| | Package to import css from | lit |tag
| | Name of the template-tag function | css |transform
| | Optional function (sync or async) which transforms css sources (e.g. postcss) | x => x |
npm i -D lit-css-loader
`jslit
module: {
rules: [
{
test: /\.css$/,
loader: 'lit-css-loader',
options: {
specifier: 'lit-element' // defaults to `
}
}
]
}
`js
import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';
import style from './styled-el.css';
@customElement('styled-el')
export class extends LitElement {
static styles = [style]
render() {
return html
such style. very win
;
}
}
`$3
To load scss files:
1. Adjust the
test clause of the module rule as needed (e.g)
2. Pass a transform function to the loader options`js
const Sass = require('sass');
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
loader: 'lit-css-loader',
options: {
transform: (data, { filePath }) =>
Sass.renderSync({ data, file: filePath })
.css.toString(),
}
}
]
}
}
`Similarly, to transform sources using PostCSS, specify a
transform function:`js
const postcss = require('postcss');
const postcssNesting = require('postcss-nesting');const processor = postcss(postcssNesting());
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
loader: 'lit-css-loader',
options: {
transform: (css, { filePath }) =>
processor.process(css, { from: filePath })
.css
}
}
]
}
}
``Looking for rollup? rollup-plugin-lit-css
Looking for esbuild? esbuild-plugin-lit-css
Looking for typescript? typescript-transform-lit-css
[wds]: https://modern-web.dev/docs/dev-server/
[modulesprop]: https://github.com/w3c/webcomponents/issues/759
[nanoopts]: https://cssnano.co/docs/config-file/#configuration-options