Awesome
postcss-apply
PostCSS plugin enabling custom property sets references
Refer to postcss-custom-properties
for DOMless limitations.
Web Platform status
Spec (editor's draft): https://tabatkins.github.io/specs/css-apply-rule
Browser support: https://www.chromestatus.com/feature/5753701012602880
:warning: The @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.
Refer to following links for more infos:
- https://discourse.wicg.io/t/needed-new-champion-for-css-apply-rule/2012
- https://github.com/w3c/webcomponents/issues/300#issuecomment-276210974
- http://www.xanthir.com/b4o00
- https://github.com/w3c/csswg-drafts/issues/1047
- https://chromium.googlesource.com/chromium/src/+/5874fca7324e4523a4bdecc8999bdadfdb6c4eff
Installation
npm install postcss-apply --save-dev
Usage
const fs = require('fs');
const postcss = require('postcss');
const apply = require('postcss-apply');
let input = fs.readFileSync('input.css', 'utf8');
postcss()
.use(apply)
.process(input)
.then(result => {
fs.writeFileSync('output.css', result.css);
});
Examples
In CSS declared sets
/* 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;
}
In JS declared sets
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;
}
options
preserve
type: Boolean
default: false
Allows for keeping resolved declarations and @apply
rules alongside.
sets
type: { [customPropertyName: string]: Object | string }
default: {}
Allows you to pass an object or string of custom property sets for :root
.
These definitions will be prepended, in such overridden 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.
Credits
Licence
postcss-apply is unlicensed.