Skip to content

Files

Latest commit

bc0825d · Feb 23, 2025

History

History

postcss-sign-functions

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Feb 3, 2025
Nov 17, 2024
Nov 17, 2024
Nov 17, 2024
Nov 11, 2024
Nov 11, 2024
Feb 23, 2025
Nov 11, 2024
Nov 11, 2024
Feb 23, 2025
Nov 11, 2024
Feb 23, 2025
Nov 11, 2024

PostCSS Sign Functions PostCSS Logo

npm version Build Status Discord

Baseline Status CSS Standard Status

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 and abs 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 */);

PostCSS Sign Functions runs in all Node environments, with special instructions for:

⚠️ 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%);
}