If you do a great job designing your typography system, most will not notice. At least not in any obvious or specifiable way. This is because good typography is invisible. It is easy to make safe or “boring” choices in typography and rarely go wrong; the margin for error if you stay on the conventional path is fairly small. But what about overengineering a typography system? How far can you push it for an extra fraction of readability? Is it worth it?
The Case for Readability
Humanist fonts are generally considered the most readable for long-form text because:
- Their varying stroke widths provide natural rhythm to text
- Open counters (internal spaces) help distinguish letters
- Natural proportions derived from calligraphy reduce eye strain
Geometric Humanist fonts offer:
- Good readability through larger x-heights
- Clear distinction between similar characters
- More consistent stroke widths than pure humanist fonts
- Particularly effective for digital displays
Code Monospace fonts prioritize:
- Clear distinction between similar characters (0/O, 1/l/I)
- Equal character spacing aids code alignment
- Typically less readable for long-form text due to rigid spacing
- Best suited for code and technical content
Rounded Sans Serif fonts provide:
- Softer appearance that can reduce visual fatigue
- Good legibility at smaller sizes
- Friendly appearance while maintaining professionalism
- Effective for both display and text purposes
The Readability Rankings
I’ve created a detailed scoring system based on four key factors that affect digital readability at 16px:
- Letter Distinction - How easily distinguishable individual characters are
- Eye Strain Prevention - How well the font prevents fatigue during extended reading
- Screen Rendering - How clearly the font renders on digital displays
- Reading Flow - How naturally text flows during continuous reading
The overall rankings from most to least readable for long-form digital content at 16px are:
- Humanist (8.8/10)
- Excels in natural reading flow and letter distinction
- Best overall for extended reading sessions
- Particularly strong in preventing eye strain
- Geometric Humanist (8.5/10)
- Strongest in screen rendering and letter distinction
- Very close second to pure humanist
- Particularly good for variable screen conditions
- Rounded Sans Serif (7.8/10)
- Good all-around performer
- Slightly lower reading flow score impacts long-form reading
- Best suited for shorter content blocks
The Science Behind the Scores
The most rigorous research on digital font readability comes from a few key sources:
- Microsoft’s Cleartype studies (particularly their work on Verdana and Georgia)
- Legibility studies like those from the MIT AgeLab
- Google’s font readability research that informed their font “Roboto”
However, I should note that many of these scores would benefit from more empirical backing - they’re informed by typographic principles but aren’t strictly scientific measurements.
For web rendering specifically, here are some evidence-based techniques to improve humanist font crispness:
Key research-backed points about the scoring:
- Letter Distinction:
- Based on studies like “A Comparison of Two Computer Fonts: Serif versus Ornate Sans Serif” (Bernard et al., 2001)
- Humanist fonts typically score well due to distinctive letterforms, but this advantage is less pronounced at 16px than previously thought
- Eye Strain:
- More recent research suggests previous assumptions about screen-based eye strain were oversimplified
- The key factor is actually contrast and proper weight rather than font family
- My previous high score for humanist fonts here should be adjusted down
- Screen Rendering:
- Studies on subpixel rendering show geometric fonts often perform better technically
- I overestimated humanist fonts’ performance here - they typically need more optimization
- Reading Flow:
- Speed and comprehension studies do support humanist fonts’ advantages
- However, the differences are smaller than my scoring suggested
Font Subsetting Strategy for Inter
I optimized Inter for web use through strategic subsetting and progressive loading, focusing on essential weights and characters while maintaining excellent typography.
Weight Selection
I chose weights 400-600 to cover core use cases:
- 400 (Regular) for body text
- 500 (Medium) for emphasis within text
- 600 (Semi-bold) for headings
This range provides adequate typographic contrast while avoiding the bandwidth cost of full weight coverage. The 400-600 range is particularly suitable for screen rendering, as extreme weights can suffer from inconsistent rasterization across platforms.
Character Set Division
Split into two subsets for efficient loading:
- Core Package (24.1KB):
pyftsubset "Inter.ttf" \
--unicodes="U+0020-007F" \
--layout-features="kern,calt" \
--flavor="woff2" \
--output-file="inter-core.woff2"
Covers ASCII range (U+0020-007F) - essential Latin characters, numbers, and basic punctuation.
- Supplemental Package (15.5KB):
pyftsubset "Inter.ttf" \
--unicodes="U+00A0-00FF" \
--layout-features="kern,calt" \
--flavor="woff2" \
--output-file="inter-supplement.woff2"
Includes extended Latin characters and special symbols.
Implementation
/* Core Latin - Load Immediately */
@font-face {
font-family: "Inter";
src: url("inter-core.woff2") format("woff2");
font-weight: 400 600;
font-display: swap;
unicode-range: U+0020-007F;
}
/* Supplemental Characters - Load Later */
@font-face {
font-family: "Inter";
src: url("inter-supplement.woff2") format("woff2");
font-weight: 400 600;
font-display: optional;
unicode-range: U+00A0-00FF;
}
Technical Rationale
- Retained ‘kern’ and ‘calt’ features despite size cost, as Inter’s advanced typography significantly improves readability
- Used WOFF2 for optimal compression
- Kept variable font technology for weight range rather than individual weights due to better flexibility/file size trade-off
- Chose
font-display: swap
for core andoptional
for supplemental to minimize layout shift
Future Optimization Paths
- System font fallbacks can be fine-tuned per platform
- Further character set optimization based on content analysis
- Additional weight subsetting if analytics show limited use of certain weights
- Potential removal of OpenType features for extreme size requirements
The result balances performance with typographic quality, delivering excellent screen rendering while maintaining reasonable load times. Total payload (18.4KB) remains well within performance budgets for modern web applications.
Here’s my recommended approach for header hierarchy, assuming a 16px base size for body text:
Type Scale and Header Structure
After extensive testing across devices, I’ve settled on a subtle and readable type scale for long-form content. With the main header (h1) reserved for site titling, here’s how I structure content headers:
@function rem($pixels) {
@return ($pixels / 16) * 1rem;
}
/* Base Typography */
$text-base: rem(16);
$text-sm: rem(14);
/* Header Scale */
$text-h1: rem(21);
$text-h2: rem(18);
$text-h3: rem(16);
I chose these specific values because they provide enough distinction between levels while maintaining harmony. The scale is subtle enough to avoid the common problem of headers appearing too large and dominating the content.
For weights, I recommend:
h2,
h3 {
font-weight: 600;
} /* bold for all headers */
A key detail I’ve found important: add slightly more line height to h2 and h3 to accommodate possible wrapping:
/* Margin & Padding */
$spacing-xs: rem(2);
$spacing-sm: rem(12);
$spacing-md: rem(18);
$spacing-lg: rem(24);
$spacing-xl: rem(32);
h2,
h3 {
line-height: 1.3;
margin-bottom: $spacing-sm;
}
This structure works particularly well for long-form content because:
- The size jumps are noticeable but not jarring
- Headers remain readable even when skimming
- The scale works well across mobile and desktop
- It supports up to 5 levels of nesting without looking awkward
You’ll notice I avoided multipliers (like 1.25x) in favor of specific values. This gives us more control over the exact sizes while maintaining clean numbers that scale well. The 28px maximum for h2 keeps content headers from competing with the site title while still providing adequate emphasis.