Skip to content
Search topics

Small tap targets packed too close together

Icon buttons drawn at 16 pixels and set 2 pixels apart leave no room for an imprecise tap.

Broken Try it
The circles overlap.
The accessibility problem illustrated.
01

The problem

People with tremors, large fingers or an imprecise pointer press the wrong button, or miss it.

02

Try it

Raise the quantity to 5 by tapping plus.

Try it on a phone, or turn on Show target areas. Dashed circles that overlap mean a slip can press the neighbour, like remove.

Broken Can you fix this?

Linen napkins Qty 2

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Make each target 24 pixels or larger, extend its hit area, or space it out so a 24-pixel circle around it touches nothing.

  1. 1Measure the hit area, not the icon: at least 24 by 24 CSS pixels, or a 24-pixel circle that touches no other target.
  2. 2Hit areas never overlap their neighbours.
  3. 3Keep native buttons and their names; change only size and spacing.
Before 16-pixel buttons, 2 pixels apart
<div class="line-actions">  <button type="button" aria-label="Decrease quantity">−</button>  <button type="button" aria-label="Increase quantity">+</button>  <button type="button" aria-label="Remove Linen napkins">×</button></div>
After

Bigger buttons

<div class="line-actions">  <button type="button" aria-label="Decrease quantity">−</button>  <button type="button" aria-label="Increase quantity">+</button>  <button type="button" aria-label="Remove Linen napkins">×</button></div>

04

Verify the fix

4 checks.

Test with: Target measurement, Touch, Mouse, Zoom

0 of 4 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after the shared button styles change.

Limits

This is a starting pattern, not a guarantee for every application. 24 pixels is the minimum at level AA; 44 pixels, as in 2.5.5, is easier for most people. The guide covers icon buttons in one row; grids, sliders and drag handles need their own checks. Test with the people and devices your users actually have.

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

Keep this fixed as your code changes.

Turn guides like this into rules your coding agents and CI follow, then have the result retested with a keyboard and screen readers.

How retests work