PostCSS plugin to process css unit.
npm install postcss-unit-processor  
PostCSS plugin to process css unit.
``shell`
$ npm install postcss postcss-unit-processor --save-dev
Use the processor function provided by the user to process the CSS unit. The default processor function is not to do any processing.
`js
var fs = require('fs');
var postcss = require('postcss');
var unitProcessor = require('postcss-unit-processor');
var css = fs.readFileSync('main.css', 'utf8');
var options = {
processor: (value, unit) => {
if (unit === 'px') {
return value / 2;
}
}
};
var processedCss = postcss(unitProcessor(options)).process(css).css;
fs.writeFile('main-new.css', processedCss, function (err) {
if (err) {
throw err;
}
console.log('New file written.');
});
`
`js
// Only process rem units
unitProcessor({
processor: (value, unit) => value,
unitList: ['rem']
})
// Process all units except rem
unitProcessor({
processor: (value, unit) => value,
unitList: ['!rem']
})
// Process only rem and px units
unitProcessor({
processor: (value, unit) => value,
unitList: ['rem', 'px']
})
`
Type: Object | Null`
Default:js`
{
processor: (value) => value,
unitPrecision: 5,
propList: ['*'],
unitList: ['*'],
selectorBlackList: [],
replace: true,
mediaQuery: false,
exclude: /node_modules/i,
customUnitList: []
}
- processor (Function) css unit processing function.value
- The plugin will call this function when the conditions are met, and pass the following parameters:
- value (Number): Unit value.
- unit (String): The name of the unit.
- node (Object): Current postCSS node object.
- root (Object): postCSS node root object.
- The function return value:
- If the Number is returned, the unit value is directly replaced, and the unit name remains unchanged.
- If an object is returned, the of the object replaces the value, and the unit replaces the name.unitPrecision
- (Number) The decimal numbers to allow the processed units to grow to.unitList
- (Array) The units that can be changed by the processor function.
- Values need to be exact matches.
- Use wildcard to enable all units. Example: ['']!
- Use to not match a unit. Example: ['*', '!rem']['rem', 'px', 'vw']
- Combine multiple units: propList
- (Array) The properties that can be changed by the processor function.
- Values need to be exact matches.
- Use wildcard to enable all properties. Example: ['']
- Use at the start or end of a word. (['position*'] will match background-position-y)!
- Use to not match a property. Example: ['*', '!letter-spacing']['', '!font']
- Combine the "not" prefix with the other prefixes. Example: selectorBlackList
- (Array) The selectors to ignore.['body']
- If value is string, it checks to see if selector contains the string.
- will match .body-class[/^body$/]
- If value is regexp, it checks to see if the selector matches the regexp.
- will match body but not .bodyreplace
- (Boolean) Replace rules instead of adding fallbacks.mediaQuery
- (Boolean) Allow processor function in media queries.exclude
- (String, Regexp, Function) The file path to ignore.'exclude'
- If value is string, it checks to see if file path contains the string.
- will match \project\postcss-unit-processor\exclude\path/exclude/i
- If value is regexp, it checks to see if file path matches the regexp.
- will match \project\postcss-unit-processor\exclude\pathfunction (file) { return file.indexOf('exclude') !== -1; }
- If value is function, you can use exclude function to return a true and the file will be ignored.
- the callback will pass the file path as a parameter, it should returns a Boolean result.
- customUnitList
- (Array) List of custom units to process in addition to default units.['dp', 'rpx']
- Values should be strings representing unit names (e.g., ).px
- Only non-empty strings containing letters and the percentage sign are accepted.
- Custom units are added to the default set of units like , rem, vw, etc.
`js
var gulp = require('gulp');
var postcss = require('gulp-postcss');
var autoprefixer = require('autoprefixer');
var unitProcessor = require('postcss-unit-processor');
gulp.task('css', function () {
var processors = [
autoprefixer({
browsers: 'last 1 version'
}),
unitProcessor({
processor: (value, unit) => {
if (unit === 'px') {
return value / 2;
}
}
})
];
return gulp.src(['build/css/*/.css'])
.pipe(postcss(processors))
.pipe(gulp.dest('build/css'));
});
`
#### Input/Output
`css``
// input
h1 {
margin: 0 0 20px;
font-size: 32px;
line-height: 1.2;
letter-spacing: 1px;
}
// output
h1 {
margin: 0 0 10px;
font-size: 16px;
line-height: 1.2;
letter-spacing: 0.5px;
}