Requires that no content or function is lost when users increase line, paragraph, letter and word spacing.
People with dyslexia or low vision often change the spacing of text to read it: more space between lines, letters, words and paragraphs. If the page clips the text, or lets it overlap when they do that, the page becomes unreadable.
This criterion requires that no content or functionality is lost when the user sets line height to 1.5 times the font size, paragraph spacing to 2 times, letter spacing to 0.12 times and word spacing to 0.16 times the font size. It does not require authors to use these values, only to let the content survive them.
People with dyslexia and other reading differences. People with low vision who adjust spacing. People who use a browser extension or a user style sheet to change text. Anyone with a cognitive difference who reads better with wider spacing.
The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Text that survives user spacing changes is part of "perceivable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 1.4.12 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.1.4.12 | Web pages | Web content must satisfy WCAG success criterion 1.4.12. |
| 10.1.4.12 | Non-web documents (PDF, Office files) | Documents must let text spacing be adjusted without loss where the standard applies the criterion to them. |
| 11.1.4.12 | Non-web software (native mobile apps) | Software must not lose content when users adjust text spacing, where the platform supports it. |
Whether and how the criterion applies to non-web documents is stated in clause 10 of the standard. Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality. Check the exact numbers in the standard when you cite them.
Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 1.4.12 is the same in WCAG 2.1 and 2.2. It is a Level AA criterion.
A note on EAA scope: Article 2(4) of the Directive excludes certain content from the requirements, for example office file formats published before 28 June 2025 and archives that are not updated after that date. Content you publish or change after that date is not covered by these exclusions.
Directive (EU) 2019/882, EUR-Lex, opens in a new tab
A fixed height cuts off text as soon as the line height grows.
.card { height: 100px; overflow: hidden; }.card { min-height: 100px; }A line height in pixels stays the same when the user changes the font size or spacing in their style sheet. A unitless value scales.
p { line-height: 18px !important; }p { line-height: 1.5; }Fixed widths and no-wrap labels cut text when letters and words get wider.
.tag { width: 80px; white-space: nowrap; overflow: hidden; }.tag { min-width: 5rem; padding-inline: 0.5rem; }A one-line menu with a fixed height overlaps what follows when its words widen.
.nav { height: 40px; display: flex; flex-wrap: nowrap; }.nav { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; }When your CSS uses !important on these properties, the user style sheet cannot override it.
body { letter-spacing: 0 !important; word-spacing: 0 !important; }body { letter-spacing: normal; word-spacing: normal; }Use this style in the developer tools to see what breaks.
/* No testing with spacing overrides */* {
line-height: 1.5 !important;
letter-spacing: 0.12em !important;
word-spacing: 0.16em !important;
}
p { margin-bottom: 2em !important; }Native apps rarely let users override spacing directly, but the same defensive rule helps with large text: let containers grow and do not clip text.
import SwiftUI
struct TagLabel: View {
let title: String
var body: some View {
Text(title)
.font(.callout)
// Avoid: .frame(width: 80, height: 24) with .lineLimit(1) and clipping
.lineSpacing(4) // extra line spacing is allowed
.padding(.horizontal, 8)
.padding(.vertical, 4)
.fixedSize(horizontal: false, vertical: true) // grows with its text
}
}import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@Composable
fun TagLabel(title: String) {
Text(
text = title,
// Avoid: Modifier.height(24.dp) with maxLines = 1 and clipping
modifier = Modifier
.heightIn(min = 24.dp)
.padding(horizontal = 8.dp, vertical = 4.dp),
lineHeight = 22.sp, // set a comfortable line height instead of tight spacing
letterSpacing = 0.5.sp
)
}overflow: hidden, nowrap and !important on spacing.overflow: hidden on text containers: Hides the overflow instead of letting the box grow.!important on spacing properties: It blocks the user's own style sheet.