automatically keep css selectors unique
npm install postcss-combine-duplicated-selectors



Automatically detects and combines duplicated css selectors so you don't have to
:smile:
In order to use this you will need to have postcss installed. Depending on whether or not you want to use the CLI you need to install postcss-cli.
``bash`
npm install --save-dev postcss postcss-combine-duplicated-selectorsor
yarn add --dev postcss postcss-combine-duplicated-selectors
`js
'use strict';
const fs = require('fs');
const postcss = require('postcss');
const css = fs.readFileSync('src/app.css');
postcss([require('postcss-combine-duplicated-selectors')])
.process(css, {from: 'src/app.css', to: 'app.css'})
.then((result) => {
fs.writeFileSync('app.css', result.css);
if (result.map) fs.writeFileSync('app.css.map', result.map);
});
`
`sh`
postcss style.css --use postcss-combine-duplicated-selectors --output newcss.css
Input
`css`
.module {
color: green;
}
.another-module {
color: blue;
}
.module {
background: red;
}
.another-module {
background: yellow;
}
Output
`css`
.module {
color: green;
background: red;
}
.another-module {
color: blue;
background: yellow;
}
Duplicated properties can optionally be combined.
Set the removeDuplicatedProperties option to true to enable.
`js
const postcss = require('postcss');
const combineSelectors = require('postcss-combine-duplicated-selectors');
postcss([combineSelectors({removeDuplicatedProperties: true})]);
`
When enabled the following css
`css`
.a {
height: 10px;
background: orange;
background: rgba(255, 165, 0, 0.5);
}
will combine into
`css`
.a {
height: 10px;
background: rgba(255, 165, 0, 0.5);
}
In order to limit this to only combining properties when the values are equal, set the removeDuplicatedValues option to true instead. This could clean up duplicated properties, but allow for conscious duplicates such as fallbacks for custom properties.
`js
const postcss = require('postcss');
const combineSelectors = require('postcss-combine-duplicated-selectors');
postcss([combineSelectors({removeDuplicatedValues: true})]);
`
This will transform the following css
`css
.a {
height: 10px;
}
.a {
width: 20px;
background: var(--custom-color);
background: rgba(255, 165, 0, 0.5);
}
`
into
`css``
.a {
height: 10px;
width: 20px;
background: var(--custom-color);
background: rgba(255, 165, 0, 0.5);
}
If you have code with media queries, pass code through _postcss-combine-media-query_ or _css-mquery-packer_ before _postcss-combine-duplicated-selectors_ to ensure optimal results.