postcss-variants
Version:
PostCSS plugin for generating functional css variants.
126 lines (104 loc) • 2.28 kB
Markdown
# PostCSS Variants
[PostCSS] plugin for generating variants of functional CSS. Variant types are pluggable with included plugins to generate `responsive` and `hover` variants.
[PostCSS]: https://github.com/postcss/postcss
Here's an example using the built-in hover variant.
```css
@variants hover {
.black { color: black; }
}
```
```css
.black { color: black; }
.hover-black:hover { color: black; }
```
Here's an example using the built-in responsive variant.
```css
@variants responsive {
.black { color: black; }
}
```
```css
.black { color: black; }
@media (--breakpoint-sm) {
.black-sm { color: black; }
}
@media (--breakpoint-md) {
.black-md { color: black; }
}
@media (--breakpoint-lg) {
.black-lg { color: black; }
}
@media (--breakpoint-xl) {
.black-xl { color: black; }
}
```
They can be combined to generate both.
```css
@variants hover, responsive {
.black { color: black; }
}
```
```css
.black { color: black; }
.hover-black:hover { color: black; }
@media (--breakpoint-sm) {
.black-sm { color: black; }
}
@media (--breakpoint-md) {
.black-md { color: black; }
}
@media (--breakpoint-lg) {
.black-lg { color: black; }
}
@media (--breakpoint-xl) {
.black-xl { color: black; }
}
```
They can also be nested to apply them combinatorially.
```css
@variants responsive {
@variants hover {
.black { color: black; }
}
}
```
```css
.black { color: black; }
.hover-black:hover { color: black; }
@media (--breakpoint-sm) {
.black-sm { color: black; }
.hover-black-sm:hover { color: black; }
}
@media (--breakpoint-md) {
.black-md { color: black; }
.hover-black-md:hover { color: black; }
}
@media (--breakpoint-lg) {
.black-lg { color: black; }
.hover-black-lg:hover { color: black; }
}
@media (--breakpoint-xl) {
.black-xl { color: black; }
.hover-black-xl:hover { color: black; }
}
```
## Usage
Install package:
```sh
npm install --save-dev postcss-variants
```
Use postcss-variants as a plugin to PostCSS:
```js
postcss([
require('postcss-variants')()
]).process(YOUR_CSS)
```
## Customize transform function
Use the transform param to customize the selector structure
```js
postcss([
require('postcss-variants')({
transform: (selector, suffix) => `${suffix}-${selector}`
})
]).process(YOUR_CSS)
```