Imported from jpoindexter/typography-skills (
skills/typeface-anatomy/SKILL.md). Install upstream withnpx skills add jpoindexter/typography-skills --skill typeface-anatomy. Copyright stays with the author.
Typeface anatomy
The vocabulary that turns "this font looks modern" into a claim you can defend. Coles' method: read the letterforms, then say what you see.
1. When to invoke
- Comparing typefaces that look similar and needing to articulate the difference.
- Justifying a type choice from evidence.
- Reading a specimen or type-foundry page critically.
- Diagnosing why a face fails at small size or on screen.
Do not invoke to make the final choice (typeface-selection) or to combine
faces (typeface-pairing). This skill supplies the evidence those use.
2. Required context
- The actual specimen at the size and medium of use — anatomy read at 200px tells you little about behavior at 14px.
- The characters that discriminate:
a g e s t R Q 1 l I 0 O, plus the mirrored pairsq pandd b— a legibility test independent of the aperture/terminal reading below (Stocks). These carry most of a face's identity. - Whether you're judging text or display performance.
3. Invariant principles
- Anatomy is descriptive, not evaluative. "Open aperture" is an observation; "better" requires a context.
- The main Latin alignments are cap height, x-height, and baseline. Other writing systems have different points of focus — Indic scripts often hang from a headline, Chinese characters gravitate to the heart, Japanese occupy a square. Latin anatomy does not transfer. (Lupton)
- Overhang is intentional. Round letters overshoot the baseline and x-height slightly; without it they'd look smaller than flat-sided letters.
- Nominal size ≠ apparent size. Two faces at the same size look different sizes, mostly because of x-height.
- Longer ascenders and descenders need more line spacing.
4. The parts that actually matter
Vertical metrics
- x-height — height of the lowercase body. The single strongest driver of apparent size.
- Cap height, ascender, descender, baseline, overshoot.
- Em square — the design space; glyphs may be large or small within it, which is why the same point size renders differently across families.
Stroke and shape
- Stroke contrast — thick-to-thin variation. High contrast (Didone) shatters at small sizes and on low-DPI screens; low contrast survives.
- Axis / stress — the angle through the thin points of a round letter. Humanist faces have an angled axis (a pen's trace); Rational/Didone have a vertical one.
- Aperture — how open the gap is in
c,e,s,a. Open apertures aid legibility at small sizes and distance; closed apertures (many Neo-Grotesques) makec/e/sconverge. - Counter — the enclosed space in
o,e,a. Small counters fill in at small sizes and in reverse (light-on-dark). - Terminal — how a stroke ends: ball, flared, sheared, blunt.
- Serif shape — bracketed, unbracketed/hairline, slab, wedge.
Proportion
- Width — condensed to extended. Condensed buys characters per line.
- Weight.
- Optical size — whether the family provides designs cut for different sizes.
5. Context-dependent heuristics
-
Read anatomy at the size of use, in the medium of use. A face judged at 120px in a foundry specimen tells you almost nothing about its behavior at 13px in a table. Aperture and counter behavior only become decisive at small sizes.
-
Which features matter depends on the job.
Job Anatomy that decides it Small UI text Aperture, counter size, 1 l I/0 OdistinctionLong-form reading Moderate contrast, comfortable x-height, extender length Display / headline Distinctive terminals, proportion, optical size Data and tables Digit width consistency, unambiguous digits Reversed (light on dark) Weight and counter size — thins vanish, counters fill -
Screen density changes the verdict. High stroke contrast that survives on a high-DPI display can break up on a low-DPI one. Judge on the worst screen you support, not the one on your desk.
-
x-height is a trade, not a virtue. Tall x-height raises apparent size and helps at small sizes, but crowds out the features that distinguish
a/dandn/h. Judge both effects. -
Extender length drives line-height. Long ascenders and descenders need more line spacing; a face swap that changes extender length silently changes the rhythm of every paragraph.
-
Anatomy is Latin-specific. Everything in this skill assumes cap height, x-height, and baseline. For other scripts, route to
international-typographybefore applying any of it.
6. How letterforms become pixels
Everything above describes vector outlines. The reader sees pixels, and the conversion is lossy and outside your control. Rutter's framing: removing obstacles to reading "means understanding how letterforms end up represented on the screen."
Resolution sets the floor. Most laptop and desktop screens sit around 140 ppi; high-resolution displays reach a few hundred; print runs at 600 dpi and up. A face whose thins survive on paper may not have enough pixels to exist on a 140 ppi panel.
Rasterisation is lossy and subjective. Turning vectors into dots "is inherently lossy. Consequently, letterforms can be distorted or even made illegible when converted into groups of pixels." And it is subjective: different rendering engines "rasterise the font files with varying degrees of success and significantly different matrices of pixels for the same letterforms."
You are not rendering — the platform is. Each operating system has a text rendering engine (sometimes more than one), and each browser chooses which to use. So two browsers on the same OS can produce visibly different text, and that can change between OS versions and browser releases. Users can tweak the settings too.
Hinting is instructions inside the font telling the rasteriser how to fit outlines to the pixel grid. Most webfonts ship autohinted, because full manual hinting is enormously expensive. Tim Ahrens, quoted by Rutter: initial improvements come quickly, "but as you get closer to perfection the effort that is necessary to achieve improvements increases," with Verdana as the extreme case "where the hinting probably took weeks or months." Autohinting is "far more successful for anti-aliased fonts than for black and white rendering, and is much better than no hinting at all."
The platform differences that actually matter:
- Only Windows uses hinting. iOS, macOS, Android, and Linux make no use of hints. A beautifully hinted font buys you nothing on most of your traffic.
- Handheld devices use greyscale smoothing, not subpixel anti-aliasing — physical subpixels sit in a row, so subpixel antialiasing doesn't work well once the device rotates. Windows-based mobile combines greyscale smoothing with hinting.
What this means for choosing and setting type:
| Implication | Action |
|---|---|
| You cannot control rasterisation | Choose faces that survive it; don't tune for your own screen |
| High contrast and hairlines are first casualties | Prefer low–moderate contrast at text sizes |
| Small counters fill in at low resolution | Check counters at the smallest real size |
| Rendering differs per browser and per OS | Check type across platforms, not just yours |
| Reversed (light-on-dark) text reads heavier | Test it; consider a lighter weight or GRAD (see variable-fonts) |
7. Classification as visible evidence
Coles' classifications are descriptions of form, which is what makes them useful — each implies what you'll see.
⚠️ Coles opens with a warning, and it should travel with the tables. "There is no universal classification system. Just like any attempt to apply a set of genres to creative work, be it music, literature, or art, typeface classification is inherently problematic. After all, type is not biology — a typeface doesn't have a genetic code." Letterforms have "too many subtle variations and too few constants," and a new style will always arrive that fits none of your bins.
He also names why the common workaround fails: most systems "avoid this problem by associating classifications with historical periods," which categorises historical faces well but "become[s] impractical when it comes to contemporary design — what comes after postmodern? Post-postmodern?"
So use these tables to describe what you can see and defend a choice from
evidence. Don't use them to argue a face into a bin, and don't expect a foundry to
group faces the way you do (see typeface-selection on genre vs. classification).
Classes are compound, not exclusive. Across the 100 faces Coles analyses, the
classification field is frequently a compound — Display/Humanist Sans,
Humanist Slab/Serif, Display/Neo-Grotesque/Geometric Sans. A face can be
geometric in construction and display in intent. Don't force one bucket.
Serifs
| Class | Visible signals |
|---|---|
| Venetian Humanist Serif | Strongly angled axis, low contrast, sloped e bar; earliest roman forms |
| French Humanist Serif | Angled axis, more refined than Venetian, moderate contrast |
| Dutch Humanist Serif | Sturdier, larger x-height, higher contrast than French |
| Transitional Serif (incl. English) | More vertical axis, higher contrast, regular proportions |
| Rational Serif | Vertical axis, high contrast, flatter serifs |
| Didone Serif | Extreme contrast, vertical axis, hairline unbracketed serifs |
| Contemporary Serif | Large x-height, low contrast, chunky serifs, very open apertures |
| Inscribed / Engraved / Glyphic | Chiselled origin, low contrast, wedge or flared serifs |
Sans
| Class | Visible signals |
|---|---|
| Grotesque Sans | Structure like Transitional/Rational serifs, low contrast, oval rounds |
| Neo-Grotesque Sans | Closed apertures, very regular, recedes (often called "neutral" — see typeface-selection) |
| Gothic Sans | American grotesque lineage; sturdy, relatively closed workhorse forms |
| Humanist Sans | Calligraphic structure, often higher contrast than other sans, open apertures |
| Neo-Humanist Sans | Larger x-height, very open apertures, less contrast |
| Geometric Sans | Circular rounds, near-uniform stroke, single-storey a common |
| Inscriptional Sans | Sans with chiselled proportions and flared stems |
| Monospaced Sans | Fixed advance width; disambiguated digits expected |
Slabs, scripts, and the rest
| Class | Visible signals |
|---|---|
| Grotesque / Geometric / Humanist Slab | Slab serifs on the corresponding sans structure — chunky, present serifs give slabs an advantage surviving rasterization at both light and heavy weights, which is part of why they're common on screen (Lupton, Type on Screen) |
| Formal Script | Connected, calligraphic, high contrast — never for extended text |
| Casual Script | Brush or hand lettering, looser, informal |
| Blackletter / Textura | Dense angular vertical strokes; very low legibility for modern readers |
| Display | Not a construction but an intent — drawn for large sizes; usually compounds with a structural class |
Two cautions. Stocks: classification "can be useful — and useless, too" — a lens, not a taxonomy to defend. And the humanist serif subtypes are regional and historical (Venetian, French, Dutch, English); if you can't see the distinction in the specimen, don't claim it.
8. Failure patterns
| Pattern | Cause | Fix |
|---|---|---|
| Face looked elegant, muddy at 13px | High stroke contrast, small counters | Choose lower contrast for text sizes |
c, e, s blur at small size |
Closed apertures | Choose open apertures |
| Two faces "the same size" look different | Judged nominal, not apparent, size | Compare x-heights |
| Swapped face, line spacing now cramped | Longer ascenders/descenders | Re-tune line-height |
| Letters hard to tell apart at small sizes | Very large x-height crowding out distinction | Balance x-height against character |
| Applied Latin anatomy to an Arabic face | Wrong frame entirely | Route to international-typography |
| Font looks thin and washed out in dark mode | Light weight, low contrast reversed | Increase weight for reversed text |
9. Evaluation procedure
- Render
a g e s t R Q 1 l I 0 Oat the real use size. - Measure or eyeball x-height against cap height. Tall, moderate, or short?
- Check stroke contrast. Will the thins survive this size and screen?
- Check apertures on
c e s a. Open or closing? - Check counters at the smallest use size — do they fill in?
- Distinguish
1 l Iand0 O, and check the mirrored pairsq p/d b. Critical for any data, code, or ID. - Check ascender/descender length; note the line-height implication.
- Name the class from what you observed, not from the foundry's marketing.
10. Output format
Face: <name>
x-height: <tall|moderate|short> → apparent size <larger|matched|smaller> than <reference>
Contrast: <low|moderate|high> → <survives|fails> at <size>
Aperture: <open|moderate|closed>
Counters: <open|tight> at <size>
Terminals: <ball|flared|sheared|blunt>
Axis: <angled|vertical>
1/l/I and 0/O: <distinguishable|ambiguous>
q/p and d/b: <distinguishable|ambiguous>
Class (from evidence): <class>
Implications: <line-height, size compensation, suitable roles>
11. Examples
"Why does our 14px UI text feel harder to read than the old font at the same size?"
The old face was a Neo-Humanist Sans: large x-height, very open apertures, low contrast. The new one is a Geometric Sans — circular rounds, near-uniform stroke, but noticeably closed apertures on
c,e,s, and a single-storeya. At 14px those three letters begin converging, which is what's costing you. Also its x-height is shorter, so it reads smaller at identical nominal size. Either bump to 15px and accept the aperture cost, or pick a face with opener apertures for UI and keep the geometric one for display.
12. Counterexamples
- ❌ "It's a sans serif, so it's clean and modern." — Sans covers Grotesque, Neo-Grotesque, Humanist, Neo-Humanist, and Geometric, which look and behave differently.
- ❌ "The x-height is large, so it's more legible." — Larger x-height aids apparent
size but crowds out the distinguishing characteristics of
a/d,n/h. (Santa Maria) - ❌ "Both are 16px so they're the same size." — Apparent size is set by x-height and how the glyphs fill the em square.
- ❌ Judging anatomy from a foundry specimen set at 120px. Read at the use size.
- ❌ "The classification says Humanist, so it'll feel warm." — Classification is a lens over visible form, not a guarantee of feeling.
13. Source citations
- Coles, The Anatomy of Type — primary source. The warning that "there is no universal classification system… type is not biology — a typeface doesn't have a genetic code," that letterforms have "too many subtle variations and too few constants," and that period-based classification "become[s] impractical when it comes to contemporary design." Classification by visible form: stroke contrast, aperture, terminal, serif shape and x-height across Humanist/Transitional/Rational/Contemporary serif, Inscribed, Grotesque, Neo-Grotesque, Humanist, Neo-Humanist sans, and slab variants; comparing similar typefaces from evidence.
- Rutter, Web Typography — "How fonts render on screens": screen resolution limits (~140 ppi typical desktop vs 600 dpi print); rasterisation as "inherently lossy" and subjective across engines; each OS having a text rendering engine and each browser choosing one, so two browsers on one OS can differ; hinting and autohinting, with Tim Ahrens on diminishing returns and Verdana taking "weeks or months"; only Windows uses hinting; handhelds using greyscale smoothing rather than subpixel anti-aliasing because subpixels sit in a row and fail on rotation.
- Lupton, Thinking with Type 3e — anatomy and alignment; cap height, x-height, baseline as the Latin axes; other writing systems' different points of focus.
- Lupton (ed.), Type on Screen — x-height, descender overhang, and why longer extenders demand more line spacing; slab serifs' chunky endstrokes surviving rasterization well in both light and heavy weights.
- Santa Maria, On Web Typography — x-height as a tradeoff, not a virtue; letters converging as x-height grows.
- Latin, Better Web Typography — anatomy walkthrough; contrast comparison.
- Stocks, Universal Principles of Typography — metrics, the em square,
classification's uses and limits; the
1lI/0Oo/q p/d blegibility test.