A type scale generator heavily inspired by the Typographic Scale Calculator from Jean-Lou Désiré.
npm install --save-dev @gud/typescaleGenerate CSS for use with Tailwind CSS v4 or any CSS framework:
# Basic usage
npx typescale
# Remote usage
npx @gud/typescale
# Custom hierarchy
npx typescale --hierarchy xs sm base lg xl 2xl 3xl 4xl 5xl 6xl
# Advanced usage
npx typescale \
--hierarchy xs sm base lg xl 2xl 3xl 4xl 5xl 6xl \
--multiplier 1.618 \
--steps 4 \
--unit px \
--output ./typescale.css--help: Show help information.--hierarchy(-h): Hierarchy of font styles to generate. (default:footnote, caption, p, h6, h5, h4, h3, h2, h1)--base(-b): Base font size. (default:16)--baseIndex(-i): Index of the base font size in the hierarchy. (default:2)--multiplier(-m): Increment multiplier. (default:2)--steps(-s): Steps between multiples. (default:5)--round(-r): Font size rounding factor. (default:0.25)--roundDirection(-d): Rounding method: up, down, nearest. (default:up)--gridHeight(-g): Line height grid size. (default:8)--lineHeightMultiplier(-l): Line height multiplier. (default:1.3)--unit(-u): CSS unit to append to font sizes and line heights. (default:rem)--prefix(-p): Prefix for utility classes.--tailwind(-t): Generate CSS with Tailwind CSS directives. (default:false)--output(-o): Output file path. (default:typescale.css)
Since Tailwind CSS v4 no longer uses JavaScript configuration files, use the CLI to generate CSS at build time:
-
Add a generation script to your build process:
{ "scripts": { "generate:typescale": "typescale --tailwind --output src/styles/typescale.css", "build": "npm run generate:typescale && <your-current-build-command>" } } -
Import in your CSS:
/* src/styles/index.css */ @import "./typescale.css";
-
Use the generated utilities:
<h1 class="text-h1">Large Heading</h1> <p class="text-p">Body text</p> <small class="text-caption">Small text</small>
With the tailwind flag enabled, the CLI generates text and leading
properties under the @theme directive for seamless integration with Tailwind
v4.
import { gudTypeScale } from "@gud/typescale";
const typeScale = gudTypeScale();
// {
// footnote: {
// fontSize: 11.25,
// lineHeight: 16,
// },
// caption: {
// fontSize: 14,
// lineHeight: 24,
// },
// p: {
// fontSize: 16,
// lineHeight: 24,
// },
// h6: {
// fontSize: 18.5,
// lineHeight: 32,
// },
// h5: {
// fontSize: 23.25,
// lineHeight: 32,
// },
// h4: {
// fontSize: 30.75,
// lineHeight: 40,
// },
// h3: {
// fontSize: 42.25,
// lineHeight: 56,
// },
// h2: {
// fontSize: 60,
// lineHeight: 80,
// },
// h1: {
// fontSize: 88,
// lineHeight: 120,
// },
// }The hierarchy of font styles to generate.
This is an array of strings representing the font styles in the order they should be generated. The first item in the array will be the smallest font size, and the last item will be the largest.
Default: ["footnote", "caption", "p", "h6", "h5", "h4", "h3", "h2", "h1"]
The base font size.
Default: 16
The increment multiplier.
Default: 2
The number steps it takes to go from one multiple to the next.
Default: 5
The function used to round font sizes.
Default: rounder(0.25, "up")
The index of the base font size in the hierarchy.
This is useful if you want some styles smaller than the base.
For example, if the hierarchy is ["footnote", "body", ...], then the
baseIndex would be 1 to make "body" the base font size.
Default: 2
A function to convert hierarchy indexes to scale indexes
given the following hierarchy: ["body", "h6", "h5", "h4", "h3", "h2", "h1"]
and the following scale: [12, 14, 16, 18.25, 21, 24, 27.75, 31.75, 36.5, 42, 48] (base: 12, multiplier: 2, steps: 5)
A 1 to 1 fn of (i) => i would mean "body" (hierarchy index 0) would be
12 (scale index 0), and "h1" (hierarchy index 6) would be 27.75
(scale index 6).
Using (i) => i * 1.5, "body" (hierarchy index 0) would be 12 (scale
index 0), and "h1" (hierarchy index 6) would be 42 (scale index 9).
Default: (i) => gudTypeScaleIndex(i)
The multiplier to use when deciding the line height of a given font size. The
resulting line height will be rounded up to the closest factor of the
gridHeight.
Default: 1.3
An optional unit to add to the returned values. This will change the values from
numbers to strings. If provided a relative unit (rem or em), the font sizes
will be relative to the base font size.
Default: undefined