@csstools/postcss-sign-functions
v1.1.0
Published
Use sign and abs functions in CSS
Downloads
203,974
Readme
PostCSS Sign Functions
npm install @csstools/postcss-sign-functions --save-dev
PostCSS Sign Functions lets you use the sign
and abs
functions, following the CSS Values 4 specification.
.sign {
z-index: sign(-10px);
}
.sign {
z-index: sign(0);
}
.sign {
z-index: sign(10px);
}
.abs {
z-index: abs(-10px);
}
.abs {
z-index: abs(0);
}
.abs {
z-index: abs(10px);
}
.abs {
z-index: abs(10%);
}
/* becomes */
.sign {
z-index: -1;
}
.sign {
z-index: 0;
}
.sign {
z-index: 1;
}
.abs {
z-index: 10px;
}
.abs {
z-index: 0;
}
.abs {
z-index: 10px;
}
.abs {
z-index: max((10%), -1 * (10%));
}
[!NOTE] The utility of static fallbacks for
sign
andabs
is limited. The most interesting values are variables and dynamic values (e.g. those containing%
). It is impossible to generate static fallbacks in a build process for values that are dynamic on the client.
Usage
Add PostCSS Sign Functions to your project:
npm install postcss @csstools/postcss-sign-functions --save-dev
Use it as a PostCSS plugin:
const postcss = require('postcss');
const postcssSignFunctions = require('@csstools/postcss-sign-functions');
postcss([
postcssSignFunctions(/* pluginOptions */)
]).process(YOUR_CSS /*, processOptions */);
⚠️ About custom properties
Given the dynamic nature of custom properties it's impossible to know what the variable value is, which means the plugin can't compute a final value for the stylesheet.
Because of that, any usage that contains a var
is skipped.
Options
preserve
The preserve
option determines whether the original notation
is preserved. By default, it is not preserved.
postcssSignFunctions({ preserve: true })
.sign {
z-index: sign(-10px);
}
.sign {
z-index: sign(0);
}
.sign {
z-index: sign(10px);
}
.abs {
z-index: abs(-10px);
}
.abs {
z-index: abs(0);
}
.abs {
z-index: abs(10px);
}
.abs {
z-index: abs(10%);
}
/* becomes */
.sign {
z-index: -1;
z-index: sign(-10px);
}
.sign {
z-index: 0;
z-index: sign(0);
}
.sign {
z-index: 1;
z-index: sign(10px);
}
.abs {
z-index: 10px;
z-index: abs(-10px);
}
.abs {
z-index: 0;
z-index: abs(0);
}
.abs {
z-index: 10px;
z-index: abs(10px);
}
.abs {
z-index: max((10%), -1 * (10%));
z-index: abs(10%);
}