Level AAA -- the most prescriptive typography criterion in WCAG, bundling five separate requirements for blocks of text
1.4.8 Visual Presentation
In Plain Language
1.4.8 Visual Presentation[1] is Level AAA and is the most prescriptive typography criterion in WCAG 2.2. For blocks of text -- defined by the W3C as more than one sentence -- a mechanism must exist to achieve all five of the following: (a) user-selectable foreground and background colors, (b) line width no more than 80 characters (40 for CJK scripts), (c) text not justified, (d) line spacing at least 1.5 within paragraphs and paragraph spacing at least 1.5 times the line spacing, and (e) text resizable to 200% without requiring horizontal scrolling on a full-screen window.
The mechanism does not have to live in the content itself -- a conforming browser or user stylesheet can supply it. In practice, shipping these defaults in your own CSS is the only way to guarantee the result, because most users never touch their browser typography settings.
Why It Matters
- Long lines break line-to-line tracking. When a line exceeds roughly 80 characters, the return sweep from the end of one line to the start of the next becomes long enough that the eye can land on the wrong line. Readers with dyslexia, low vision, and attention-related disabilities lose their place on every wrap.
- Justified text creates vertical "rivers" of whitespace.
text-align: justifystretches inter-word spacing to fill the line, and the uneven gaps align vertically across rows into channels that pull the eye down the page instead of across it. This is a named disruption pattern in the W3C Cognitive Accessibility guidance and the specific reason 1.4.8 forbids justified blocks of text[1]. - Tight leading collapses paragraphs into a wall. Line spacing below 1.5 removes the vertical whitespace readers use to anchor the next line. Paragraph spacing below 1.5 times the line spacing removes the visual break that marks a topic shift. Together, they make text feel like an undifferentiated slab and raise cognitive load for every reader, not just disabled ones.
- Fixed foreground and background colors block sensory comfort. Users with light sensitivity, migraine, Irlen syndrome, and some forms of low vision read comfortably only in inverted or tinted color schemes. If author CSS uses
!importantoncolororbackground-color, or locks colors via inline styles that user stylesheets cannot override, those users cannot remediate the page themselves. - 1.4.8 is Level AAA and rarely procured. Most compliance targets (WCAG 2.2 AA, EN 301 549, Section 508) stop at AA and do not require 1.4.8. The rules are still load-bearing defaults for editorial-heavy surfaces -- documentation sites, long-form articles, knowledge bases -- where users read continuously rather than scan. Shipping them costs nothing and improves the base reading experience.
- Distinct from 1.4.12 Text Spacing (Level AA). 1.4.12 is the user-applied-spacing criterion: it requires the page to survive when a user injects a stylesheet that bumps line-height to 1.5, letter-spacing to 0.12em, word-spacing to 0.16em, and paragraph spacing to 2x. 1.4.8 is stricter -- it requires the page (or a mechanism) to ship those defaults. A page can pass 1.4.12 without passing 1.4.8.
Examples
This paragraph uses a maximum width of 40em, which keeps lines to roughly 70-80 characters. The line height is 1.6 (above the 1.5 minimum) and paragraph spacing is 1.5em.
The second paragraph is clearly separated from the first. Left-aligned text maintains even word spacing throughout, making it easy to read.
✔ Max 80 chars, line-height 1.6, paragraph spacing 1.5em, left-aligned
/* Good: 1.4.8-compliant block of text */
.article {
max-width: 40em; /* ~70-80 characters at typical font sizes */
line-height: 1.6; /* above the 1.5 minimum */
text-align: left; /* not justified */
}
.article p {
margin-bottom: 1.5em; /* paragraph spacing >= 1.5 x line spacing */
}
This paragraph is fully justified, which creates uneven gaps between words known as rivers of white space. Combined with tight line spacing of only 1.1, the text becomes very difficult to read for users with dyslexia or cognitive disabilities. The paragraph spacing is also minimal.
The second paragraph runs almost directly into the first. With no meaningful spacing or visual break, readers with attention difficulties lose their place frequently.
✘ Justified text, line-height 1.1, minimal paragraph spacing
/* Bad: fails 1.4.8 on alignment, leading, and paragraph spacing */
.article {
line-height: 1.1; /* below 1.5 -- fails (d) */
text-align: justify; /* creates rivers -- fails (c) */
}
.article p {
margin-bottom: 0.25em; /* under 1.5 x line-height -- fails (d) */
}
✔ Color pickers let users customize foreground and background
This text stretches across the full width of the viewport with no maximum width constraint. On a wide monitor this could easily reach 150 or more characters per line, far exceeding the 80-character limit. Readers must move their eyes a great distance from the end of one line to the start of the next, often losing their place in the process. This is especially problematic for users with attention or reading difficulties.
✘ No max-width -- lines can exceed 150+ characters on wide screens
How to Fix It
- Cap measure at 80 characters with
max-widthin em units. Roughlymax-width: 40emlands around 70-80 characters at typical body font sizes for Latin scripts. For CJK content, target 40 glyphs (roughlymax-width: 40emstill works because CJK glyphs are about twice as wide per em). Apply the cap to the text container, not the layout wrapper, so sidebars and figures can still break out. - Never set
text-align: justifyon blocks of text. Usetext-align: leftfor LTR scripts andtext-align: startif you want it to flip automatically for RTL. Justified text fails requirement (c) outright -- there is no threshold, the criterion is binary. - Set
line-height: 1.5or greater on body copy. Use a unitless value so the leading scales with the font size of descendants. 1.5 is the floor; 1.6 or 1.7 is a safer default for dense technical content. - Set paragraph spacing to at least 1.5 times line spacing. With
line-height: 1.5, that means paragraph spacing of at least2.25times the font size.margin-bottom: 1.5emcombined with aline-heightof 1.5 satisfies the ratio because 1.5em of margin sits on top of the 1.5-unit line box, and most QA tools measure the combined gap. - Do not lock foreground and background colors against user overrides. Avoid
!importantoncolorandbackground-color. Avoid inlinestyleattributes on body text for the same reason -- inline styles beat user stylesheets. Expose a light/dark toggle in your own UI as a bonus, but the non-negotiable is that browser extensions and user stylesheets must be able to repaint the page. - Confirm text reflows at 200% zoom on a 1024x768 viewport. Requirement (e) is the precursor to 1.4.10 Reflow at Level AA. Zoom the page to 200% at that viewport size and check that body text still wraps instead of triggering horizontal scroll. Fixed-width containers in
pxare the usual failure. - Treat 1.4.8 as a default, not a compliance target. Few audits require AAA, but documentation, long-form articles, and knowledge-base content benefit from these rules regardless. The cost is a few lines of CSS and the benefit is a reading experience that holds up for users with cognitive and learning disabilities, low vision, and light sensitivity.
References
- [1] W3C (2023). Understanding Success Criterion 1.4.8: Visual Presentation. W3C, Accessed 2026-04-07. https://www.w3.org/WAI/WCAG22/Understanding/visual-presentation.html ↩ ↩