Good sans-serif fonts
What makes a sans-serif font good?
- Context-free recognition of “I” (capital “eye”) and “l” (lowercase “ell”) and “1” (digit one)
- Context-free recognition of “O” (capital “oh”) and “0” (digit zero) and “o” (lowercase “oh”)
- Availability of at least normal, bold, italic, and bold italic for formatting flexibility
- Permissive licensing (libre; free as in speech) to prevent legal issues during use
Background
Many fonts render “I” (capital “eye”) practically identical to “l” (lowercase “ell”), or “l” (lowercase “ell”) practically identical to “1” (digit one). Even those fonts that have three distinct glyphs, tend to let either “I” (capital “eye”) or “l” (lowercase “ell”) be a non-descript tall rectangle, meaning that the reader needs to know the font well, to determine which character the glyph represents. The problem is even worse if a text contains any “|” (vertical pipe) Similarly, many fonts have a “0” (digit zero) which is either identical to, or a narrower variant of “O” (capital “oh”), or have “0” (digit zero) virtually identical to “o” (lowercase “oh”). Again, without familiarity, or comparing “O” (capital “oh”) and “0” (digit zero) side-by-side, it can be hard to tell which is which. These problems exist with almost all sans-serif fonts today. A historical overview is given by Charles Bigelow in Oh, oh, zero!.
A solution
To enable instant recognition of each character, “I” (capital “eye”) must be fitted with slab-serifs (horizontal bars), while “l” (lowercase “ell”) gets a finial, “1” (digit one) maintains a prominent slanted top serif, and “0” (digit zero) has an inner slash or dot. Incidentally, this also avoids any confusion with “|” (vertical bar). While this may be obvious, very few fonts in fact do this. The only ones I’ve found living up to all the above requirements are (with links to repositories):
- Atkinson Hyperlegible (grotesque)
- Go (humanist)
- IBM Plex Sans1 (grotesque)
- Recursive Sans Casual1 (cursive)
- Recursive Sans Linear1 (slab-serif)
- Source Sans 32 (grotesque/humanist)
Notes:
- Requires font-feature-settings: 'zero' for slashed “0” (digit zero).
- Requires font-feature-settings: 'ss01', 'zero' for barred “I” (capital “eye”) and slashed “0” (digit zero).
Some editors do not allow choosing font features, which makes even these fonts inadequate.
Font samples
Click on a sample to make generic text on this page use that font: