Part Two — Typography Chapter Eight

The Type Scale

A type scale is not a list of sizes. It is a system of proportional relationships that makes every typographic decision coherent with every other.

Open any well-designed book and compare the sizes of its typographic elements — the body text, the captions, the subheadings, the chapter titles. You will find that those sizes are not arbitrary. They are related to each other by proportion: the headline is roughly twice the body size, the caption is roughly three-quarters, the subheading falls somewhere between the two. These relationships are rarely accidental. They reflect a type scale — a system of sizes derived from a consistent ratio — and it is this proportional consistency that gives a well-typeset document its sense of visual order.

Without a scale, typographic sizing is guesswork. You adjust sizes case by case, each decision made in isolation, and the result is a document that may look acceptable in parts but lacks coherence as a whole. The sizes are neither clearly the same nor clearly different; they just are what they are. With a scale, every size decision is an answer to the same question: where does this element fall in a system that is consistent throughout?

This chapter explains how type scales work, how to construct one, and how to implement it in CSS in a way that makes the system both visible and easy to maintain.

· · ·

Proportional systems Why ratio matters more than size

A type scale is built around a ratio — a number that describes the relationship between consecutive steps. Start with a base size, multiply by the ratio to get the next size up, multiply again to get the one above that. Divide by the ratio to get smaller sizes. Every step is proportionally related to every other step, and the whole system feels coherent because it is built on a single underlying relationship.

The most commonly used ratios in typography have been borrowed from music theory and classical geometry, because the same proportions that produce harmonious intervals in sound produce harmonious relationships in space. A ratio of 1.5, the perfect fifth in music, produces a scale that feels spacious and unhurried. A ratio of 1.333, the perfect fourth, produces a tighter, more compact scale. A ratio of 1.618, the golden section, sits between them — generous but not sprawling. For practical document typography, ratios between 1.2 and 1.618 cover most useful scenarios.1

The choice of ratio depends on how many distinct levels of hierarchy your document requires, and how much visual separation you want between them. A document with only three or four typographic levels — body, subheading, heading, and perhaps a display size — can use a larger ratio, because you need strong contrast between relatively few steps. A document with six or seven levels needs a smaller ratio, because a large ratio would produce extremes at the top and bottom of the scale that are too far apart to work together gracefully.

For most document work — books, reports, academic papers — a ratio between 1.25 and 1.414 produces a usable scale with five to seven steps. The scale used throughout this book is built on a ratio of approximately 1.3, producing steps from a small caption size through to a chapter title, with the body text anchoring the middle of the range.

RATIO 1.25 — MINOR THIRD RATIO 1.414 — AUGMENTED FOURTH RATIO 1.618 — GOLDEN SECTION Body Subheading Section Chapter Display 13px 16px 20px 25px 32px Body Subheading Section Chapter Display 13px 18px 26px 37px 52px Body Subheading Section Chapter 13px 21px 34px 55px

Figure 8.1 — Three scale ratios compared. The same five levels rendered at three different ratios, each starting from a 13px base. Left: the 1.25 ratio (minor third) — compact steps, modest contrast between levels, suitable for documents with many hierarchical levels. Centre: the 1.414 ratio (augmented fourth, the square root of 2) — strong contrast, wide range, suitable for most book and report work. Right: the 1.618 ratio (golden section) — dramatic jumps between levels, only three or four usable steps before sizes become extreme. The right choice depends on how many levels of hierarchy your document needs.

· · ·

Building a scale in CSS Custom properties and the rem unit

The most effective way to implement a type scale in CSS is with custom properties — CSS variables — defined at the :root level. This approach makes the scale explicit, readable, and easy to adjust: all size relationships are visible in one place, and changing the base size or the ratio propagates through the entire document automatically.

The foundation is a base font size set on the html element, and a set of named scale steps defined as rem values. The rem unit — root em — is always relative to the base font size of the document, not to the size of the parent element. This makes it predictable in a way that em is not: a rem value means the same thing wherever it appears in the document, which is exactly what you want for a consistent scale.2

Here is the scale used for this book, implemented as CSS custom properties:

/* ── Base size ─────────────────────────────── */
html {
  font-size: 16px; /* 1rem = 16px throughout */
}

/* ── Type scale — ratio ≈ 1.3 ──────────────── */
:root {
  /* Below base */
  --text-xs:    0.72rem;   /* 11.5px — footnotes, small labels */
  --text-sm:    0.85rem;   /* 13.6px — captions, secondary text */

  /* Base */
  --text-base:  1.175rem;  /* 18.8px — body text */

  /* Above base */
  --text-md:    1.32rem;   /* 21.1px — lead paragraphs, intro text */
  --text-lg:    1.65rem;   /* 26.4px — subheadings */
  --text-xl:    2rem;      /* 32px   — section headings */
  --text-2xl:   2.8rem;    /* 44.8px — chapter titles */
  --text-3xl:   3.75rem;   /* 60px   — display / part titles */
}

With this in place, every typographic element references a named scale step rather than a hardcoded size. A caption uses font-size: var(--text-sm). A chapter title uses font-size: var(--text-2xl). The names make the hierarchy legible directly in the CSS, and if you decide to adjust the scale — shifting the base size larger for a different trim, or compressing the steps for a more compact document — you change the values in one place and the whole document responds.

The Compositor's Garden — type scale ratio ≈ 1.3 · base 16px
--text-3xl
3.75rem / 60px
The Garden Part title /
display
--text-2xl
2.8rem / 44.8px
Chapter heading Chapter
opener
--text-xl
2rem / 32px
Section heading Major
section
--text-lg
1.65rem / 26.4px
Subheading text Sub­heading /
italic h2
--text-md
1.32rem / 21.1px
Chapter introduction paragraph Lead /
intro
--text-base
1.175rem / 18.8px
Body text — the anchor of the scale. Everything else is defined in relation to this. Body text
← anchor
--text-sm
0.85rem / 13.6px
Captions, secondary text, footnote body Caption /
secondary
--text-xs
0.72rem / 11.5px
Running headers · labels · folios Labels /
UI text
· · ·

Applying the scale consistently A single source of truth for every size decision

Defining a scale is only half the work. The other half is discipline: using the scale for every size decision in the document, and never introducing an ad-hoc size outside of it. This discipline is what produces coherence. A document where every element references a named scale step feels resolved and considered. A document where some elements use scale steps and others use arbitrary values — a subheading at 1.4rem, a caption at 11px, a running header at 0.68rem — feels inconsistent at a level the reader cannot name but feels immediately.

In practice, this means your CSS should contain no font-size declarations with hardcoded values, only references to scale custom properties. Every element that needs a size gets it from the scale. If no scale step fits precisely, you either adjust the scale or reconsider whether the element genuinely needs a distinct size — often it does not, and assigning it the nearest scale step is the better solution.

The only legitimate reason to use a size outside the scale is a deliberate, considered exception — a specific element that genuinely needs to fall between two steps, or a one-off display element whose size is determined by context rather than hierarchy. These exceptions should be rare, should be commented in the CSS, and should feel slightly uncomfortable to make. If they feel comfortable, the discipline has slipped.

Here is how the scale maps to the typographic elements of The Compositor's Garden:

/* ── Document elements — scale assignments ─── */

/* Display / part opener */
.part-title     { font-size: var(--text-3xl); }

/* Chapter opener */
.chapter-title  { font-size: var(--text-2xl); }
.chapter-intro  { font-size: var(--text-md);  }

/* Body headings */
h2              { font-size: var(--text-lg);  }

/* Body text */
body, p         { font-size: var(--text-base); }

/* Supporting elements */
figcaption      { font-size: var(--text-sm);  }
.footnote       { font-size: var(--text-sm);  }

/* Navigation / labels */
.running-head   { font-size: var(--text-xs);  }
.folio          { font-size: var(--text-xs);  }
.chapter-label  { font-size: var(--text-xs);  }
On Spacing In which we consider the nature of space. The space between letters --text-xs running head --text-2xl chapter title --text-md chapter intro --text-base body text --text-lg subheading --text-sm caption --text-xs folio

Figure 8.3 — The scale applied to a document page. Every typographic element on the page references a named scale step. The scale custom property names appear as annotations — running headers and folios share --text-xs; body text uses --text-base; the subheading uses --text-lg; the chapter title uses --text-2xl. Nothing is sized arbitrarily. Every size is an answer to the question: where does this element belong in the hierarchy?

· · ·

Adjusting the scale for print From pixels to points

The scale described above is defined in rem units relative to a 16px base, which works well for screen display and Paged.js browser preview. For print output — the final PDF — you may want to convert the sizes to points, which are the conventional unit for print typography. One point is 1/72 of an inch; at standard screen resolution, 1 point ≈ 1.33 pixels.

The simplest approach is to change the base font size on the html element to a point value within a @page context, and let the rem-based scale adjust proportionally. Setting font-size: 10pt on the html element means that 1rem = 10pt, and your scale steps become: 0.72rem = 7.2pt, 1.175rem = 11.75pt, 1.65rem = 16.5pt, and so on — all proportionally correct and expressed in the conventional units of print typography.

/* ── Print-specific base size ───────────────── */
@media print {
  html {
    font-size: 10pt; /* 1rem = 10pt for print */
  }
}

/* ── Within Paged.js ────────────────────────── */
/* The scale custom properties remain unchanged.  */
/* Only the base changes — all steps scale with it */

/* Result at 10pt base:                          */
/* --text-base:  1.175rem = 11.75pt (body)       */
/* --text-lg:    1.65rem  = 16.5pt  (subhead)    */
/* --text-2xl:   2.8rem   = 28pt    (ch. title)  */
/* --text-xs:    0.72rem  = 7.2pt   (labels)     */

This single change — adjusting the base and leaving everything else untouched — is the practical value of building the scale on rem units rather than fixed values. The proportional relationships are preserved exactly; only the absolute sizes shift to suit the output medium.

· · ·

Breaking the scale intentionally When and how to deviate

A type scale is a tool, not a rule. There will be moments in any document where the scale does not produce the size you need — where the next step is too large and the step below it too small, or where a specific display element requires a size determined by compositional factors rather than hierarchical position. These moments are legitimate, and handling them well is part of typographic judgment.

The key is to break the scale with intention and restraint. An intentional break is one where you have asked whether any scale step could serve the purpose, concluded that none of them can, and chosen a specific value for a specific reason you could articulate. A careless break is one where you simply tried a few numbers until something looked right without engaging the question at all.

The most common legitimate reasons to break the scale are: a drop cap whose size is determined by the number of lines it should span, not by its hierarchical position; a large display numeral on a chapter opener whose size is constrained by the page geometry; a pullquote set at a size calculated to produce a specific number of characters per line. In each case, the size is responding to a constraint outside the typographic hierarchy. In each case, the deviation should be commented in the CSS.

The most common illegitimate reason is comfort with round numbers. A designer reaches for 24px because it is a satisfying number, when var(--text-lg) at 26.4px would have served just as well and maintained the scale. Round-number comfort is the enemy of systematic thinking. If your scale step is close to what you want, use the scale step.

Without a scale — arbitrary sizing
Part Two
Typography
Chapter Six
Understanding Type
Before you can choose typefaces well, you need to be able to read them.
A typeface is not a neutral vessel for words. Before a single word is read, the typeface has already communicated something — about the register of the document, the era it belongs to.
Caption explaining something important about this figure and what it demonstrates.
Sizes used: 9.5px, 30px, 10.5px, 22px, 17px, 14.5px, 10px — seven different values, no consistent ratio. Feels roughly right but has no underlying logic.
With a scale — systematic sizing
Part Two
Typography
Chapter Six
Understanding Type
Before you can choose typefaces well, you need to be able to read them.
A typeface is not a neutral vessel for words. Before a single word is read, the typeface has already communicated something — about the register of the document, the era it belongs to.
Caption explaining something important about this figure and what it demonstrates.
Sizes used: --text-xs (×2), --text-2xl, --text-xl, --text-md, --text-base, --text-sm — seven elements, five distinct scale steps. Every size is a considered position in a proportional system.

Figure 8.4 — With and without a scale. The same document structure, sized with arbitrary values on the left and with scale custom properties on the right. The visual difference is subtle — both look roughly acceptable — but the underlying difference is significant. The left-hand version has no logic that could be applied consistently across a document of many pages. The right-hand version has a system: any new element can be placed in the hierarchy by choosing the appropriate scale step.

Project checkpoint

The type scale for The Compositor's Garden is now defined. The custom properties are in the stylesheet, the scale steps are mapped to document elements, and the print base size is specified. The document has typefaces and proportions. What it does not yet have is rhythm — the vertical spacing system that determines how those sizes relate to each other across the page. That is the subject of Chapter 9.

If you are following along with the project files, this is a good moment to open the project HTML in your browser and verify that the typefaces are loading correctly and the scale steps look as expected at browser preview size. Small adjustments at this stage are much easier than adjustments once the full spacing system is in place.

· · ·

The type scale is the backbone of the typographic system — the thing that makes every size decision part of a coherent whole rather than an isolated choice. With it in place, we move to the next layer of the system: vertical spacing. Chapter 9 covers line-height, paragraph spacing, letter-spacing, and word-spacing — the distances between things, which are as important as the things themselves.