Fundamentals

Typography Principles for Designers Font Pairing, Hierarchy & Spacing

A practical audit for fixing type hierarchy, spacing, contrast, font pairing, and responsive behavior without turning every decision into a rule.

Nikki Kipple
Nikki Kipple
9 min readAug 2026

TL;DR

  • Fix in this order: Hierarchy, spacing, contrast, then font personality. Most pages do not need a new typeface first.
  • Use as a starting point: Keep the system small, constrain long lines, and test the actual content on real screens.
  • Accessibility check: Measure contrast, zoom to 200%, and make sure user-defined text spacing does not break the layout.
Line-height comparison showing cramped, readable, loose, and broken rhythm typography

Start with a five-minute type audit

If a page feels almost right, do not open the font menu yet. The problem is usually more basic: the levels are too similar, the text column is too wide, the spacing is cramped, or the contrast is doing less work than it looked like it would in Figma.

Audit the system in the order a reader experiences it. Structure first. Reading comfort second. Typeface personality last.

01

Blur the page

Can you still see the title, major sections, and next action? If everything becomes the same gray block, the hierarchy is too flat.

02

Read one paragraph

Use the real device and normal viewing distance. If you lose your place, inspect line length and line height before changing the font.

03

Count the text styles

Every distinct size, weight, color, and case treatment should have a job. Near-duplicates usually signal an unfinished system.

04

Check contrast and zoom

Measure the actual colors, then test at 200% zoom. A tasteful gray is not useful if the text disappears or the layout breaks.

05

Judge personality last

Only reconsider the typeface after the structure reads clearly. A new font cannot rescue weak hierarchy or cramped spacing.

The useful fix order

  1. 1.Hierarchy
  2. 2.Measure
  3. 3.Spacing
  4. 4.Contrast
  5. 5.Typeface

Fix hierarchy before you fix fonts

Hierarchy answers a simple question: what should someone notice first, second, and third? If every heading is large, every label is bold, and every card has its own style, the reader has to reconstruct the system for you.

Start with the smallest inventory that explains the page: a display or page title, a section heading, body text, and a small label or caption. Add a level only when the content has a real level to express.

A small system

Make the decision visible

Show the structure before the detail

Body text should feel quiet enough to read and strong enough to hold up on a real screen. The spacing around each level helps explain the relationship.

Supporting label

Check each level

  • Role: What content belongs here?
  • Difference: Is it clearly distinct from the level above and below?
  • Consistency: Does the same role look the same everywhere?
  • Restraint: Could two near-identical styles become one?

Treat a type scale as an inventory, not a law

A ratio can generate numbers. It cannot decide whether your product needs five text levels or whether a 52-pixel heading fits a German translation. Pick a short set of sizes that creates the distinctions your content needs, then test it with the longest real labels and headlines.

:root {
  --text-label: 0.875rem;
  --text-body: 1rem;
  --text-subhead: 1.25rem;
  --text-section: 1.75rem;
  --text-display: clamp(2.25rem, 5vw, 4.5rem);
}

Spacing, line height, and measure do most of the reading work

Type does not become readable because a formula says so. It becomes readable when the specific font, size, line length, contrast, and context work together. Use the numbers below as starting points, then adjust while reading the actual content.

Body line height

1.45–1.65

A useful web starting range. Fonts with a tall x-height may need less; dense or long-form reading may need more.

Text measure

Around 60–70ch

A practical starting width for paragraphs on larger screens. Narrow screens usually constrain the line naturally.

Heading rhythm

More above, less below

The heading should feel attached to the content it introduces, not stranded between two sections.

Good vs. Bad Spacing

Poor Spacing

Tight Headlines

This body text has insufficient line height making it hard to read comfortably. The cramped feeling makes users work harder to process the content.

No spacing between paragraphs creates a wall of text that's intimidating to scan or read.

Comfortable Spacing

Breathing Room

This body text uses 1.6 line height, making it comfortable to read. The relaxed spacing lets users process content without strain.

Proper paragraph spacing creates natural reading breaks and makes content feel approachable.

What WCAG actually says about text spacing

WCAG 2.2 does not require authors to set every paragraph to 1.5 line height. It requires the content to keep working when a user applies 1.5 line height, larger paragraph spacing, 0.12em letter spacing, and 0.16em word spacing.

Read WCAG 2.2 guidance for text spacing

Pair fonts with a job in mind

“These fonts look good together” is not a system. A second family should solve a problem: create a stronger editorial voice, make dense reading quieter, separate data from prose, or give display text a useful contrast.

If one family can create the hierarchy, use one. Consistency is not a lack of creativity. It gives the content a stable structure and leaves more room for color, imagery, and layout to carry personality.

One-family system

Inter Semibold

Inter Regular keeps the structure quiet, direct, and easy to maintain.

Editorial contrast

Newsreader

Source Sans 3 gives longer reading a neutral counterpoint.

Structured contrast

Space Grotesk

IBM Plex Sans keeps the body practical while the headings feel more distinct.

Before you commit to a pair

  • • Give each family a specific role.
  • • Test real names, prices, dates, and long headings.
  • • Check every weight and style you plan to use.
  • • Confirm the scripts and symbols your content needs.
  • • Compare the pair at actual body and heading sizes.
  • • Remove one family and see whether anything is lost.

Need combinations to try? Use the portfolio font-pairing guide, or preview your own words in the font-pairing tool. Treat both as a starting point, then come back to the real page.

Responsive and accessible type is type that survives change

The clean desktop frame is only one state. Text gets zoomed, translated, enlarged, replaced by user styles, and read on screens with very different widths and brightness. A type system is finished when it can absorb those changes without losing meaning or function.

Use flexible units with deliberate limits

Use rem units for a manageable scale and clamp() when a heading should grow between sensible minimum and maximum sizes.

h1 {
  font-size: clamp(2.25rem, 6vw, 4.5rem);
  line-height: 1.05;
  max-width: 14ch;
}

Test the states your canvas hides

  • • 200% browser zoom on a narrow viewport.
  • • The longest likely heading and navigation label.
  • • Increased line, word, letter, and paragraph spacing.
  • • Bright light, dark mode, and reduced contrast conditions.
  • • A real screen reader heading list.

Contrast is measurable, but the threshold is not the finish line

WCAG 2.2 Level AA requires at least 4.5:1 contrast for normal text and 3:1 for large text. Check the actual foreground and background colors. Then test the weight and typeface in context, because two designs at the same ratio can still feel very different to read.

Fails AA (2.85:1)

This light gray does not reach the 4.5:1 minimum for normal text on white.

Passes AA (4.54:1)

This reaches the WCAG AA minimum for normal text on white. Test the typeface and weight in context.

Stronger (12.63:1)

This darker gray creates more contrast on white while staying slightly softer than black.

Use web fonts without turning them into a loading problem

A font file is part of the interface. It can delay text, shift the layout, or fail. Use WOFF2, request only the weights and character sets the page needs, and choose fallbacks that occupy similar space.

Do not preload every font. Preload only a truly critical file, and choose font-display based on the tradeoff you want. swap shows text quickly but can shift when the font arrives. optional avoids a late swap but may keep the fallback on a slow connection.

@font-face {
  font-family: "Project Sans";
  src: url("/fonts/project-sans-variable.woff2") format("woff2");
  font-display: swap;
  font-style: normal;
  font-weight: 400 700;
}

body {
  font-family: "Project Sans", ui-sans-serif, system-ui, sans-serif;
}

Keep the font request boring

  • • WOFF2 files only for modern-browser projects.
  • • Only the weights and styles that appear on the page.
  • • Character subsets that still cover real content and names.
  • • A measured fallback that reduces layout shift.
  • • One critical preload at most, unless testing proves more helps.
  • • A network check instead of assuming the font is cheap.

Before you ship the type system

Do this on the rendered page, not only in the design file. A checklist is useful when it catches something you can fix, not when it produces a perfect score.

  • A first-time reader can identify the page, sections, and next action without reading every word.
  • Body text is comfortable on a real phone and a laptop, not only in the design canvas.
  • Long text blocks have a deliberate maximum width instead of stretching across the screen.
  • Headings have more separation from the previous section than from the text they introduce.
  • Normal text reaches 4.5:1 contrast and meaning never depends on color alone.
  • The layout still works at 200% zoom and with user-defined text spacing.
  • Font files cover every language and symbol the product actually needs.
  • Only the weights, styles, and font files used by the page are requested.
  • Fallback fonts are close enough that loading does not destroy the layout.
  • The type choices support the content instead of becoming the content.

Checklist done. Still not sure what matters most?

Upload the page or paste the URL. Your free First Read gives you a readiness verdict and the first typography move to consider.

Get a First Read

Want to see the criteria before sending anything? Here is what the critique checks.

Standards and implementation sources

The practical ranges in this guide are starting points, not accessibility standards. These are the current primary references behind the requirements and font-loading guidance:

💬 Common Questions

Everything You Need to Know

Quick answers to help you get started

Go deeper only where you need it

Choosing type for a portfolio? Open Typography for Portfolios. Need combinations to test? Use the Font Pairings Guide or the live font-pairing tool.

Building the implementation? The CSS Typography Guide covers the code-level details without repeating the design audit.

Share this resource

Nikki Kipple

Written by

Nikki Kipple

Product Designer & Design Instructor

Designer, educator, founder of The Crit. I've spent years teaching interaction design and reviewing hundreds of student portfolios. Good feedback shouldn't require being enrolled in my class — so I built a tool that gives it to everyone. Connect on LinkedIn →

Too close to the page to judge the type?

Send one page or screenshot. Your free First Read gives you a readiness verdict and the first move to consider.

Get a First Read

Get one actionable portfolio tip every week. No fluff.

Short reads you can use on your site. Unsubscribe anytime.