Most people think typography is about “what looks cool.” I learned the hard way that it is mostly about what people can read for 30 minutes straight without closing the tab or uninstalling the app.
The short answer: choose a font with clear letter shapes, moderate contrast, generous x-height, and sane spacing. Stick to 2-3 fonts total. Use a sans-serif for UI and most screens, a solid serif or workhorse sans for long text, and set line height, line length, and contrast with at least as much care as the logo. If you ignore those details, your content will feel harder to read and your conversions will quietly suffer.
What “Readable” Typography Actually Means
When people say “this font is hard to read,” they are usually reacting to a mix of factors:
- Letter shapes (can you distinguish “I”, “l”, and “1” at a glance?)
- Spacing (letters and lines crowding or floating)
- Size (too small on mobile, too big on desktop)
- Contrast (grey-on-grey or neon-on-black fatigue)
- Rhythm (line length and paragraph structure)
The font family matters, but the way you set the text matters just as much.
Readable typography is not the prettiest option; it is the one people forget about while they read.
If visitors notice your font constantly, something is probably off.
Serif vs Sans-Serif: Where Each Makes Sense
The old myth says: “Serifs are for print, sans-serif is for screen.” Reality is more nuanced.
Serif Fonts: When They Work
Serifs have small strokes at the ends of characters. Examples: Georgia, Times New Roman, Merriweather.
Pros:
- Good for long-form reading on high-density screens.
- Clear word shapes, which can help with reading flow.
- Often feel more formal or editorial.
Cons:
- Cheap or over-stylized serifs blur at small sizes.
- On low-quality displays, fine details can degrade.
- Can feel fussy in UI elements and dashboards.
Use serif fonts for:
- Article bodies on blogs and documentation with serious tone.
- Headings for brands aiming at classic or “serious” positioning.
- Print-style PDF guides where you control the environment.
Sans-Serif Fonts: Where They Shine
Sans-serif fonts drop the extra strokes. Examples: Arial, Helvetica, Roboto, Inter, Open Sans.
Pros:
- Stable on almost any screen or resolution.
- Good at small sizes, especially in UI labels and navigation.
- Neutral and flexible for many niches.
Cons:
- Cheap sans-serifs can feel generic or dated.
- Some geometric sans-serifs have poor text flow for long reading.
Use sans-serif fonts for:
- Navigation, menus, labels, buttons, and error messages.
- Dashboards, admin panels, and terminal-like UIs.
- Most paragraphs on content-heavy, responsive sites.
If you only pick one category for a web app, choose a clean sans-serif. You will avoid more problems than you create.
Key Typeface Traits That Affect Readability
Once you pick serif or sans, the next step is looking at the actual design features.
X-Height and Proportion
X-height is the height of the lowercase “x” relative to the full cap height. Larger x-height often reads better on screens because lowercase letters take up more space.
- Large x-height: better readability at small sizes, good for UI.
- Very small x-height: feels elegant but can strain the eyes.
Fonts like Inter, Roboto, and Source Sans Pro intentionally use generous x-height for screen legibility.
Stroke Contrast
Contrast is the difference between thick and thin parts of the letters.
| Contrast level | Example | Impact on reading |
|---|---|---|
| Low to moderate | Roboto, Georgia | Stable on various displays, good for body text |
| High | Didot, Bodoni | Dramatic, good for big headings, poor at small sizes |
High-contrast fonts look stylish in hero banners, but they fall apart when you throw them into a 14 px paragraph on a mid-range laptop.
Letter Width and Spacing
Typefaces vary in width and built-in spacing:
- Condensed fonts fit more characters per line but hurt readability.
- Wide fonts are comfortable but can look clumsy in UI.
- Very tight letter spacing makes words feel like a wall of shapes.
- Very loose letter spacing makes reading slow and choppy.
For body text on web, aim for neutral proportions and moderate spacing. Avoid condensed fonts for main paragraphs unless you are forced by a rigid layout and know what you are doing.
If a condensed variant is the only way your design fits, the design is usually the problem, not the default font.
Distinct Letter Shapes
Ambiguous shapes are a major hit on readability. Check these characters in your candidate fonts:
- “I”, “l”, and “1”
- “O” and “0”
- “rn” combinations that can look like “m”
For technical content, coding snippets, or hosting dashboards, clarity here is non-negotiable.
Screen vs Print: Different Constraints
Reading a 2,000-word article on a 27″ monitor is not the same as scanning an SLA PDF or terms of service on paper.
On-Screen Reading
Screens have:
- Variable pixel density (phones vs cheap office monitors)
- Ambient light interactions and glare
- Zoom and responsive layouts changing line length and size
For body text on web:
- Use sans-serif or a modern serif made for screen (like Georgia, Merriweather).
- Set font size at 16 px or higher for main paragraphs.
- Use line height around 1.4 to 1.7.
- Keep line length around 60 to 80 characters.
Print or Static PDFs
Print has stable resolution and fixed sizes, so you have more flexibility:
- Serifs can work well for long paragraphs.
- Font size can be smaller (10-11 pt) without being unreadable.
- Line height can be a bit tighter than on screen.
Still, if your users are likely to print from a browser, do not depend on a fancy webfont that may not be available. Make sure common fallbacks are acceptable.
System Fonts vs Web Fonts
Big brands love custom webfonts. That does not always mean your hosting dashboard or community forum needs them.
System Fonts
System fonts are installed by default on devices. Examples:
- San Francisco (Apple platforms)
- Segoe UI (Windows)
- Roboto (many Android devices)
- Arial, Times New Roman, Courier New (cross-platform classics)
Pros:
- No extra HTTP requests, so faster perceived load.
- No flash of unstyled or invisible text if configured correctly.
- Native look that matches OS UI.
Cons:
- Less control over exact appearance across platforms.
- Branding may feel generic.
Web Fonts
Web fonts load from a server (e.g. Google Fonts, self-hosted). Examples: Inter, Lato, Poppins, IBM Plex, Source Sans 3.
Pros:
- Consistent look across platforms.
- Access to families tuned for specific use cases, like code, UI, or long-form reading.
Cons:
- Extra network requests, especially painful on slow connections.
- Layout shifts while fonts load if you configure them poorly.
- Potential licensing headaches if you scale to white-label or multi-tenant products.
If your lighthouse score is sinking and your hero font is 350 KB, start with your typography before blaming the JavaScript.
In tech products where speed and reliability matter, a system font stack is often a sane default. You can still bring character into headings or logos while leaving body text lean.
Font Pairing: How Many Fonts You Actually Need
The web is full of font pairing guides that look nice on Dribbble but collapse when you throw real content into them.
Realistically:
- 1-2 font families for most products and content sites.
- At most 3 if you have a strong reason (e.g. code font, body font, display font).
Common Pairing Patterns
| Use case | Heading font | Body font | Notes |
|---|---|---|---|
| Blog / docs | Serif or strong sans | Neutral serif or sans | Focus on comfortable long reading |
| Web app / dashboard | Same as body (different weight) | Neutral sans-serif | Fewer fonts, more consistency |
| Developer tool | Sans-serif | Sans-serif + monospace for code | Code font must be clear at small sizes |
Using Weights and Styles Before Adding Families
Before pulling a third font:
- Use font weights (regular, medium, semibold, bold) to create hierarchy.
- Use size differences and spacing, not just color.
- Reserve italics for emphasis, not for entire sections.
Often you can get all needed contrast from one well-designed family that has a wide range of weights.
Technical Setup for Readable Web Typography
Readable fonts are not just about selection. They are about how the browser renders them.
Base Settings
In CSS, start with sensible defaults:
html {
font-size: 100%;
}
body {
font-family: system-ui, -apple-system, BlinkMacSystemFont,
"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 1rem; /* 16px on most browsers */
line-height: 1.5;
color: #111;
background-color: #fff;
}
Then adjust per project, not per whim.
Line Length and Layout
Line length is a silent killer of readability. Very long lines fatigue the eyes; very short lines make reading feel choppy.
For typical layouts:
- Target 60-80 characters per line for body text.
- On wide screens, constrain content width with max-width.
Example:
.content {
max-width: 70ch;
margin: 0 auto;
padding: 0 1rem;
}
Using ch units makes the width follow the font metrics directly.
Line Height and Paragraph Spacing
Line height:
- 1.4 to 1.7 for body text, depending on font.
- Tighter for large headings (1.1 to 1.3).
Do not rely only on line breaks for separation. Add margin between paragraphs:
p {
margin: 0 0 1em;
}
Colors and Contrast
Pure black on pure white can feel harsh for some users. A very dark grey on an off-white improves comfort without sacrificing contrast.
Guidelines:
- Aim for at least WCAG AA contrast (4.5:1 for normal text).
- Avoid low-contrast “fashion grey” body text.
- Do not use pure low-saturation color for text on white backgrounds.
Example:
body {
color: #111111;
background-color: #fdfdfd;
}
.text-muted {
color: #666666;
}
Always test your colors on actual devices, not only in a design tool.
Typography for Technical and Developer Content
If your site deals with hosting, APIs, or infrastructure, typography errors become more visible. People scan logs, copy commands, and compare code blocks fast.
Monospace Fonts for Code
Your code font should:
- Clearly distinguish “0” from “O”.
- Clearly distinguish “1”, “I”, and “l”.
- Have consistent alignment for operators and numbers.
- Remain readable at 13-15 px on desktop.
Examples that work well:
- Fira Code
- JetBrains Mono
- Source Code Pro
- Consolas
Ligatures are a preference. Some developers appreciate “==” turning into a single glyph; others dislike it. Make it optional if possible.
Formatting Code Blocks and Inline Code
Readable code is more than the font:
- Use slightly smaller size than body, but not tiny (0.9-1rem).
- Add padding and background contrast for blocks.
- Allow horizontal scrolling, never wrap long code lines silently.
Example:
code, pre {
font-family: "JetBrains Mono", "Fira Code", Menlo,
Consolas, "Liberation Mono", monospace;
}
pre {
font-size: 0.9rem;
line-height: 1.5;
background-color: #111827;
color: #e5e7eb;
padding: 1rem;
border-radius: 6px;
overflow-x: auto;
}
Badly formatted code blocks can undo every other readability gain your body font provides.
Accessibility and Inclusive Typography
Accessibility is not just alt text and ARIA. Typography choices can block or help a lot of users.
Size and Zoom
Do not hard-lock font sizes in pixels across the whole site. Use relative units (rem, em) so users can scale.
- Base size: 16 px equivalent.
- Minimum size for body text: 14 px only when space is truly limited.
Test your interface at 125% and 150% zoom to see where it breaks. If everything falls apart, the problem is usually with rigid layout, not text.
Spacing for Cognitive Load
People with dyslexia or other reading difficulties often benefit from:
- More line spacing (around 1.6-1.8).
- Clear paragraph breaks and headings.
- Left-aligned text instead of justified blocks.
Avoid fully justified text on the web. It creates rivers of white space and erratic spacing unless you invest in hyphenation and more complex layout control.
All Caps and Decoration
All caps reduce word shape distinctiveness.
Guidelines:
- Use all caps only for very short labels, not for paragraphs.
- Increase letter spacing slightly for all caps headings.
- Avoid outline, glow, and drop shadows on body text.
Common Typography Mistakes in Tech Sites
I see the same set of errors on hosting provider sites, SaaS dashboards, and community forums.
Too Many Fonts
Mixing three different sans-serifs, a serif heading, and a monospace “for vibe” creates visual noise.
Better:
- One core sans-serif across UI and text.
- One monospace for code snippets.
Only add a display font when you have a clear and limited role for it.
Tiny Body Text for “Premium Look”
This shows up in marketing pages trying to copy glossy magazine design. On a 1440p monitor, 13 px grey text is not premium. It is unreadable.
Raise the base size, bring the contrast up, and accept that there is such a thing as too much “air” around tiny lines.
Poor Contrast on Brand Colors
Brand teams love faint pastel colors. That does not mean your nav bar links have to sit at 2.5:1 contrast.
Keep brand colors for accents, not for core reading. Use a darker shade for text or use the brand color for underlines and borders while leaving the text itself dark.
Ignoring Dark Mode Typography
Dark mode is common in dev tools and hosting admin panels. Text on dark backgrounds behaves differently.
Tips:
- Use slightly lighter text than pure white (#e5e5e5 instead of #ffffff).
- Use near-black backgrounds (#050509 to #111111) not pure black.
- Increase line height a bit in dark mode to counter perceived crowding.
Practical Font Choices That Do Not Get You Fired
If you want safe, readable defaults while you figure out your brand story, these patterns work.
For Technical Blogs and Docs
Serif body, sans headings:
- Headings: Source Sans 3 or Inter
- Body: Georgia, Source Serif 4, or Merriweather
- Code: Fira Code or JetBrains Mono
Or all-sans approach:
- Headings and body: Inter, 400 for body, 600 or 700 for headings
- Code: JetBrains Mono
For Hosting Dashboards and Control Panels
System stack:
- UI and text: system-ui, -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto, sans-serif
- Code/logs: Consolas, Menlo, or Source Code Pro
Custom webfont stack:
- UI and text: Inter or IBM Plex Sans
- Code: Fira Code
Keep weights limited: 400, 500, and 600 are enough for most applications.
For Communities and Forums
You want friendly, readable, and fast:
- Text: system stack or Open Sans
- Headings: same family, just larger with stronger weight
- Code blocks: monospace as above
Avoid over-styled “brand” fonts for all user-generated content. They will clash with long paragraphs and mixed languages.
Users come to a community for content, not for a typographic art project. Do not make them work to read conversation threads.
Measuring Readability in Practice
You cannot measure typography quality with a single metric, but you can observe the impact.
Behavior Signals
Track:
- Scroll depth on long content.
- Time on page for docs or guides.
- Search usage in docs (if users cannot scan, they will search more).
- Support tickets asking for clarifications that the docs already cover.
When you improve typography:
- Users often scroll deeper without extra persuasion.
- They bounce less from long troubleshooting guides.
User Feedback
Ask targeted questions, not generic “Do you like the new design?”
Better prompts:
- “Can you comfortably read a full page of this documentation?”
- “Did you have to zoom in to read this content?”
- “Are code blocks and commands clear and easy to copy?”
Compare sessions before and after font changes. If complaints go down and completion of key flows remains stable or rises, you made the right trade-offs.
When You Should Resist Brand-Driven Font Choices
Brand designers sometimes push typography that looks impressive on a static poster, then hand it to the dev team and expect it to hold a 60-page FAQ.
Red flags:
- High-contrast serif chosen for all body text.
- Condensed fonts everywhere to “fit more” on each screen.
- Tiny base size combined with very light weights.
Push back with specific examples:
- Show how the font renders on mid-range Windows laptops.
- Demonstrate code blocks and long shell commands in the proposed typeface.
- Print a page at 100 percent zoom on a basic printer.
If the brand narrative requires a specific display font, constrain it to:
- Logo
- Main hero heading
- Large marketing banners
Then use a workhorse font for everything users interact with daily.
Typography that wins awards and typography that reduces support tickets are not always the same thing.
At the end of the day, “Typography Matters” is not a slogan. It is shorthand for a set of decisions that either let people read your content without friction or quietly block them from ever reaching the value your product claims to offer.

