PostCSS color-mod() Function lets you modify colors using the color-mod()
function in CSS, following the CSS Color Module Level 4 specification.
:root {
--brand-red: color-mod(yellow blend(red 50%));
--brand-red-hsl: color-mod(yellow blend(red 50% hsl));
--brand-red-hwb: color-mod(yellow blend(red 50% hwb));
--brand-red-dark: color-mod(red blackness(20%));
}
/* becomes */
:root {
--brand-red: rgb(255, 127.5, 0);
--brand-red-hsl: rgb(255, 127.5, 255);
--brand-red-hwb: rgb(255, 127.5, 0);
--brand-red-dark: rgb(204, 0, 0);
}
/* or, using stringifier(color) { return color.toString() } */
:root {
--brand-red: rgb(100% 50% 0% / 100%);
--brand-red-hsl: hsl(30 100% 50% / 100%);
--brand-red-hwb: hwb(30 0% 0% / 100%);
--brand-red-dark: hwb(0 0% 20% / 100%);
}
The color-mod()
function accepts rgb()
, legacy rgb()
, rgba()
, hsl()
,
legacy hsl()
, hsla()
, hwb()
, and color-mod()
colors, as well as 3, 4,
6, and 8 digit hex colors, and named colors without the need for additional
plugins.
Implemention details are available in the specification.
Because CSS variables (var()
) cannot not be inferred at compilation, they
will need to be compiled beforehand.
The color-mod()
function accepts red()
, green()
, blue()
, a()
/
alpha()
, rgb()
, h()
/ hue()
, s()
/ saturation()
, l()
/
lightness()
, w()
/ whiteness()
, b()
/ blackness()
, tint()
,
shade()
, blend()
, blenda()
, and contrast()
color adjusters.
Implemention details are available in the specification.
Add PostCSS color-mod() Function to your build tool:
npm install postcss-color-mod-function --save-dev
Use PostCSS color-mod() Function to process your CSS:
import postcssColorMod from 'postcss-color-mod-function';
postcssColorMod.process(YOUR_CSS);
Add PostCSS to your build tool:
npm install postcss --save-dev
Use PostCSS color-mod() Function as a plugin:
import postcss from 'postcss';
import postcssColorMod from 'postcss-color-mod-function';
postcss([
postcssColorMod(/* options */)
]).process(YOUR_CSS);
Add Gulp PostCSS to your build tool:
npm install gulp-postcss --save-dev
Use PostCSS color-mod() Function in your Gulpfile:
import postcss from 'gulp-postcss';
import postcssColorMod from 'postcss-color-mod-function';
gulp.task('css',
() => gulp.src('./src/*.css')
.pipe( postcss([ postcssColorMod(/* options */) ]) )
.pipe( gulp.dest('.') );
Add Grunt PostCSS to your build tool:
npm install grunt-postcss --save-dev
Use PostCSS color-mod() Function in your Gruntfile:
import postcssColorMod from 'postcss-color-mod-function';
grunt.loadNpmTasks('grunt-postcss');
grunt.initConfig({
postcss: {
options: {
use: [ postcssColorMod(/* options */) ]
},
dist: {
src: '*.css'
}
}
});
The stringifier
option defines how transformed colors will be produced in CSS.
By default, legacy rbg()
and rgba()
colors are produced, but this can be
easily updated to support [CSS Color Module Level 4 colors] colors.
import postcssColorMod from 'postcss-color-mod-function';
postcssColorMod({
stringifier(color) {
return color.toString(); // use CSS Color Module Level 4 colors (rgb, hsl, hwb)
}
});
Future major releases of PostCSS color-mod() Function may reverse this functionality so that CSS Color Module Level 4 colors are produced by default.
The unresolved
option defines how unresolved functions and arguments should
be handled. The available options are throw
, warn
, and ignore
. The
default option is to throw
.
If ignore
is used, the color-mod()
function will remain unchanged.
import postcssColorMod from 'postcss-color-mod-function';
postcssColorMod({
unresolved: 'ignore' // ignore unresolved color-mod() functions
});