Requires pointer targets to be at least 24 by 24 CSS pixels, unless spacing, an equivalent, inline text, browser control or necessity applies.
Tiny controls are hard to hit. People with tremors, large fingers, limited dexterity or low vision, and anyone using a phone on a bus, will tap the wrong thing, or miss altogether. When targets are close together, errors multiply.
This criterion, new in WCAG 2.2, requires that the size of the target for pointer inputs is at least 24 by 24 CSS pixels, except where there is enough spacing, an equivalent control exists, the target is inline in text, its size is controlled by the browser, or the size is essential.
People with tremors, limited dexterity or motor disabilities. People with larger fingers, and people who use touch screens on the move. People with low vision who cannot see small targets clearly. People who use a mouse, trackball, head pointer or eye-gaze system with limited precision.
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. Targets that are easy to hit are part of "operable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 2.5.8 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.2.5.8 | Web pages | Web content must satisfy WCAG success criterion 2.5.8. |
Because this criterion is new, check clauses 10 and 11 of V4.1.1 for the rows that apply to documents and software. 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: Criterion 2.5.8 is new in WCAG 2.2, so it is not part of EN 301 549 V3.2.1, which is based on WCAG 2.1. It appears in EN 301 549 V4.1.1 (September 2026), the first version prepared specifically for the EAA. V4.1.1 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. 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
Give the control, or a container around it, a min-width and min-height of 24 CSS pixels (C42).
.icon-btn { width: 16px; height: 16px; padding: 0; }.icon-btn { min-width: 24px; min-height: 24px; padding: 4px; }
/* For primary actions, 44 by 44 is more comfortable */A target smaller than 24 pixels can pass if a 24 pixel circle centred on it does not touch another target or circle.
.chip { width: 18px; height: 18px; margin: 0; } /* touching neighbours */.chip { width: 18px; height: 18px; margin: 3px; } /* 24 px circles do not overlap */A row of small icons with no space between them fails both size and spacing.
.toolbar button { width: 20px; height: 20px; margin: 0; }.toolbar button { min-width: 32px; min-height: 32px; margin: 0 2px; }A native control with default styling is controlled by the browser. A custom, smaller one needs its own size, and a label that is also clickable helps.
.box { width: 14px; height: 14px; }.box { width: 24px; height: 24px; }
<label><input type="checkbox"> Subscribe to updates</label>A link inside a sentence is exempt. A list of links, such as a footer menu, is not inline, so each link needs the minimum size or spacing.
.footer a { display: inline; line-height: 1; }.footer a { display: inline-block; min-height: 24px; padding-block: 4px; }If a small control has an equivalent on the same page that is large enough, it can stay small.
<a class="tiny" href="/x">×</a><a class="tiny" href="/x">×</a>
<!-- The same action is also available as a full-size "Remove" button on this page -->WCAG 2.2 sets a minimum of 24 by 24 CSS pixels. The platform guidelines ask for more: about 44 by 44 points on iOS and 48 by 48 dp on Android. Aim for the larger size on primary actions.
import SwiftUI
struct CloseButton: View {
var body: some View {
Button { dismiss() } label: {
Image(systemName: "xmark")
// The icon can stay small, the tappable area should not
.font(.system(size: 14))
.frame(minWidth: 44, minHeight: 44)
.contentShape(Rectangle())
}
.accessibilityLabel("Close")
}
}import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable
@Composable
fun CloseButton(onClose: () -> Unit) {
// IconButton keeps a 48 dp touch target around the small icon
IconButton(onClick = onClose) {
Icon(Icons.Filled.Close, contentDescription = "Close")
}
}