Understanding WCAG 2.5.8

What is it?

A new Level AA criterion in WCAG 2.2.

Every interactive target should be at least 24 by 24 CSS pixels. Or enough space around it that a 24-px circle doesn’t overlap adjacent targets.

It’s about the size of the clickable area, not the visible icon.

Why it matters

Who it affects

Common failures

1. Tightly packed icon toolbars

16-px icons sitting flush against each other. Miss by a hair, you hit the next one.

2. Pagination squeezed into a line without room

Numbers “1 2 3 4 5 Next” crammed with no padding. You have to zoom in just to tap the right page.

3. Tiny dismiss buttons

The “x” to close a banner is often 12×12 px. Easy to miss. Missing it means clicking whatever’s underneath.

4. Icon-only buttons in data tables

Edit, archive, delete, packed into a row at icon size. One missed tap, you delete the wrong record.

5. Labels not associated with checkboxes or radios

Without association, checkboxes have to be clicked directly on the 16px checkbox rather than anywhere on the label.

6. Inline icon buttons next to text links

A “favorite” star next to a clickable headline. No space between them. Tap one, you might hit the other.

Solutions

Make the clickable/tappable area at least 24 by 24 pixels.

.icon-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 24px;
  min-height: 24px;
}

Add spacing between targets so that a 24px circle centered on each button doesn’t overlap adjacent buttons.

.toolbar button {
  margin: 0 12px;
}

A pseudo-element can be used to expand the clickable/tappable area without changing the visual design.

.small-button {
  position: relative;
}
.small-button::before {
  content: "";
  position: absolute;
  inset: -1em;
}

Heads up: the invisible area extends past the visible button. In dense layouts, it can overlap neighbors and intercept their clicks.

Correctly associate labels with checkboxes and radio buttons to expand the active area.

<label>
  <input type="checkbox" name="subscribe">
  Subscribe to updates
</label>

Labels can be implicitly or explicitly paired with the checkboxes.

How to test

A note on WCAG 2.5.5

Closing