View
Design Systems16 min readJun 2024

Building Scalable Typography for Modern Digital Products

Typography isn't decoration — it's the interface. A system of scale, rhythm, hierarchy, and restraint, with eight interactive tools: modular scale generator, pairing explorer, reading simulator, clamp() preview, and more.

TypographyType ScaleDesign TokensAccessibility
01/Foundations

Typography foundations

A typography system is the set of rules governing how text looks and behaves across a product. It's the difference between text that is merely present and text that guides, reassures, and communicates.

Readability

The first job

Before a typeface has personality, it must be effortless to read. Size, measure, line height, and contrast decide whether users absorb the text or bounce. Everything else is a layer on top.

Personality

The second job

Once text is readable, the typeface carries voice — a geometric sans reads precise and modern, a humanist serif warm and editorial. Voice supports the brand; it never costs legibility.

Hierarchy

The structure

Hierarchy lets users tell a heading from body, a label from a value, without reading a word. Size, weight, color, and space do it together.

Function

The discipline

Every type style should answer one question: what is its job? Tokens named by role keep that discipline, so designers stop re-deciding the same thing on every screen.

Typography is UX, not styling

Roughly 95% of the web is written language. The type system isn't a cosmetic pass at the end — it's the primary medium the product communicates through. Treat it as core architecture.

02/Classification

Font classification system

Every typeface belongs to a family of forms with its own temperament and ideal use. Knowing the categories lets you choose deliberately instead of by accident.

Ag

Serif

Lora · Georgia · Times

Small strokes finish each letter. Traditional, authoritative, editorial — excellent for long-form reading, in print and increasingly on screen.

EditorialTrustworthyLong-form
Ag

Sans-serif

Inter · Helvetica · Arial

No serifs: clean, neutral, modern. The UI default — legible at small sizes and on low-resolution screens.

ModernNeutralUI default
Ag

Grotesk

Space Grotesk · Helvetica · Founders

Early sans-serifs with slightly mechanical forms. Confident and characterful — favoured by product brands wanting personality without serifs.

ConfidentCharacterfulBrand
Ag

Geometric

Poppins · Futura · Circular

Built from circles and straight lines. Precise, friendly, contemporary. Great in headings; tiring in long body copy.

PreciseFriendlyDisplay-leaning
Ag

Humanist

Lato · Frutiger · Source Sans

Sans-serifs with calligraphic warmth and open apertures. The most readable sans — ideal for body text and accessibility.

WarmReadableAccessible
Ag

Monospace

DM Mono · JetBrains · SF Mono

Every character is equal width. Essential for code, data, and tabular numbers. Adds a technical, precise voice.

CodeTabularTechnical
Ag

Display

Playfair · Fraunces · Canela

Built for large sizes and impact, not paragraphs. High contrast, expressive detail. Hero moments only — never body or labels.

ImpactHero-onlyExpressive
Ag

Variable

Fraunces · Inter · Recursive

One file, continuous axes — weight, width, optical size. Smaller payloads, fluid weights, optical sizing at every scale.

One fileFluid axesPerformance

Tool · Font pairing explorer

Display serif + humanist sans
The grand tour of modern typography

Pairing is about contrast with harmony. A high-contrast display serif over a calm humanist sans gives editorial authority; a grotesk over a monospace reads technical and precise. The heading sets the voice; the body keeps it readable.

03/Type Scale

The modular type scale

A type scale is a fixed set of sizes derived from one base and one ratio. Every size comes from the scale, never an arbitrary value — which is what makes typography feel composed instead of chaotic.

Tool · Modular scale generator

Base size
px
Ratio
1.250
Preset
Display76px · 1.04 · -0.02em
Display
Heading 161px · 1.08 · -0.02em
Heading One
Heading 249px · 1.12 · -0.015em
Heading Two
Heading 339px · 1.18 · -0.01em
Heading Three
Heading 431px · 1.25 · -0.005em
Heading Four
Heading 525px · 1.3 · 0
Heading Five
Body Large20px · 1.6 · 0
Larger body copy for intros
Body16px · 1.65 · 0
Default body text for reading
Small13px · 1.5 · 0
Secondary and supporting text
Caption10px · 1.45 · 0.01em
Captions, metadata, footnotes
:root {
  --text-display: 76px;
  --leading-display: 1.04;
  --text-h1: 61px;
  --leading-h1: 1.08;
  --text-h2: 49px;
  --leading-h2: 1.12;
  --text-h3: 39px;
  --leading-h3: 1.18;
  --text-h4: 31px;
  --leading-h4: 1.25;
  --text-h5: 25px;
  --leading-h5: 1.3;
  --text-body-lg: 20px;
  --leading-body-lg: 1.6;
  --text-body: 16px;
  --leading-body: 1.65;
  --text-small: 13px;
  --leading-small: 1.5;
  --text-caption: 10px;
  --leading-caption: 1.45;
}
04/Reading Experience

The reading experience

Sizing the type is only half the job. Line length, vertical rhythm, and paragraph spacing decide whether reading feels effortless or exhausting — the quiet mechanics of comfort.

✓ Comfortable

Lines of 50–75 characters let the eye return to the next line without effort. Generous line height gives each line room to breathe, and the reader settles into a rhythm.

✕ Fatiguing

Lines that run the full width of a wide screen force long eye journeys and make it easy to lose your place when returning to the left edge, while cramped line height removes the breathing room each line needs, so the paragraph becomes a wall of text that the eye slides off rather than reads.

Tool · Reading width & line-height simulator

Line length
62ch
Line height
1.70
Comfort✓ Comfortable

Typography is the craft of making language visible. The measure — the length of a line of text — is one of its oldest and most reliable controls. When a column is too wide the reader tires; too narrow and the rhythm fractures into fragments. Somewhere between forty-five and seventy-five characters lies the comfortable middle, where the eye sweeps and returns without conscious effort, and the words simply flow.

Vertical rhythm

Set line height and spacing on a consistent baseline unit (4px or 8px). When headings, body, and spacing snap to the same grid, the page gains an invisible structure the eye reads as “calm” — even if no one can name why.

05/Hierarchy

Typographic hierarchy

Hierarchy tells you where to look first, second, third. It's built from four levers — size, weight, color, and space — and strong hierarchy needs only a few of them used decisively.

Tool · Weight & hierarchy playground

Pro plan
Everything your team needs to ship

Unlimited projects, advanced analytics, priority support, and a shared design-token pipeline that keeps every surface consistent.

$29/mo

Strong hierarchy. Four levers working together — the eye lands on the title, then price, then action, instantly.

Contrast creates hierarchy — not size alone

The common failure is making everything big. A 32px heading over a 28px subhead has no clear order. Make a decisive jump in at least one dimension: a bold 24px title over regular 14px body reads more clearly than two similar large sizes.

06/Typography for UI

Typography for interfaces

Interface type lives under different pressure than editorial type: small sizes, dense layouts, tabular data, touch targets, glanceable labels. Each context has its own rules.

Buttons & actions

14–15px, medium weight, generous letter-spacing on uppercase. Labels are verbs. Never let a button label wrap.

Forms & inputs

Label 12–13px medium · input 14–16px (≥16px on mobile to stop iOS zoom) · hint 11–12px muted.

Data tables

PlanSeatsMRR
Starter3$87
Growth12$1,240
Scale48$9,600

Tabular-figure numerals so digits align in columns. Labels uppercase mono; values regular.

Navigation

OverviewProjectsMembersSettings

13–14px. Current item earns weight and full contrast; the rest recede to muted. Hierarchy by state, not size.

Dense interfaces need the system most

Dashboards pack dozens of type styles per screen and, without a system, drift into near-identical sizes. A tight scale of 5–6 UI sizes (label, caption, body, body-strong, subhead, value) covers almost every dense interface — resist adding more.

07/Responsive

Responsive & fluid typography

Type can't be one size. clamp() scales smoothly between a min and max across the viewport — no breakpoints, no jumps. Set the floor and ceiling; let the middle flow.

Tool · Responsive clamp preview

Min size
px
Max size
px
Viewport
Typography that scales

viewport 1100px → rendered 63.4px (min 28 · max 72)

Generated CSS
font-size: clamp(28px, 10.78px + 4.78vw, 72px);
08/Accessibility

Accessible by default

Accessible typography isn't bolted on at the end — it's a set of defaults that make the product better for everyone. Contrast, minimum sizes, zoom behaviour, and legible letterforms are the baseline.

Tool · Contrast & size checker

Text
Background
Size
16px
Ratio11.88:1
The quick brown fox jumps over the lazy dog — 0123456789
AA normalAAA normalBody size ✓
Il1 O0 rn m
Inter · clear apertures
Il1 O0 rn m
Lato · humanist, open
Il1 O0 rn m
DM Mono · disambiguated

WCAG AA requires 4.5:1 for normal text and 3:1 for large text (≥24px, or ≥18.66px bold). Keep body text at 16px or above, and the layout usable at 200% zoom. Choose letterforms that disambiguate I l 1 and O 0 — a quiet but real win for dyslexic and low-vision readers.

09/Tokens

Typography tokens

Tokens turn typographic decisions into one source of truth. Name them by role, layer them from raw value to semantic to component, and components stop hard-coding sizes for good.

01 — Global / primitive

--font-size-500: 20px; --leading-snug: 1.25; --weight-medium: 500;

↓ referenced by

02 — Semantic / role

--text-heading: var(--font-size-500)/var(--leading-snug) var(--weight-medium);

↓ referenced by

03 — Component

--card-title-font: var(--text-heading);

Real token architecture · CSS custom properties

:root {
  /* primitives */
  --font-sans: "Inter", system-ui, sans-serif;
  --font-mono: "DM Mono", monospace;

  --size-caption: 12px;  --leading-caption: 1.45;
  --size-body:    16px;  --leading-body:    1.65;
  --size-h3:      25px;  --leading-h3:      1.2;
  --size-h1:      39px;  --leading-h1:      1.08;

  --weight-regular: 400;  --weight-medium: 500;  --weight-bold: 700;
}

:root {
  /* semantic roles */
  --text-page-title: var(--weight-bold) var(--size-h1)/var(--leading-h1) var(--font-sans);
  --text-section:    var(--weight-medium) var(--size-h3)/var(--leading-h3) var(--font-sans);
  --text-body:       var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-sans);
  --text-meta:       var(--weight-medium) var(--size-caption)/var(--leading-caption) var(--font-mono);
}

/* usage — components never hard-code sizes */
.page-title { font: var(--text-page-title); letter-spacing: -0.02em; }
.card-meta  { font: var(--text-meta); text-transform: uppercase; letter-spacing: 0.08em; }

Name by role, not by value

A token called --text-body survives a redesign; --text-16 becomes a lie the moment body changes to 17px. The number says what it is; the role says what it's for.

10/Common Mistakes

Common typography mistakes

Most typographic problems are a handful of recurring errors, each with a simple correction. Seeing them side by side is the fastest way to internalise the fix.

✕ Weak contrast

Low-contrast grey that drops well below 4.5:1. It looks “subtle” in the mockup and turns unreadable in sunlight or for low-vision users.

Designers mistake low contrast for elegance.

✓ Corrected

This clears 4.5:1 and still reads as calm and secondary. Restraint comes from hierarchy and size, not from making text hard to see.

Use weight and size for “quiet,” never failing contrast.

✕ Tiny body text

Body at 11px to fit more on screen. Users pinch-zoom, lean in, and tire fast. Density bought with readability is a bad trade.

11px body to win a layout argument.

✓ Corrected

Body at 16px with comfortable line height. Slightly less fits per screen — and every line is effortless on any device.

16px floor for body; cut content, not size.

✕ Too many weights

Thin Regular Medium Semibold Bold — five weights on one screen, none of them meaning anything specific.

Every weight loaded “just in case.”

✓ Corrected

Regular for body. Semibold for emphasis. Two weights, each with a clear job. The contrast between them does all the work.

2–3 weights, each assigned a role.

✕ Over-centered text

Long passages set centered force the eye to hunt for the start of every line because the left edge moves. Centering is for short, symmetric moments — not paragraphs of running text like this one.

Centering body copy “for balance.”

✓ Corrected

Running text is left-aligned, giving the eye a fixed return edge. Centering is reserved for headings, single lines, and short callouts where it adds elegance without cost.

Left-align paragraphs; center only short lines.

11/Principles

Typography principles

A typography system isn't a font choice — it's a set of convictions about how text serves the reader. These six hold up across products, brands, and platforms.

01

Design for reading first

Personality is earned only after text is effortless to read. Measure, size, and contrast come before voice. A beautiful typeface that fatigues the reader has failed its one essential job.

02

Consistency beats novelty

A predictable scale used everywhere reads as quality. “Just one more size” is how systems rot. Reuse the scale; let layout and spacing create the variety.

03

Contrast creates hierarchy

Order comes from decisive difference in size, weight, or color — not from making everything large. If two things look equally important, neither is.

04

Spacing is typography

Line height, paragraph spacing, and measure shape readability as much as the letterforms. White space isn't empty; it's what lets type breathe.

05

Typography is interface design

In most products, text is the interface. Treat the type system as core architecture — tokenized, accessible, consistent.

06

Restraint scales

Two families, a few sizes, two or three weights covers nearly every interface and stays maintainable. Range comes from how you combine, not how much you add.