Normalize CSS animation/transition timing functions by converting verbose cubic-bezier() and steps() functions to shorter named equivalents.
npx @tessl/cli install tessl/npm-postcss-normalize-timing-functions@7.0.0postcss-normalize-timing-functions is a PostCSS plugin that normalizes CSS animation and transition timing functions by converting verbose cubic-bezier() and steps() functions to shorter named equivalents, reducing file size and improving readability.
npm install postcss-normalize-timing-functionsconst postcssNormalizeTimingFunctions = require("postcss-normalize-timing-functions");For TypeScript/ESM usage:
import postcssNormalizeTimingFunctions from "postcss-normalize-timing-functions";const postcss = require("postcss");
const postcssNormalizeTimingFunctions = require("postcss-normalize-timing-functions");
// Apply the plugin to CSS
const result = await postcss([postcssNormalizeTimingFunctions()])
.process(cssString, { from: undefined });
console.log(result.css);Input CSS:
div {
animation: fade 3s cubic-bezier(0.42, 0, 1, 1);
transition: color 0.5s steps(1, start);
}Output CSS:
div {
animation: fade 3s ease-in;
transition: color 0.5s step-start;
}Creates a PostCSS plugin instance that normalizes timing functions in CSS declarations.
/**
* Creates a PostCSS plugin that normalizes timing functions
* @returns PostCSS plugin instance
*/
function pluginCreator(): import("postcss").Plugin;The plugin processes CSS declarations matching the regex pattern /^(-\w+-)?(animation|transition)(-timing-function)?$/i:
animation and animation-timing-function propertiestransition and transition-timing-function properties-webkit-animation, -moz-transition-timing-function)/**
* PostCSS plugin marker indicating this is a valid PostCSS plugin
*/
pluginCreator.postcss: true;The plugin converts cubic-bezier functions to named timing function equivalents:
cubic-bezier(0.25, 0.1, 0.25, 1) → easecubic-bezier(0, 0, 1, 1) → linearcubic-bezier(0.42, 0, 1, 1) → ease-incubic-bezier(0, 0, 0.58, 1) → ease-outcubic-bezier(0.42, 0, 0.58, 1) → ease-in-outThe plugin optimizes steps() functions:
steps(1, start) or steps(1, jump-start) → step-startsteps(1, end) or steps(1, jump-end) → step-endsteps(n, end) or steps(n, jump-end) → steps(n) (removes redundant end parameter)All transformations work regardless of case:
CUBIC-BEZIER(0.25, 0.1, 0.25, 1) → easeSTEPS(1, START) → step-startThis plugin requires no configuration options. It works automatically when added to your PostCSS plugin list.
The plugin safely handles:
// With PostCSS CLI configuration file
module.exports = {
plugins: [
require("postcss-normalize-timing-functions")(),
// other plugins...
]
};
// With build tools (webpack, etc.)
const postcss = require("postcss");
postcss([
require("postcss-normalize-timing-functions")(),
])
.process(css, { from: "input.css", to: "output.css" })
.then(result => {
console.log(result.css);
});Full TypeScript support is provided via type definitions that properly integrate with PostCSS's plugin system.
declare function pluginCreator(): import("postcss").Plugin;
declare namespace pluginCreator {
let postcss: true;
}
export = pluginCreator;