Requires that text can be resized up to 200% without assistive technology and without loss of content or function.
Many people with low vision do not use a screen reader. They enlarge the text with the browser zoom, with the larger text setting of their phone or with a text size setting in the system. If the page breaks when they do, such as with cut-off text, overlapping boxes and missing buttons, they cannot use it.
This criterion requires that text can be resized, without assistive technology, up to 200 percent without loss of content or functionality. Captions and images of text are excepted.
People with low vision who enlarge text without a screen reader. Older users. People who read small screens in poor conditions. People with dyslexia, who may prefer larger text. Anyone who zooms to read a small font.
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 can be enlarged is part of "perceivable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 1.4.4 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.1.4.4 | Web pages | Web content must satisfy WCAG success criterion 1.4.4. |
| 11.1.4.4 | Non-web software (native mobile apps) | Software must let the user enlarge text through the platform setting, without loss of content or function. |
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.4 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 viewport that disables zoom stops people with low vision from enlarging text on a phone.
<meta name="viewport"
content="width=device-width, initial-scale=1,
maximum-scale=1, user-scalable=no"><meta name="viewport"
content="width=device-width, initial-scale=1">Pixel sizes for text do not follow a user's default font size. Relative units do.
body { font-size: 14px; }
h1 { font-size: 24px; }body { font-size: 1rem; }
h1 { font-size: 1.75rem; }A fixed height cuts off enlarged text. Use a minimum height and let the content grow.
.card { height: 120px; overflow: hidden; }.card { min-height: 120px; }A fixed line height in pixels does not grow with the text.
p { font-size: 1rem; line-height: 20px; }p { font-size: 1rem; line-height: 1.5; }Breakpoints in pixels do not move when the text is enlarged. Em-based breakpoints do.
@media (min-width: 768px) { .nav { display: flex; } }@media (min-width: 48em) { .nav { display: flex; } }Let long text wrap instead of cutting it off.
.label { white-space: nowrap; overflow: hidden;
text-overflow: ellipsis; width: 100px; }.label { overflow-wrap: anywhere; max-width: 100%; }The same rule applies in native mobile apps. Use the platform's text styles and units, so that the text follows the system text size setting, and let the layout grow.
import SwiftUI
struct ArticleCard: View {
// Spacing that grows with the text size
@ScaledMetric private var spacing: CGFloat = 8
var body: some View {
VStack(alignment: .leading, spacing: spacing) {
// Avoid: a fixed size does not follow Dynamic Type
// Text("Title").font(.system(size: 14))
// Use text styles, which follow Dynamic Type
Text("Title").font(.headline)
Text("A longer description that wraps onto several lines.")
.font(.body)
.fixedSize(horizontal: false, vertical: true)
}
.padding()
}
}import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.heightIn
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun ArticleCard() {
// Use a minimum height, not a fixed one
Column(modifier = Modifier.heightIn(min = 120.dp)) {
// Text styles use sp, which follows the system font scale.
// Avoid: a fixed height, or a text size that ignores the font scale
Text("Title", style = MaterialTheme.typography.titleMedium)
Text(
"A longer description that wraps onto several lines.",
style = MaterialTheme.typography.bodyMedium
)
}
}user-scalable=no or maximum-scale?