WCAG 1.4.12: Text Spacing
Some readers need more air between lines, words, and letters to read comfortably. Text Spacing does not ask you to design at those values — it asks that when a user overrides line height, paragraph spacing, letter spacing, and word spacing, your page keeps working: nothing gets clipped, cut off, or hidden. The most common failure is a fixed-height box that clips the taller text, so the whole rule really comes down to building containers that can grow.
The success criterion, in full
In content implemented using markup languages that support the following text style properties, no loss of content or functionality occurs by setting all of the following and by changing no other style property: line height (line spacing) to at least 1.5 times the font size; spacing following paragraphs to at least 2 times the font size; letter spacing (tracking) to at least 0.12 times the font size; and word spacing to at least 0.16 times the font size. Exception: human languages and scripts that do not make use of one or more of these text style properties in written text can conform using only the properties that exist for that combination of language and script.
Why text spacing matters
Tightly packed text is a genuine barrier. People with dyslexia often find that letters and words visually crowd together and swap places; adding space between characters and lines settles the text and makes it far easier to read. People with low vision lose their place on a densely set page and rely on extra line and paragraph spacing to track from one line to the next. For these readers, the ability to open up the text is not a preference — it is what makes reading possible at all.
Browser extensions and reading tools let people apply exactly these adjustments across every site they visit. WCAG 1.4.12 makes sure that when they do, your content does not fall apart. The failure is almost always silent: a button label gets clipped, a card cuts off its last line, a navigation item hides half its text — and the user has no idea information is missing.
The good news is that a layout built with flexible, content-sized containers passes 1.4.12 without any special effort. The rule mostly exposes rigid designs that assume text will always be exactly the size and spacing the designer chose.
The four metrics
To pass, your content must survive a user setting all four of these values at once, while changing nothing else. Each value is expressed relative to the font size, so it scales with whatever text is on the page.
1. Line height (line spacing)
at least 1.5 × the font sizeWhen the user sets the space between lines within a paragraph to 1.5 times the font size, every line of running text must stay visible and readable. Cramped 1.0 or 1.2 line height is hard for many people with dyslexia or low vision to track, so they increase it — and your layout has to absorb the extra height without clipping, overlapping, or hiding text.
2. Spacing after paragraphs
at least 2 × the font sizeThe gap following each paragraph must be able to grow to twice the font size. Clear separation between blocks of text helps people who lose their place easily find where one idea ends and the next begins. Your containers must let paragraphs push apart by this much without content being cut off at the bottom of a fixed box.
3. Letter spacing (tracking)
at least 0.12 × the font sizeUsers must be able to widen the space between individual characters to 0.12 times the font size. Extra letter spacing reduces the visual crowding that makes letters run together for some readers with dyslexia or low vision. Buttons, labels, and headings all have to accommodate the wider text rather than truncating it with an ellipsis.
4. Word spacing
at least 0.16 × the font sizeThe space between words must be able to increase to 0.16 times the font size. Wider word spacing makes it easier to distinguish where one word stops and the next starts. As with the other three metrics, the requirement is not that you set this value — it is that nothing breaks when the user does.
Remember the four numbers: line height 1.5, paragraph spacing 2em, letter spacing 0.12em, word spacing 0.16em. The user applies all four together — your job is to make sure nothing breaks.
You do not have to set these values
The biggest misconception about 1.4.12 is that it forces every site to use line-height: 1.5 and the other values. It does not. You are free to design your typography however you like. The criterion is a resilience test: it checks that if a reader overrides these four properties, your layout adapts instead of clipping or hiding text.
In practice that shifts the work away from typography and onto your container CSS. The single most reliable way to pass is to let boxes that contain text grow with their content — use min-height rather than a fixed height, and avoid clipping with overflow: hidden on anything holding real words. Do that, and Text Spacing tends to take care of itself.
Code examples
The exact styles a user applies
This is the stylesheet the test bookmarklet injects — the four required values expressed relative to the font size. Your page must remain fully readable and operable with these applied.
/* What a text-spacing reader tool applies to your page */
* {
line-height: 1.5 !important;
letter-spacing: 0.12em !important;
word-spacing: 0.16em !important;
}
p {
margin-bottom: 2em !important; /* spacing after paragraphs */
}Fragile: a fixed-height box that clips
This button looks fine at your chosen spacing, but the fixed height and hidden overflow mean taller text is simply cut off. This is the classic 1.4.12 failure.
/* ✗ Fails Text Spacing */
.button {
height: 40px; /* cannot grow when line height increases */
overflow: hidden; /* extra text is clipped, not shown */
white-space: nowrap; /* wider letter/word spacing overflows */
}
.card {
height: 220px; /* last line disappears below the fold */
overflow: hidden;
}Resilient: containers that grow with their text
Swap fixed heights for min-height, let text wrap, and remove clipping. The box now expands when spacing increases, so no content is lost.
/* ✓ Passes Text Spacing */
.button {
min-height: 40px; /* grows to fit taller text */
padding: 0.5rem 1rem; /* space defined in relative units */
display: inline-flex;
align-items: center;
white-space: normal; /* allow wrapping instead of overflow */
}
.card {
min-height: 220px; /* a floor, not a ceiling */
/* no overflow: hidden on the text container */
}Do not block the user with !important
A reader tool overrides your spacing with !important. If you hard-lock line height the same way, you can defeat their adjustment entirely — set spacing normally so it can be overridden.
/* ✗ Fights the user's stylesheet */
body { line-height: 1.2 !important; }
/* ✓ Overridable — the reader tool can win */
body { line-height: 1.5; }Common mistakes
- Fixed-height containers with overflow: hidden — buttons, badges, chips, and cards that clip the taller text (the single most common failure).
- Single-line headings or titles truncated with text-overflow: ellipsis inside a box that cannot grow, so wider letter spacing hides the end of the text.
- Hard-locking line-height, letter-spacing, or word-spacing with !important, which prevents the user's reading tool from applying its own values.
- Vertical space set in fixed px (for example a 40px tall nav bar) rather than allowing the bar to expand when its text grows.
- Text overlapping adjacent elements when line height increases because rows are absolutely positioned at fixed offsets.
- Assuming 1.4.12 means you must set line-height: 1.5 everywhere — it does not; it means your layout must survive the user setting it.
- Content that scrolls out of a fixed-height modal or panel and cannot be reached once spacing pushes it beyond the box.
- Testing only the happy path and missing dense components — data tables, tab labels, breadcrumb trails, and tooltips are frequent offenders.
How to test for 1.4.12
- 1
Apply all four values at once
Use the text spacing bookmarklet or a browser extension to set line height 1.5, paragraph spacing 2×, letter spacing 0.12, and word spacing 0.16 together. Testing them one at a time misses interactions — the criterion requires all four applied simultaneously.
- 2
Scan for clipped or cut-off text
Walk the whole page looking for any text that is now truncated, cut off at the bottom of a box, hidden behind another element, or replaced with an ellipsis that was not there before. Every such spot is a failure.
- 3
Check the dense components
Pay special attention to buttons, badges, navigation, tabs, cards, tables, breadcrumbs, and tooltips — small fixed-size components are where clipping hides. Open menus and modals too, since their content often sits in fixed-height boxes.
- 4
Confirm nothing lost its function
Make sure every control is still fully visible and operable. A button whose label is clipped, or a link pushed out of a scrollable area, is a loss of functionality even if the page still looks mostly intact.
- 5
Re-test at mobile and zoom
Resize to a narrow viewport and combine with 200% zoom. Spacing overrides plus a small screen expose the most fragile layouts — this is exactly the situation real low-vision users are in.
Text Spacing is a manual check — automated tools cannot see whether overridden text is clipped or overlapping. Pair the bookmarklet walkthrough with the URL Accessibility Auditor for the automated checks, and work through the full WCAG 2.2 checklist.
Related success criteria
1.4.10 Reflow — AA
Both protect low-vision readers. Reflow tests content at 400% zoom and a 320px width; Text Spacing tests overridden line, paragraph, letter, and word spacing. Flexible containers pass both.
1.4.3 Contrast (Minimum) — AA
The other core readability criterion. Contrast makes text perceivable by color; Text Spacing makes it perceivable by giving the reader room to open the text up.
1.4.11 Non-text Contrast — AA
Part of the same 1.4 Distinguishable cluster. Where Text Spacing keeps text readable when reflowed, Non-text Contrast keeps the UI around it perceivable.
1.4.13 Content on Hover or Focus — AA
A sibling low-vision criterion for popups. Tooltips and hover menus hold text too, so they must also survive spacing overrides without clipping.
Browse every criterion in the WCAG Success Criteria hub or scan a page for issues with the Color Contrast Checker.
Frequently asked questions
What does WCAG 1.4.12 Text Spacing require?
It requires that no content or functionality is lost when a user overrides four text-spacing properties: line height set to at least 1.5 times the font size, spacing after paragraphs set to at least 2 times the font size, letter spacing set to at least 0.12 times the font size, and word spacing set to at least 0.16 times the font size. Crucially, it does not require you to design your text at these values — it requires your layout to survive when a reader applies them, typically through a browser extension or bookmarklet. It is a Level AA success criterion introduced in WCAG 2.1 and carried into WCAG 2.2.
Do I have to set line-height: 1.5 and the other values on my site?
No. This is the single most common misunderstanding of 1.4.12. The criterion does not force you to use those specific values in your design — you can style your text however you like. What it requires is that if a user increases spacing to those values, your page still works: no text is clipped, cut off, overlapping, or hidden, and no functionality is lost. That said, generous line height (around 1.5) and paragraph spacing are good defaults for readability, so many teams adopt them anyway.
What is the text spacing bookmarklet and how does it test 1.4.12?
The text spacing bookmarklet (originally published by Steve Faulkner) injects a stylesheet that applies all four required values at once using !important, so it overrides your own CSS. After running it you scan the page for any text that is now clipped, truncated, overlapping, or scrolled out of a fixed box. If everything remains readable and every control still works, the page passes. It is the fastest manual way to test 1.4.12, and it mirrors exactly what real reading extensions do for users.
Why do fixed-height containers fail Text Spacing?
A box with a fixed height (for example height: 40px) plus overflow: hidden cannot grow when line height or letter spacing increases, so the extra text is simply clipped. This is the number-one cause of 1.4.12 failures — most often in buttons, badges, navigation items, cards, and single-line truncated headings. The fix is to use min-height instead of a fixed height, and to avoid overflow: hidden on containers that hold real text, so the box expands with its content.
Does 1.4.12 apply to text in images or in form fields I do not control?
1.4.12 applies to text that can be styled with CSS. Text baked into an image is out of scope for this criterion (though it likely fails 1.4.5 Images of Text). Native form control text, placeholder text, and CAPTCHA are edge cases the criterion's understanding document treats leniently. The exception in the normative text also covers human languages and scripts that do not use one or more of these properties — for example, some scripts do not use spaces between words, so word spacing simply does not apply.
How is 1.4.12 different from 1.4.4 Resize Text and 1.4.10 Reflow?
They are related low-vision criteria that test different user adjustments. 1.4.4 Resize Text is about scaling the whole text up to 200% without loss. 1.4.10 Reflow is about content adapting to a 320 CSS pixel width (400% zoom) without two-dimensional scrolling. 1.4.12 Text Spacing is specifically about the reader overriding line, paragraph, letter, and word spacing. A robust layout that uses relative units, min-height instead of fixed height, and avoids clipping tends to pass all three together.