Type scale: how to choose font sizes for a site

What a type scale is, eight classic ratios, one page in three scales, fluid sizes with clamp(), line length and spacing — with live examples.

Design systems Updated

In short

A type scale is a short set of font sizes built by one rule: each next size is the previous one multiplied by the same ratio — for example, 1.25. Instead of dozens of random sizes the project gets seven or eight steps: a caption, body text, a lead paragraph, headings of several levels. Headings stop competing, the page gets a rhythm, and designers and developers speak the same language — “step 4” instead of “around 38 pixels”. The ratio sets the character: a small one is calm and suits interfaces with a lot of text, a large one is dramatic and suits landing pages and brands. With clamp() the steps grow smoothly with the screen.

A scale of 1.25: eight steps from a caption to a hero

Every step is shown at its real size. The base is 16 px; each step up is multiplied by 1.25, each step down is divided.

  1. 661.04 px · 3.815 rem
    hero
    A scale keeps rhythm
  2. 548.83 px · 3.052 rem
    page title
    A scale keeps rhythm
  3. 439.06 px · 2.441 rem
    section
    A scale keeps rhythm
  4. 331.25 px · 1.953 rem
    subsection
    A scale keeps rhythm
  5. 225 px · 1.563 rem
    card title
    A scale keeps rhythm
  6. 120 px · 1.25 rem
    lead
    A scale keeps rhythm
  7. 016 px · 1 rem
    body text
    A scale keeps rhythm
  8. −112.8 px · 0.8 rem
    caption
    A scale keeps rhythm

Eight steps are enough for a whole site. Steps 0–1 are for reading, 2–3 for headings of cards and subsections, 4–6 for sections, pages and the first screen. If a layout needs a size between two steps, it is a signal to reconsider the layout, not to add a step.

Eight classic ratios and their character

The names come from music intervals. The larger the ratio, the bigger the jump between headings and text.

RatioNameCharacterSuits
1.067 Minor second almost flat dense data tables
1.125 Major second quiet admin panels, documentation
1.2 Minor third soft applications, blogs
1.25 Major third balanced most sites
1.333 Perfect fourth confident corporate sites, media
1.414 Augmented fourth expressive landing pages
1.5 Perfect fifth dramatic brands, posters, portfolios
1.618 Golden ratio very contrasting one hero heading

One page in three scales

The same fragment with ratios 1.125, 1.25 and 1.333: the text does not change, the character does.

1.125 · Major second

Kitchens made to order

How we work

Measuring, design and assembly — one team is responsible for everything from the first meeting to the last screw.

From three weeks

1.25 · Major third

Kitchens made to order

How we work

Measuring, design and assembly — one team is responsible for everything from the first meeting to the last screw.

From three weeks

1.333 · Perfect fourth

Kitchens made to order

How we work

Measuring, design and assembly — one team is responsible for everything from the first meeting to the last screw.

From three weeks

Heading = 16 × ratio⁴, subheading = 16 × ratio², caption = 16 ÷ ratio.

Fluid sizes: a scale that grows with the screen

Move the slider: the heading grows with the width of the “screen” and stops at the limits — no jumps between breakpoints.

Screen width 760px Size —

clamp(1.5rem, 0.9rem + 4cqi, 3.25rem)

Kitchens that last for decades

The heading grows with the screen and stops at the set limits — without jumps between media queries.

On a phone large steps are compressed: a 61 px heading does not fit a 375 px screen. clamp() sets a minimum, a growth rate and a maximum, so the hierarchy stays the same and only the contrast between steps becomes softer on small screens.

The scale in code: 2 examples

Steps as CSS variables — the same names in the layout and in the code.

Steps of the scale

Sizes in rem respect the font size the person set in the browser.

type-scale.css
/* A scale of 1.25 from 16px: every size in the project is one of these steps */
:root {
  --step--1: 0.8rem;     /* 12.8px — captions */
  --step-0: 1rem;        /* 16px — body text */
  --step-1: 1.25rem;     /* 20px — lead paragraph */
  --step-2: 1.5625rem;   /* 25px — card title */
  --step-3: 1.953rem;    /* 31.25px — subsection */
  --step-4: 2.441rem;    /* 39px — section */
  --step-5: 3.052rem;    /* 48.8px — page title */
}

body  { font-size: var(--step-0); line-height: 1.55; }
h1    { font-size: var(--step-5); line-height: 1.05; }
h2    { font-size: var(--step-4); line-height: 1.1; }
h3    { font-size: var(--step-2); line-height: 1.2; }
small { font-size: var(--step--1); }

Fluid steps

Large steps grow with the screen; inside a component — with its container.

fluid.css
/* Fluid steps: the size grows with the screen between two limits */
:root {
  --step-4: clamp(1.75rem, 1.35rem + 1.8vw, 2.441rem);
  --step-5: clamp(2rem, 1.4rem + 2.8vw, 3.052rem);
}

/* Inside a component — from the width of its container, not of the screen */
.card { container-type: inline-size; }
.card__title { font-size: clamp(1.25rem, 0.9rem + 4cqi, 1.953rem); }

Line length and line spacing

The size is only half of readability. The other half is how long the line is and how much air is between lines.

28 characters — the text breaks up

A comfortable line is about 65 characters long. The eye easily finds the start of the next line, and the text does not break into short pieces. When a line is too short, reading turns into jumps; when it is too long, the eye gets lost on the way back.

≈ 65 characters — just right

A comfortable line is about 65 characters long. The eye easily finds the start of the next line, and the text does not break into short pieces. When a line is too short, reading turns into jumps; when it is too long, the eye gets lost on the way back.

100 characters — the eye loses the line

A comfortable line is about 65 characters long. The eye easily finds the start of the next line, and the text does not break into short pieces. When a line is too short, reading turns into jumps; when it is too long, the eye gets lost on the way back.

1.1 · cramped

The space between lines decides whether a paragraph reads as text or as a dense brick. Body text works at 1.5–1.6, large headings at 1.0–1.2.

1.55 · just right

The space between lines decides whether a paragraph reads as text or as a dense brick. Body text works at 1.5–1.6, large headings at 1.0–1.2.

2.1 · falls apart

The space between lines decides whether a paragraph reads as text or as a dense brick. Body text works at 1.5–1.6, large headings at 1.0–1.2.

By eye or by the scale

The same screen: on the left — five sizes chosen by eye, on the right — four steps of one scale.

By eye: 15, 17, 22, 23, 26 px

Workshop

Solid wood furniture to your size

Our own production

We design, make and assemble in one order — without middlemen or rework.

Get an estimate
Scale 1.25: 12.8 · 16 · 20 · 39 px

Workshop

Solid wood furniture to your size

Our own production

We design, make and assemble in one order — without middlemen or rework.

Get an estimate

How to build a scale for your project: 6 steps

  1. 01

    Choose the base

    The size of body text — usually 16–18 px for sites, 14–16 for dense interfaces.

  2. 02

    Choose the ratio

    By the character of the product: calm for services, contrasting for brands.

  3. 03

    Count the steps

    Two down, five or six up — and round to whole pixels where it matters.

  4. 04

    Give the steps roles

    Caption, body, lead, card title, section, page — each step has a job.

  5. 05

    Set line spacing per step

    The larger the size, the smaller the line-height: 1.55 for text, about 1.05 for large headings.

  6. 06

    Make large steps fluid

    clamp() for headings, fixed sizes for text and captions.

Common mistakes with type scales

  1. Twenty sizes on one site

    Every new block gets its own size, and the page loses its hierarchy.

  2. Neighbouring sizes too close

    22 and 23 px look like a mistake, not like two levels.

  3. One line-height for everything

    1.5 makes large headings fall apart into separate lines.

  4. The desktop scale on a phone

    A 61 px heading turns into a column of single words.

  5. Sizes only in pixels

    The site ignores people who enlarged the font in the browser.

  6. Weight instead of size

    Five weights on one screen create noise; the scale and two weights are enough.

Questions about type scales

What is a type scale?

A set of font sizes where each next one is the previous multiplied by the same ratio.

Which ratio should I choose?

1.2–1.25 for most sites and applications; 1.333–1.5 for brands and landing pages with large headings.

How many sizes does a site need?

Usually seven or eight steps; more means the hierarchy is no longer readable.

px, rem or em?

rem for the scale: it follows the font size set in the browser, and the steps keep their proportions.

Does the scale change on phones?

The large steps become smaller through clamp(); the body text usually stays the same.

What is the best line length?

About 45–75 characters; in CSS it is easy to set with max-width: 65ch.

Online form

A system
for your product

I build design systems on tokens: a type scale, spacing, colours and components that live both in the layout and in the code. Tell me about the project — I answer within one working day.

Or write to [email protected]