Grid Systems & Typography Classics — Applied to Screens
Three print-era canons, translated. Müller-Brockmann supplies the grid method, Lupton the working typographer's toolkit, Bringhurst the detailing standard. Shared thesis: structure and restraint are what make design look intentional — the grid and the type system are decisions made once, then obeyed.
Part 1 — The Grid (Müller-Brockmann)
The grid is not decoration; it is an ordering system that expresses clarity, objectivity, and economy. It makes layouts faster to produce, easier to extend by a team, and legible to users because repeated structure teaches itself.
1.1 Construction order (do it in this sequence)
- Start from the type, not the canvas. Choose body size and line-height first; the baseline rhythm derives from line-height, and everything else derives from that.
- Define the content frame: max content width and outer margins. Screens: cap reading content at a width giving 45–75 characters per line (~640–720px for 16px body text); app shells and dashboards can use wider frames but individual text blocks stay capped.
- Divide into columns: 12 columns is the pragmatic web standard because it subdivides into 2/3/4/6 layouts. Fix the gutter (one spacing-scale unit, commonly 16–32px) and keep it constant; column width flexes, gutters don't.
- Add rows to get a modular grid when the page composes many heterogeneous blocks (dashboards, portfolios, card galleries, magazine-style homepages). A module = column × row cell; every component spans whole modules. Müller-Brockmann's guidance: more modules = more flexibility but more discipline required; fewer modules = stronger, simpler layouts. Start coarse (e.g., 12×6) and refine only under pressure.
- Bind vertical rhythm to the baseline: make spacing steps and component heights multiples of a base unit derived from the body line-height (in practice: an 8px or 4px system where body text is 16/24 and 24 = 3×8). Perfect print-style baseline locking is impractical on the web; consistent vertical multiples deliver the same perceived order.
1.2 Using the grid
- Every element aligns to grid lines — text blocks, images, cards, form fields. One misaligned element is more visible than a uniformly loose layout.
- Span whole columns. Components occupy 1..n columns plus intervening gutters; never a column and a half.
- Violate the grid only deliberately and rarely. A single full-bleed image or an element breaking the grid gains enormous emphasis because everything else conforms. Two violations per screen and the grid — and the emphasis — is gone.
- The grid persists across breakpoints as a system, not a fixed count: 12 columns desktop → 8 tablet → 4 phone, same gutters-and-margins logic, same spacing scale. Components re-span, they don't reshape arbitrarily.
- Empty modules are content. Müller-Brockmann treats unfilled cells as compositional material — resist filling every cell; asymmetric fill against a symmetric grid is the classic Swiss look.
- Photos/illustrations obey the grid too: crop images to module boundaries; consistent image sizes (1, 2, 4 modules) beat per-image "best crop".
1.3 What the grid buys you (why to enforce it)
Consistency across a team, faster layout decisions (the grid answers "where?" so you only answer "what?"), and a UI users subconsciously trust because repeated structure signals competence. If a layout feels chaotic, the first audit is: does a grid exist, and does everything sit on it?
Part 2 — Typographic Hierarchy (Lupton)
Lupton's frame: typography is an interface — the visual form of language is itself information. Hierarchy is expressed through contrast, and contrast has multiple independent dials.
2.1 The hierarchy toolkit
- You have ~6 dials: size, weight, color/contrast, case, spacing/position, and style (italic/family). Each level of hierarchy should differ from its neighbor by 1–2 dials, not all six. A heading that is bigger AND bolder AND colored AND uppercase AND indented is shouting through a megaphone — pick two.
- Define levels as a closed system: display, H1, H2, H3, body, secondary, caption/label — each with fixed size/weight/line-height/color, then reuse exactly. Two levels that differ only slightly should be merged; if you can't instantly tell H3 from H4, users can't either.
- Signal hierarchy by position and space as much as by size: indentation, space-above, alignment changes, and rules (thin lines) are all hierarchy markers that don't inflate font sizes. Small caps or letterspaced uppercase at small sizes make excellent labels/eyebrows — hierarchy without height.
- Avoid "typographic dressing" without semantic difference: every visual distinction must map to a real content distinction. If two things look different, users assume they are different.
2.2 Choosing and pairing typefaces
- One family is enough for most products — a versatile sans with many weights covers UI + marketing. Two maximum as a default rule (e.g., a serif for editorial headings + a sans for UI); pair by contrast (serif+sans, geometric+humanist), never two near-identical sanses.
- Match typeface to function: UI text needs tall x-height, open apertures, distinguishable Il1 0O, and real rendering quality at 12–16px. Display personality fonts live only at large sizes.
- Text is a texture: evaluate body settings by squinting at a full paragraph block — even grey texture is the goal; blotchy means bad spacing, wrong weight, or wrong leading.
2.3 Setting text (Lupton's working rules, screen-adapted)
- Body: 16px minimum on web; line-height ~1.4–1.6 for body, tightening as size grows (headlines 1.1–1.25).
- Line length 45–75 characters; enforce with max-width on every prose container, not on the page alone.
- One space after periods; real quotation marks and apostrophes (“ ” ’ not " '); real dashes (en dash for ranges, em dash—or spaced en dash—for breaks); ellipsis character (…) not three periods.
- Don't letterspace lowercase body text; do letterspace all-caps and small-caps labels (+3–8%).
- Left-align (ragged right) as the default for screens; watch the rag for ugly shapes; avoid justification unless hyphenation is on; never center more than ~3 short lines.
Part 3 — Typographic Detailing (Bringhurst)
Bringhurst's governing principle: typography exists to honor content. Every choice serves reading; virtuosity that draws attention to itself at the text's expense is failure. His rules are the finishing standard.
3.1 Rhythm and proportion
- Choose a base ratio and stick to it. Bringhurst builds pages on proportional systems; on screens this means a modular type scale (e.g., 1.2 or 1.25 ratio: 12.8 → 16 → 20 → 25 → 31…, rounded to a fixed set) and a spacing scale in the same spirit. Arbitrary values are the enemy of rhythm.
- Vertical motion: consistent leading is the page's heartbeat. Space between blocks should be whole multiples/simple fractions of the body leading (one blank line = 1 leading unit; heading gets, say, 2 above and 1 below — always more above than below, binding it to its content).
- Horizontal motion: the measure (45–75ch, ~66 ideal) governs comfort; if a design forces a wide measure, increase leading to compensate; if narrow (sidebars, mobile), slightly tighten leading and reduce paragraph spacing.
3.2 Micro-details that separate professional from amateur
- Hang or mark paragraphs one way, not two: either indent first lines OR space between paragraphs — never both. On screens, spaced paragraphs are the convention.
- Kerning/spacing at display sizes: large headlines need manual tightening (negative letter-spacing ~-1–2%); the bigger the type, the more visible the loose fit.
- Figures: use tabular (monospaced) figures in tables, timers, and anything that updates in place; proportional figures in running text. Right-align numeric columns.
- True small caps and real italics where the font provides them; never faux-bold, faux-italic, or scaled caps (browsers synthesize badly — load the actual weights/styles).
- Punctuation niceties: hanging punctuation for large pull-quotes; thin/narrow no-break space between values and units (24 px → 24 px as one unit — at minimum use a non-breaking space); non-breaking spaces to prevent orphaned short words after titles (Mr. Smith).
- Avoid widows/orphans in headings and key copy: a heading wrapping to leave one word on its own line looks broken — fix with
text-wrap: balance, manual breaks, or rewording. - Emphasis is singular: italic OR bold OR color — one at a time, and sparingly. A page where much is emphasized has no emphasis (converges with Refactoring UI's de-emphasize principle).
3.3 Restraint as the master rule
Bringhurst: choose faces that suit the task, then "add nothing without reason." For products: no decorative flourishes that don't encode meaning; the test of good typography is that readers absorb the content without noticing the type — until they look, and find it beautiful.
Part 4 — Unified screen workflow (all three books)
Apply in this order when designing or auditing any screen:
- Type first: body size (≥16px web), line-height, measure cap. Derive the spacing unit from the line-height (16/24 body → 8px unit; small UI can justify 4px).
- Scale second: a modular type scale rounded to fixed values; a spacing scale of multiples of the unit; both defined as tokens, never improvised.
- Grid third: margins, 12-column (→8→4 responsive) with fixed gutters from the spacing scale; add rows (modular grid) for card-heavy compositions.
- Hierarchy fourth: map content roles to a closed set of type levels; each adjacent pair differs by 1–2 contrast dials; more space above headings than below.
- Detail last: real punctuation, tabular figures in data, letterspaced caps for labels, balanced heading wraps, tightened display type, loaded (not synthesized) weights.
- Break the grid once, if at all, for the single element that deserves the emphasis.
Part 5 — Reference tokens (a defensible default system)
Concrete starting values embodying all three books; adjust deliberately, never ad hoc.
Type scale (1.25 ratio, rounded):
- caption/label: 12px, line-height 16, +5% letterspacing if caps
- secondary: 14px / 20
- body: 16px / 24 (the base unit source)
- large body / H4: 18px / 28
- H3: 20px / 28, weight 600
- H2: 25px / 32, weight 600–700, letterspacing -0.5%
- H1: 31px / 36, weight 700, letterspacing -1%
- display: 39–48px / ~1.1, weight 700–800, letterspacing -1.5–2%
Spacing scale (8px unit from 24px body leading): 4, 8, 12, 16, 24, 32, 48, 64, 96.
Grid: content max-width 1200–1280px; margins 24px (mobile 16px); 12 columns / 24px gutters desktop; 8 columns tablet; 4 columns / 16px gutters phone. Prose max-width 65ch regardless of container.
Heading spacing: space-above = 2× space-below (e.g., H2: 48 above / 24 below). Paragraph spacing = 1 leading unit (24px); no first-line indents on screens.
Numbers: font-variant-numeric: tabular-nums on tables, counters, prices in lists; right-align numeric columns; align mixed-size number+unit pairs on the baseline.
Part 5b — Dark mode and screen-rendering adjustments
Print rules need adaptation for emissive screens; the classics' principles still decide the direction:
- Light text on dark appears heavier/blurrier (halation). Compensate: drop one weight step (400 → 350/300 territory if available, or keep 400 but avoid 500+ body), or add +0.5–1% letterspacing on dark backgrounds.
- Pure white on pure black vibrates. Use off-white text (~#E6E6E6-range) on near-black surfaces (#0E–#16 range) — Bringhurst's "honor the reading" applies to contrast comfort, not just ratio minimums.
- Thin hairline rules disappear or glare on dark. Prefer background-shade separation between surfaces; where lines are needed, use low-opacity white (~8–12%).
- The grid and scale are theme-independent: identical columns, spacing, and type levels in both modes; only color tokens change. If dark mode needs layout changes, the light layout was leaning on color to do structure's job.
Part 6 — Common violations and their fixes
- "It looks scattered": no grid, or components sized to content whims. Fix: snap every block to columns; standardize card sizes to module multiples.
- "The headings float": equal space above and below. Fix: double the space above.
- "Text feels tiring": measure over 80ch or leading too tight for the width. Fix: cap at 65–75ch, or raise line-height toward 1.6.
- "Hierarchy is mushy": six near-identical text styles. Fix: collapse to a closed set; force each adjacent pair to differ visibly on 1–2 dials.
- "Headline looks cheap": default tracking at 40px+. Fix: -1–2% letterspacing, tighter leading, check the rag/wrap.
- "Table looks jittery": proportional figures and left-aligned numbers. Fix: tabular figures + right alignment.
- "Fonts clash": two similar sanses, or synthesized bold/italic. Fix: one family with real weights, or a genuinely contrasting pair.
- "Feels dated/fussy": decoration without meaning — gradients on text, multiple rules, mixed alignments. Fix: Bringhurst's razor — remove everything that has no reason.
Quick audit checklist
- A real grid exists: fixed gutters, whole-column spans, everything aligned; ≤1 deliberate violation per screen
- Vertical spacing is multiples of one base unit tied to body line-height
- Prose measure 45–75ch everywhere text runs long; wide measure compensated with leading
- Closed type-level system; adjacent levels differ by 1–2 dials; no orphan near-duplicate styles
- ≤2 type families; real weights/italics loaded; UI face legible at 12–16px with distinct Il1 0O
- Headings bound to their content (space-above > space-below); no one-word heading wraps
- Smart quotes, correct dashes, ellipsis character, non-breaking spaces where needed
- Tabular figures + right alignment in numeric columns; caps labels letterspaced
- Nothing decorative without a reason; the type disappears into the reading