postcss-unit-processor
v1.0.1
Published
PostCSS plugin to process css unit.
Downloads
15
Readme
postcss-unit-processor
PostCSS plugin to process css unit.
Install
$ npm install postcss postcss-unit-processor --save-dev
Usage
Use the processor function provided by the user to process the CSS unit. The default processor function is not to do any processing.
Input/Output
// input
h1 {
margin: 0 0 20px;
font-size: 32px;
line-height: 1.2;
letter-spacing: 1px;
}
// output
h1 {
margin: 0 0 20px;
font-size: 32px;
line-height: 1.2;
letter-spacing: 1px;
}
Example
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.');
});
options
Type: Object | Null
Default:
{
processor: (value) => value,
unitPrecision: 5,
propList: ['*'],
selectorBlackList: [],
replace: true,
mediaQuery: false,
exclude: /node_modules/i
}
processor
(Function) css unit processing function.- 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
value
of the object replaces the value, and theunit
replaces the name.
- The plugin will call this function when the conditions are met, and pass the following parameters:
unitPrecision
(Number) The decimal numbers to allow the processed units to grow to.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 matchbackground-position-y
) - Use
!
to not match a property. Example:['*', '!letter-spacing']
- Combine the "not" prefix with the other prefixes. Example:
['*', '!font*']
selectorBlackList
(Array) The selectors to ignore.- If value is string, it checks to see if selector contains the string.
['body']
will match.body-class
- If value is regexp, it checks to see if the selector matches the regexp.
[/^body$/]
will matchbody
but not.body
- If value is string, it checks to see if selector contains the string.
replace
(Boolean) Replace rules instead of adding fallbacks.mediaQuery
(Boolean) Allow processor function in media queries.exclude
(String, Regexp, Function) The file path to ignore.- If value is string, it checks to see if file path contains the string.
'exclude'
will match\project\postcss-unit-processor\exclude\path
- If value is regexp, it checks to see if file path matches the regexp.
/exclude/i
will match\project\postcss-unit-processor\exclude\path
- 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.
function (file) { return file.indexOf('exclude') !== -1; }
- If value is string, it checks to see if file path contains the string.
Use with gulp-postcss and autoprefixer
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'));
});