PostCSS plugin enabling custom property sets references
Refers to postcss-custom-properties for DOMless limitations.
Spec (editor's draft): https://tabatkins.github.io/specs/css-apply-rule
Browser support: https://www.chromestatus.com/feature/5753701012602880
@apply rule and custom property sets most likely won't get any more support from browser vendors as the spec is yet considered deprecated and alternative solutions are being discussed.
Refers to following links for more infos:
- https://discourse.wicg.io/t/needed-new-champion-for-css-apply-rule/2012
- WICG/webcomponents#300 (comment)
- http://www.xanthir.com/b4o00
- w3c/csswg-drafts#1047
npm install postcss-apply --save-dev
const fs = require('fs');
const postcss = require('postcss');
const apply = require('postcss-apply');
const input = fs.readFileSync('input.css', 'utf8');
postcss()
.use(apply)
.process(input)
.then((result) => {
fs.writeFileSync('output.css', result.css);
});/* input */
:root {
--toolbar-theme: {
background-color: rebeccapurple;
color: white;
border: 1px solid green;
};
}
.Toolbar {
@apply --toolbar-theme;
}/* output */
.Toolbar {
background-color: rebeccapurple;
color: white;
border: 1px solid green;
}const themes = {
/* Set names won't be transformed, just `--` will be prepended. */
'toolbar-theme': {
/* Declaration properties can either be camel or kebab case. */
backgroundColor: 'rebeccapurple',
color: 'white',
border: '1px solid green',
},
};
[...]
postcss().use(apply({ sets: themes }))
[...]/* input */
.Toolbar {
@apply --toolbar-theme;
}/* output */
.Toolbar {
background-color: rebeccapurple;
color: white;
border: 1px solid green;
}type: Boolean
default: false
Allows for keeping resolved declarations and @apply rules alongside.
type: Object
default: {}
Allows you to pass an object of custom property sets for :root.
These definitions will be prepended, in such overriden by the one declared in CSS if they share the same name.
The keys are automatically prefixed with the CSS -- to make it easier to share sets in your codebase.
postcss-apply is unlicensed.