// 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.

intermediate visual-design

// 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.

24 is the floor, 44 is the goal Treat 24×24 as the absolute minimum to pass AA, and 44×44 as the size to reach for on primary and touch-first controls. The gap between them is comfort: 24px passes the audit; 44px is what feels good under a thumb.

// 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.
The spacing exception, in practice You do not always have to make a control physically bigger. If two icon buttons are only 20 px wide, giving them enough margin that a 24 px circle around each never touches its neighbor satisfies 2.5.8 through the spacing exception. Size or spacing — either path passes.

// 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.

A comfortable, compliant target
/* 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-width over 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>
Labels make checkboxes bigger for free Associating 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: 20px both fails the minimum and truncates long labels. Use min-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.
Where this fits Target size is a design and mobile concern — pair this with the mobile checklist and the design review checklist, and apply it to your buttons and forms. For the full standard, see the WCAG 2.2 overview.

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.