// guide
Target Size: Accessible Touch Targets and WCAG 2.5.8
Buttons and links that are too small or too crowded are hard to hit for anyone with a tremor, limited dexterity, or a thumb on a phone. This guide covers WCAG 2.5.8, the new Level AA minimum introduced in WCAG 2.2, its exceptions, and how to size and space interactive targets in CSS without redesigning your whole interface.
// 01 · why target size matters
Why Target Size Matters
Every interactive element has a target — the region you can click or tap to activate it. When that region is small or hemmed in by neighbors, activating it demands fine motor control that not everyone has. A user with a hand tremor, reduced dexterity, or a temporary injury will miss repeatedly; so will anyone tapping with a thumb on a moving bus. Missed taps are not just annoying — they can trigger the wrong action entirely.
Generous targets help everyone: they are faster to hit under Fitts's law, more forgiving on touch screens, and less error-prone for all users. This is why WCAG 2.2 promoted a target-size minimum to Level AA — small, crowded controls are a mainstream usability problem, not an edge case.
// 02 · what wcag requires
What WCAG Requires
Two criteria govern target size, at two levels of strictness. The AA one is new in WCAG 2.2 and is the one most teams now have to meet.
| Criterion | Level | Minimum size | Notes |
|---|---|---|---|
| 2.5.8 Target Size (Minimum) | AA | 24 × 24 CSS px | New in WCAG 2.2. Has several built-in exceptions. |
| 2.5.5 Target Size (Enhanced) | AAA | 44 × 44 CSS px | The aspirational bar; matches iOS/Android touch guidance. |
The sizes are in CSS pixels, not physical device pixels, so they scale correctly across screen densities. If you design every standalone control to 44 px, you clear both criteria at once and match the platform touch guidelines users already expect — a good default even though AA only strictly requires 24.
// 03 · the exceptions to 2.5.8
The Exceptions to 2.5.8
2.5.8 is pragmatic — it ships with exceptions so you are not forced to bloat every control. A target under 24×24 still passes if one of these applies:
- Spacing. The target is small, but a 24 px diameter circle centered on it does not overlap the circle of any adjacent target. In other words, undersized controls are fine if they are spaced far enough apart.
- Inline. The target is in a sentence, or its size is constrained by the line-height of surrounding text — so links within prose are exempt.
- Essential. A specific size is legally required or essential to the information (for example, a pin on a map at a precise location).
- User-agent control. The size is determined by the browser and not modified by the author (a default checkbox, a native
<select>). - Equivalent. The same action is available through another control on the page that does meet the minimum.
// 04 · sizing targets in css
Sizing Targets in CSS
The visible graphic can stay small; what matters is the hit area. The simplest, most robust approach is a minimum size plus padding, so the clickable region grows around the content regardless of the icon or label inside.
/* Guarantees the hit area meets AA (and reaches for AAA at 44px) */
.icon-button {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 44px; /* 24px passes AA; 44px is the comfortable target */
min-height: 44px;
padding: 10px; /* grows the hit area around a small icon */
}
/* Icon-only controls in a tight toolbar: use the spacing exception */
.toolbar .icon-button {
min-width: 24px;
min-height: 24px;
margin: 6px; /* keep 24px circles from overlapping neighbors */
}
A few implementation notes:
- Set the size on the interactive element itself (the
<button>or<a>), not a wrapper — the target is whatever actually receives the click. - Prefer
min-height/min-widthover fixed heights so long labels can still grow the control. - Use padding rather than a transparent overlay where you can; padding is simpler and keeps focus outlines wrapping the true hit area.
// 05 · common cases
Common Cases
The controls that fail target size most often, and the fix for each:
| Control | Typical failure | Fix |
|---|---|---|
| Icon buttons (close, menu, share) | 16–20 px glyph with no padding | Add padding to a 44 px min hit area |
| Close "×" on modals & toasts | Tiny tap area in the corner | Pad the button; keep the glyph small if you like |
| Checkboxes & radios | Small native box, label not clickable | Wrap in <label> so the text extends the target |
| Icon-only pagination / steppers | Cramped, adjacent, under-sized | Enlarge, or space them (spacing exception) |
| Links in a nav bar or footer | Short text, thin vertical hit area | Add vertical padding to the <a> |
<label> with a checkbox or radio makes the label text part of the clickable target — so the effective hit area is the box plus the words. That is an accessibility win (proper labelling) and a target-size win at once. See the accessible forms pattern.
// 06 · common mistakes
Common Mistakes
- Sizing the icon, not the button. A 16 px SVG in a shrink-wrapped button gives a 16 px target. Pad the button.
- Fixed heights that clip. A hard
height: 20pxboth fails the minimum and truncates long labels. Usemin-height. - Crowded controls with no spacing. Small and adjacent fails both the size rule and the spacing exception. Give them room.
- Assuming inline text links must be 24 px. They are exempt — do not over-pad prose links and break your line spacing.
- Testing only on desktop with a mouse. Target-size problems surface on touch. Check on a real phone, and remember hover is not available there.
Frequently asked questions
What is the minimum touch target size for accessibility?
WCAG 2.5.8 Target Size (Minimum), a Level AA criterion, requires interactive targets to be at least 24 by 24 CSS pixels — unless an exception applies. The stricter 2.5.5 Target Size (Enhanced), Level AAA, asks for 44 by 44 CSS pixels. Many teams design to 44px as a comfortable default even while only being held to the 24px AA minimum, because 44px matches long-standing iOS and Android touch guidance.
Is target size actually a WCAG requirement?
Yes, at Level AA since WCAG 2.2. 2.5.8 Target Size (Minimum) was added in WCAG 2.2 (published as a W3C Recommendation in 2023) and requires a 24×24 CSS pixel minimum with specific exceptions. Before 2.2, only the AAA criterion 2.5.5 (44×44) existed, so most teams treated target size as optional. Under 2.2, the 24px minimum is part of standard AA conformance.
What is the difference between WCAG 2.5.5 and 2.5.8?
They are the same idea at two strictness levels. 2.5.5 Target Size (Enhanced) is Level AAA and requires 44×44 CSS pixels. 2.5.8 Target Size (Minimum) is Level AA (new in 2.2) and requires 24×24 CSS pixels, with more exceptions built in. If you are targeting AA conformance you must meet 2.5.8; 2.5.5 is the aspirational enhanced bar. Designing to 44px satisfies both at once.
Does the 24px minimum apply to links inside a paragraph?
No. 2.5.8 has an explicit inline exception: targets in a sentence, or whose size is otherwise constrained by the line-height of surrounding text, are exempt. So a link in a paragraph does not need to be 24px tall. The criterion is aimed at standalone controls — buttons, icons, menu items, form controls — not text links flowing within prose.
How do I make a small icon button meet the target size requirement?
The visible icon can stay small; enlarge the hit area. Give the button min-width: 24px; min-height: 24px (or 44px for comfort) and add padding so the clickable region grows around the icon. If the design truly cannot enlarge the control, the spacing exception can apply: a target under 24px still passes if a 24px-diameter circle centered on it does not overlap the circle of any adjacent target — i.e. the targets are spaced far enough apart.