Who it affects
Someone with Parkinson's checking the train timetable on their phone aims for the next hour arrow, which is 16 pixels wide, and hits previous hour instead. Twice.
Someone with large fingers on a small phone cannot tell which of three icons touching each other they have pressed until the page changes.
Someone using a head pointer or eye tracker has to hold the cursor still inside a target to click it. The smaller the target, the longer and harder that is.
Broken versus fixed
Both examples are live and rendered in a sandboxed frame. The broken one is deliberately broken.
Three 16 pixel buttons with no gap between them. On a phone, one fingertip covers all three.
32 pixel buttons with 8 pixels between them. Each one has room to be pressed on its own.
Show the markup behind both examples
<style>body{font-family:system-ui;margin:0;padding:12px}p{margin:0 0 8px}button{width:16px;height:16px;padding:0;border:1px solid #777;background:#fff;border-radius:3px;margin:0;vertical-align:middle}svg{width:10px;height:10px;display:block;margin:auto}</style>
<p>Departures: Oxford to Reading</p>
<button type="button" aria-label="Previous hour"><svg viewBox="0 0 10 10"><path d="M7 1 3 5l4 4" fill="none" stroke="#333" stroke-width="2"/></svg></button><button type="button" aria-label="Next hour"><svg viewBox="0 0 10 10"><path d="M3 1l4 4-4 4" fill="none" stroke="#333" stroke-width="2"/></svg></button><button type="button" aria-label="Refresh"><svg viewBox="0 0 10 10"><circle cx="5" cy="5" r="3.5" fill="none" stroke="#333" stroke-width="2"/></svg></button>
<style>body{font-family:system-ui;margin:0;padding:12px}p{margin:0 0 8px}button{width:32px;height:32px;padding:0;border:1px solid #777;background:#fff;border-radius:4px;margin:0 8px 0 0;vertical-align:middle}svg{width:14px;height:14px;display:block;margin:auto}</style>
<p>Departures: Oxford to Reading</p>
<button type="button" aria-label="Previous hour"><svg viewBox="0 0 10 10"><path d="M7 1 3 5l4 4" fill="none" stroke="#333" stroke-width="2"/></svg></button><button type="button" aria-label="Next hour"><svg viewBox="0 0 10 10"><path d="M3 1l4 4-4 4" fill="none" stroke="#333" stroke-width="2"/></svg></button><button type="button" aria-label="Refresh"><svg viewBox="0 0 10 10"><circle cx="5" cy="5" r="3.5" fill="none" stroke="#333" stroke-width="2"/></svg></button>
Test it by hand in two minutes
- Open DevTools, press Ctrl+Shift+C (Cmd+Shift+C on a Mac) and hover each small button or icon. The tooltip shows its size; both numbers should be 24 or more.
- If a control is smaller, check the gap to its neighbours. Picture a 24 pixel circle around its centre: it must not overlap a neighbour or a neighbour's circle.
- Open the page on a phone and tap each icon in a row of icons with your thumb. Note any that trigger the wrong one.
- Skip links inside sentences; the rule does not apply to them. Do check pagination numbers, close buttons, star ratings, calendar days and table row actions.
The fix
.icon-btn { width: 16px; height: 16px; }
.icon-btn { min-width: 24px; min-height: 24px; }
Make the button bigger, not the icon. Padding counts; the visible icon can stay small as long as the clickable box is 24 by 24 or more.
Controls that cannot grow
.page-link { width: 18px; height: 18px; margin: 0; }
.page-link { width: 18px; height: 18px; margin: 0 8px; }
Spacing also satisfies the rule. With 18 pixel targets and 8 pixels between them, each one's 24 pixel zone is clear of the next.
Link that wraps a small icon
<a href="/basket"><svg width="16" height="16" aria-label="Basket">...</svg></a>
<a href="/basket" class="icon-link"><svg width="16" height="16" aria-label="Basket">...</svg></a>
<style>.icon-link { display: inline-flex; padding: 4px; }</style>
An inline link is only as big as its content. display: inline-flex (or inline-block) lets padding grow the clickable area.
Common mistakes
- Enlarging the icon image but leaving the button the same size.
- Growing the target with a transparent border, then removing it on hover so the size jumps.
- Reading the rule as 44 pixels and deciding it cannot be met; 24 is the AA minimum, 44 is the AAA target.
- Shrinking a close button on mobile to save space, exactly where fingers are least precise.
WCAG criteria this rule maps to
axe-core tags this rule as WCAG 2.2 level AA. It is one of the checks for:
- 2.5.8 Target Size (Minimum) (level AA). Official W3C text.
The scanner measures the rendered size of each clickable element and the gaps to its neighbours. It cannot judge the exceptions: whether a control is part of a sentence, whether an equally sized alternative exists elsewhere on the page, or whether the small size is essential. It also measures only what is on screen in the current viewport, so check at phone widths too. Automated tools find only part of the accessibility problems on a page; a pass on this rule is not a pass on the criterion.
Related rules
scrollable-region-focusable
When a box has its own scrollbar, mouse users scroll it with the wheel.
A
Links in body text must not rely on colour alone
link-in-text-block
When a link sits inside a paragraph, colour is often the only thing that marks it out.
A
Buttons must have a name that says what they do
button-name
A button needs a name that assistive technology can announce.
A
Links must have text a screen reader can announce
link-name
Every link needs text that a screen reader can announce and a voice control user can say.