---
title: "Touch target size"
category: accessibility
status: required
url: https://webspecification.com/spec/accessibility/touch-target-size/
updated: "2026-06-08T00:00:00.000Z"
sources:
- title: "WCAG 2.5.8 — Target Size (Minimum) Level AA"
url: "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html"
publisher: "W3C"
- title: "WCAG 2.5.5 — Target Size (Enhanced) Level AAA"
url: "https://www.w3.org/WAI/WCAG22/Understanding/target-size-enhanced.html"
publisher: "W3C"
- title: "MDN — pointer (media feature)"
url: "https://developer.mozilla.org/en-US/docs/Web/CSS/@media/pointer"
publisher: "MDN"
- title: "Human Interface Guidelines — Layout"
url: "https://developer.apple.com/design/human-interface-guidelines/layout"
publisher: "Apple"
- title: "Material Design — Accessibility: Layout and typography"
url: "https://m2.material.io/design/usability/accessibility.html#layout-and-typography"
publisher: "Google"
- title: "WP Accessibility"
url: "https://wpaccessibility.org/"
publisher: "WP Accessibility"
source_repo: undefined
licence: CC-BY-4.0
---
# Touch target size
> Interactive controls must be large enough to tap or click reliably. WCAG 2.2 sets a 24×24 CSS px minimum, with 44×44 CSS px as the enhanced target.
## What it is
A touch target is the area a user can tap, click, or otherwise activate to trigger a control — a button, a link, a checkbox, an icon. The target is not just the visible glyph; it is the full hit area the browser registers as activating the control.
WCAG 2.2 introduced a new Level AA success criterion, **2.5.8 Target Size (Minimum)**, that requires interactive targets to be at least **24×24 CSS pixels**. The older Level AAA criterion, **2.5.5 Target Size (Enhanced)**, asks for **44×44 CSS pixels**. Apple's Human Interface Guidelines recommend **44pt**, and Material Design recommends **48dp**.
## Why it matters
Small targets are easy to miss. That penalises:
- Users with motor impairments — Parkinson's, tremors, arthritis, limited fine-motor control.
- Users on small phones, or holding a phone one-handed on a commute.
- Older users, whose pointing precision declines with age.
- Anyone tapping while walking, in a moving vehicle, or wearing gloves.
Mis-taps are not just annoying. They can submit the wrong form, open the wrong link, or trigger destructive actions like "delete".
## How to implement
Set a minimum size on every interactive element:
```css
button,
a.button,
[role="button"] {
min-height: 44px;
min-width: 44px;
}
```
For icon-only buttons that must look small, expand the hit area with padding rather than shrinking the target:
```css
.icon-button {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 44px;
min-width: 44px;
padding: 10px; /* hit area extends past the 24px icon */
background: transparent;
border: 0;
}
```
```html
```
If a target genuinely must be smaller than 24 CSS px — for example, a dense data table — WCAG 2.5.8 allows it as long as a **24 px diameter circle around the target's centre does not overlap any other target**. The spacing alone satisfies the criterion.
**Inline links inside running prose are exempt** from both criteria. A link in a sentence is sized by the line-height of the paragraph, and forcing 44 px around each one would wreck typography.
## Adapt to the pointer
A mouse is precise; a fingertip is roughly 8–10 mm of imprecision. You can detect which the visitor is using and reserve the larger targets for touch, rather than forcing 44 px everywhere. The `pointer` and `hover` media features describe the *primary* input; `any-pointer` and `any-hover` describe whether *any* available input matches.
```css
/* Touch / stylus as the primary pointer: enlarge tap targets. */
@media (pointer: coarse) {
.toolbar button { min-height: 44px; min-width: 44px; }
}
/* No reliable hover (most touchscreens): don't hide controls behind :hover. */
@media (hover: none) {
.card-actions { opacity: 1; }
}
```
Two cautions. Treat this as *progressive enhancement* on top of a baseline that is already accessible — 24 px is the floor for every pointer, so never use `pointer: fine` as an excuse to ship sub-24-px controls to mouse users. And remember many devices have both a touchscreen and a trackpad; when a control must work for the coarsest available input, test with `any-pointer: coarse` rather than `pointer: coarse`.
## Common mistakes
- Setting `font-size` but no `min-height` on a button, so its hit area collapses on short labels.
- Tiny close (×) icons in dialogs and toasts, 16 px or less, with no padding.
- Stacking small icon buttons (share, like, bookmark) directly next to each other with no spacing.
- Wrapping a small icon in a link without giving the `` a block-level layout — the link only hits the glyph.
- Removing `padding` "to make the design tighter" and shipping a button you can only tap with a stylus.
## Verification
- Inspect the element in DevTools. Read the computed `width` and `height` (or the bounding box). Both must be at least 24 CSS px; aim for 44.
- On a real phone, try tapping every primary control with a thumb, one-handed. If you miss, it is too small.
- Run axe DevTools or Lighthouse — both flag WCAG 2.5.8 failures.
- For dense UIs, draw a 24 px circle around each target's centre and check no two circles overlap.