Typography in UI Design: Choosing Typefaces That Work at Every Size
Typography carries more of an interface than most people realise. Before a user consciously registers a single button or icon, the type has already told them whether a product feels trustworthy, modern, cluttered or calm. Yet in many design teams, typeface decisions are made once, early, and rarely revisited — even as the product grows into contexts the original choice was never tested against. This article looks at how to choose, pair and maintain typography that actually holds up across a real interface.
Start With the Smallest Text, Not the Logo
Most typeface evaluations happen at display sizes. A designer types the product name at 64 pixels, admires the curves, and commits. The problem is that the vast majority of interface text lives between 12 and 16 pixels: labels, captions, table cells, helper text, timestamps. A typeface that looks elegant in a hero heading can fall apart completely at caption size.
When evaluating a typeface for UI work, set a paragraph at 13 pixels and squint. Check whether the lowercase "a", "e" and "s" stay open or close up into blobs. Compare "Il1" and "0O" — if a user can't tell a lowercase L from a capital i in a password field or an ID string, that's a functional failure, not an aesthetic one. Fonts designed specifically for screens, with generous x-heights and open apertures, almost always outperform print classics in these conditions.
One Family Can Be Enough
The instinct to pair a "heading font" with a "body font" comes from editorial design, where contrast creates rhythm across long pages. Interfaces are different. Screens are dense, fragmented and full of competing signals; adding a second typeface adds another variable users must process.
A single well-built family with a broad weight range — light through bold, ideally with a true italic — can express an entire hierarchy on its own. Weight, size and colour do the differentiating work. If you do pair two families, give each a strict job: one for display moments (marketing pages, empty states, onboarding), one for everything functional. Blurring that line is how interfaces drift into visual noise, one screen at a time.
Line Height, Spacing and the Grid Nobody Sees
Typeface choice gets the attention, but spacing decisions determine whether text is actually comfortable to read. A few working defaults that survive contact with real products:
- Body text sits comfortably at a line height of 1.4 to 1.6. Tighter than that and paragraphs feel compressed; looser and lines visually detach from each other.
- Headings want tighter line height, usually 1.1 to 1.25, because short lines don't need the same breathing room.
- Letter spacing should increase slightly for all-caps labels and tiny text, and tighten slightly for large display sizes. Default tracking is optimised for mid-range sizes only.
- Line length matters even in apps. Settings descriptions and modal copy stretched across a wide desktop layout become genuinely hard to read past roughly 75 characters per line.
Tie these values to a consistent scale rather than eyeballing each screen. A modular type scale — even a rough one like 12, 14, 16, 20, 24, 32 — keeps dozens of screens designed by different people feeling like one product.
Variable Fonts Changed the Trade-Offs
For years, teams limited themselves to two or three weights because every additional font file slowed the page down. Variable fonts largely dissolved that constraint: a single file can contain the entire weight axis, and often width and optical size axes too.
The optical size axis is the quiet hero for interface work. It automatically adjusts letterforms so that small text gets sturdier strokes and looser spacing while large text gets refined details — the kind of adjustment type designers used to cut as separate fonts. If your chosen family supports it, enable it. Users will never name what changed, but small text becomes noticeably easier to read.
Performance still deserves respect, though. Subset the character set to the languages you actually support, preload the primary font file, and define a fallback stack whose metrics roughly match your web font so the layout doesn't jump when it loads.
Accessibility Is a Typography Problem Too
Contrast requirements usually get discussed in terms of colour, but type weight and size are part of the same equation. A light-weight grey label that technically passes contrast ratios at 24 pixels may be illegible at 12. Users with low vision, dyslexia, or simply a cheap screen in bright sunlight all benefit from the same fundamentals: adequate size, sufficient weight, honest contrast and respect for the user's own settings. If someone increases their system font size, your layout should adapt rather than truncate — which is an argument for testing with large text settings on, not just default ones.
Conclusion
Good interface typography is mostly invisible. It shows up as a vague sense that a product is easy to use, that nothing needs to be squinted at, that the screen feels calm. Choose a typeface at the sizes you'll actually use, resist the urge to collect fonts, build spacing into a system, and test with real settings on real devices. The type will quietly do its job — which is exactly the point.