Spacing & rhythm

The vertical flow most developers never adjust

Right typeface, right size, right measure, still feels wrong. The problem is spacing. ## Paragraph separation A new paragraph needs **either** a blank line **or** a first-line indent. Never both. Books use indents. Websites use line breaks. Web readers skim rather than read sequentially, so line breaks work better on screen. ### Line breaks (web default) ```css p { margin-bottom: 1em; text-indent: 0; } ``` One line of space. ### Indents (longform / editorial) ```css p { margin-bottom: 0; } p + p { text-indent: 1.5em; } ``` The first paragraph never gets an indent. Use `p + p`. ## Letterspacing: the default rule For body text: _leave it alone_. The type designer already set the spacing. ### When to add letterspacing - **Uppercase text.** Capitals need extra air. Add 0.05–0.15 em. - **Tiny text** (10px and below). A hint of tracking helps legibility. - **Large display headlines.** At 72px, body spacing feels too open. Tighten with `letter-spacing: -0.02em`. ### When _not_ to add letterspacing - **Body text in mixed case.** Don't. - **Monospaced fonts.** Tracking breaks the grid. - **Connected scripts** (handwriting, Arabic, Devanagari). Tracking breaks the joins. - **Justified text** to fill a line. ## Subhead proximity ```css h2 { margin-top: 2.5em; /* generous space above */ margin-bottom: 0.5em; /* tight space below */ } ``` ## Vertical rhythm Set `line-height` first, then derive paragraph spacing from it. A paragraph margin of one line-height produces even vertical rhythm. Baseline-grid alignment is impractical on the web. Prioritise consistent _feel_ over mathematical purity. ## Padding and margins - **Column gutters.** Wide enough that the eye doesn't jump to the adjacent column. - **Outer margins.** At least 16px of horizontal padding on mobile. - **Thumb space.** Interactive text needs enough padding to be tappable. Two to four sentences per paragraph. Shorter paragraphs invite scanning. Longer ones stall it.