Skip to main content
WCAGrules
Quick navigation

Text Spacing

Set line height to 1.5 times the font size, spacing after paragraphs to 2 times, letter spacing to 0.12 times and word spacing to 0.16 times. Change nothing else, and nothing on the page may be lost. That is the whole rule. You do not have to ship those values. You have to survive them. The obligation has two halves and most teams only think about one. Do not break when the spacing widens, and do not block the widening in the first place. The rule reaches markup you style with CSS, so it does not apply to PDF, to images of text, to text drawn on a canvas element, or to captions burned into a video frame.

Why it matters

For a dyslexic reader, spacing is what stops the letters crowding each other. Widening it is how they read at a normal pace instead of decoding word by word. Low-vision readers widen it for a different reason, because the gaps are what let the eye find the start of the next line. Neither group is asking you to design spacious typography. They are asking you not to break when they bring their own settings. A page that survives this survives most other user stylesheets too, including somebody swapping in a wider font, so the work pays off well past this one rule.

Who this rule protects

Low-vision readers who need bigger gaps between lines, words and letters to read at all. Dyslexic readers who widen spacing to read faster. Anyone using a reading-aid extension, a bookmarklet or a custom stylesheet, which is how these changes usually get made, because no mainstream browser offers all four settings for an ordinary page.

How to check it yourself

  1. Apply the standard override with a bookmarklet or browser developer tools. Line height 1.5 times the font size, paragraph spacing 2 times, letter spacing 0.12 times, word spacing 0.16 times.
  2. Change nothing else. The rule sets those four properties and no others, so a tool that also swaps the font is testing something the rule never asked for.
  3. Scan the page for clipped labels, lines that overlap each other, and button text that escapes outside its own button.
  4. Compare text that was already truncated against text that truncates only after the override. The first is a design choice. The second is a failure, unless the full text is reachable another way.
  5. Check inline style attributes for these four properties pinned below the required values with !important. That blocks the override rather than breaking under it.
  6. Stop at the stated values. A user may go further and the rule does not follow them, so a page that breaks at line height 3 is not failing.

Failures we see most often

  • Fixed-height cards clip their own last line of text the moment spacing increases beyond the default.
  • Buttons built to an exact pixel height shear off part of an enlarged label rather than growing to fit it.
  • Headers set to overflow hidden swallow letters whole once wider spacing pushes text past the original boundary.
  • Text that is absolutely positioned lands on top of the paragraph underneath it once both of them grow.
  • A style attribute pins letter spacing to zero with !important, so the reading extension trying to widen it cannot win, because an extension injecting author-origin styles has nothing left to outrank it with.
  • Column headers truncate under the override with no way to see the full text anywhere.

Who this one is for

Read from this rule's own note above, so the grouping and the note cannot disagree.

How this one is tested

We list 3 ACT rules against 1.4.12. Each one defines exactly what a checker looks at, which is how automated tools decide what to flag. Each one also checks a slice, so passing every rule here is not the same as meeting the criterion, and a rule can be proposed rather than approved or need a person to finish it. The note beside each says which.

How to fix it

  • Avoid fixed heights on any container that holds text, and let the box grow along with its content instead.
  • Reserve overflow hidden for decoration only, and never apply it to a container holding text a user needs to read.
  • Size text containers in em units, so the box is measured in units of its own type and grows when the type does.
  • Where a column genuinely cannot grow, truncate deliberately and reveal the full text on focus or activation. Or link to a page that shows it whole.
  • Never put these four properties in a style attribute with !important. Put them in a stylesheet, where a later stylesheet or a more specific selector can still win, which is what an injected reading extension has to rely on.
Step-by-step fix guides (6)

Passes vs. fails

A general illustration of the pattern rather than a test of 1.4.12. Passes: the box grows with spacing. Fails: fixed height eats the text.

Passes

Cards grow taller automatically as spacing increases, and every word on the page stays fully visible.

Fails

With the spacing override applied, card titles clip mid-word and call-to-action labels vanish outside their buttons.

In audits and lawsuits

We apply the standard spacing override to every audited page and photograph exactly what clips. This rule is easy to pass by construction and just as easy to fail invisibly, because testing at the default spacing never triggers it. The automated half is narrow and precise. What a scanner can check is whether a style attribute pins one of these properties below the required value with !important. The cascade is the reason that placement matters, and the reason is not the one usually given. A user's own !important still beats an author's, wherever the author put it. What an inline !important beats is every other author-origin declaration, and that is the origin most reading extensions and bookmarklets have to inject at. So the pin blocks the tools people actually use, rather than the user stylesheet the standard imagines. A scan naming this rule is pointing at inline styles, and the clipping half is still a person's job.

Go somewhere useful

Find tools, resources and your workspace.

29 destinations