Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

dldc-packages/css-builder

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@dldc/css-builder

A utility for building CSS expressions like calc, clamp, etc.

Installation

deno add @dldc/css-builder

Usage

This library provides builder functions to construct CSS math expressions and a serialize function to convert them to CSS strings.

import { add, clamp, multiply, serialize } from "@dldc/css-builder";

// Build a calc expression
const result = add("10px", multiply(2, "5px"));
serialize(result); // "calc(10px + 2*5px)"

// Build a clamp expression
const responsive = clamp("10px", "5vw", "100px");
serialize(responsive); // "clamp(10px,5vw,100px)"

API

Builder Functions

All builder functions accept numbers, strings (like "10px", "50%", "var(--size)"), or other expressions.

add(...values)

Creates a calc() addition expression.

serialize(add(10, 20, 30)); // "calc(10 + 20 + 30)"
serialize(add("10px", "2rem")); // "calc(10px + 2rem)"

subtract(...values)

Creates a calc() subtraction expression.

serialize(subtract(100, 20, 10)); // "calc(100 - 20 - 10)"
serialize(subtract("100%", "20px")); // "calc(100% - 20px)"

multiply(...values)

Creates a calc() multiplication expression.

serialize(multiply(2, 3, 4)); // "calc(2*3*4)"
serialize(multiply("10px", 2)); // "calc(10px*2)"

divide(...values)

Creates a calc() division expression.

serialize(divide(100, 2, 5)); // "calc(100/2/5)"
serialize(divide("100%", 3)); // "calc(100%/3)"

min(...values)

Creates a min() expression.

serialize(min(10, "20px", "50%")); // "min(10,20px,50%)"

max(...values)

Creates a max() expression.

serialize(max(10, "20px", "50%")); // "max(10,20px,50%)"

clamp(min, preferred, max)

Creates a clamp() expression. Use "none" for unbounded min or max.

serialize(clamp(10, "50%", "100px")); // "clamp(10,50%,100px)"
serialize(clamp("none", "50%", "none")); // "clamp(none,50%,none)"

exp(value)

Creates an exp() expression.

serialize(exp(2)); // "exp(2)"
serialize(exp("2.5")); // "exp(2.5)"

pow(base, exponent)

Creates a pow() expression.

serialize(pow(2, 3)); // "pow(2,3)"
serialize(pow("var(--base)", "2")); // "pow(var(--base),2)"

var(name, fallback?)

Creates a var() expression for CSS custom properties.

import { add, var as cssVar } from "@dldc/css-builder";

serialize(cssVar("--space")); // "var(--space)"
serialize(cssVar("--gutter", add("8px", 2))); // "var(--gutter,8px + 2)"

number(value)

Creates a numeric calc value.

serialize(number(42)); // "42"
serialize(number("3.14")); // "3.14"

dimension(value, unit)

Creates a dimension calc value.

serialize(dimension(10, "px")); // "10px"
serialize(dimension("1.5", "rem")); // "1.5rem"

percentage(value)

Creates a percentage calc value.

serialize(percentage(50)); // "50%"
serialize(percentage("12.5")); // "12.5%"

raw(value)

Creates a raw calc value (no parsing).

serialize(raw("var(--size)")); // "var(--size)"

group(value)

Wraps a value or sum in parentheses, useful for preserving precedence in composed expressions.

serialize(group(value("10px"))); // "(10px)"

round(...)

Creates a round() expression. You can pass a rounding strategy as the first argument or omit it to use the default nearest strategy.

serialize(round(null, "var(--width)", "50px")); // "round(var(--width),50px)"
serialize(round("up", "101px", "var(--interval)")); // "round(up,101px,var(--interval))"
serialize(round("down", "10.5px")); // "round(down,10.5px)"

Convenience helpers are also available:

serialize(roundNearest("2.4px", "1px")); // "round(nearest,2.4px,1px)"
serialize(roundUp("101px", "5px")); // "round(up,101px,5px)"
serialize(roundDown("var(--height)", "8px")); // "round(down,var(--height),8px)"
serialize(roundToZero("-105px", 10)); // "round(to-zero,-105px,10)"

Composing Expressions

Builder functions can be composed together:

const result = add("10px", multiply(2, "5vw"), clamp(0, "20%", "50px"));
serialize(result);
// "calc(10px + 2*5vw + clamp(0,20%,50px))"

serialize(expression)

Converts an expression to a CSS string.

const expr = multiply(add(10, 20), 2);
const css = serialize(expr); // "calc((10 + 20)*2)"

maybeSerialize(expression)

Serializes an expression when it is defined. Returns undefined for null or undefined inputs.

const css = maybeSerialize(add("10px", "5px")); // "calc(10px + 5px)"
const optionalCss = maybeSerialize(undefined); // undefined

Scope

This library currently includes only the CSS functions and features that I personally needed. If you need additional CSS math functions or features, feel free to open an issue or submit a pull request - contributions are welcome!

About

A utility for building CSS expressions like `calc`, `clamp`, etc.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.