2.5.1 Pointer Gestures
What it requires
Any functionality that uses a multipoint gesture (two or more fingers, such as pinch-to-zoom or a two-finger rotate) or a path-based gesture (where the path you trace matters, such as a swipe, a drag along a slider, or drawing a shape) must also be operable with a single pointer without a path-based gesture — a single tap, click, double-tap, long press, or press-and-release.
The criterion does not forbid complex gestures; it requires that an equivalent simple alternative exists. The exception is when the gesture is essential — for example, a signature field or a free-hand drawing tool where the path itself is the point.
- People with motor or dexterity disabilities who cannot accurately perform pinch, rotate, or precise swipe gestures.
- People using a head pointer, mouth stick, eye-tracker, or single switch, which emulate one pointer and cannot produce multi-finger input.
- People with tremor who can tap but cannot trace a controlled path.
- Anyone using an alternative input device (e.g. a mouse on a touch UI) that has no equivalent for a touch-only gesture.
How to detect it
| Check | What to look for |
|---|---|
| Manual / functional | Inventory every swipe, pinch, rotate, drag, and multi-finger interaction (carousels, sliders, maps, image zoom). Confirm each can be done with a single tap or click instead. |
| Single-pointer test | Operate the whole UI with one finger or a mouse only — no path, no second finger. Anything that becomes unreachable fails. |
| Keyboard / AT | Not a keyboard criterion, but switch and pointer-emulation users are the target; verify equivalents work for single-pointer assistive tech. |
| Automated tools | Tools like axe cannot reliably detect this — gestures are behavioural. It almost always needs manual review. |
How to fix it
- List every interaction that relies on a multipoint or path-based gesture.
- For each, add a single-pointer alternative: tap targets, Prev/Next buttons for swipe carousels, +/− buttons for pinch-zoom, or clickable steps for a drag slider.
- Make the alternative a real control (a focusable
<button>), not a decorative element, so it is operable by name and role. - Only skip the alternative where the gesture is genuinely essential (e.g. a signature pad).
- Retest with one pointer only to confirm nothing is gesture-locked.
Example — a swipe-only carousel given equivalent single-tap controls:
<div class="carousel" data-swipe>
<!-- swipe still works, but is no longer the only way -->
<button type="button" aria-label="Previous slide"></button>
<button type="button" aria-label="Next slide"></button>
</div>
Copy-paste tests
Automated coverage
There is no fully automated axe-core rule that can confirm WCAG 2.5.1. Multipoint and path-based gestures depend on what an interaction actually requires, so this criterion needs manual review using the console check and steps below.
Run this in the browser console
// Read-only: surfaces likely path/multipoint gesture targets for manual review.
const suspects = [...document.querySelectorAll(
'[ontouchmove],[onpointermove],[ongesturechange],[draggable="true"],' +
'[class*="swipe" i],[class*="slider" i],[class*="carousel" i],[class*="pinch" i],[class*="rotate" i],[class*="drag" i],[role="slider"]'
)];
console.log('Possible gesture targets:', suspects.length);
console.table(suspects.map(el => ({ tag: el.tagName, cls: el.className, role: el.getAttribute('role') })));
suspects.forEach(el => el.style.outline = '2px solid magenta');
What to check manually: For each highlighted control, confirm any swipe, pinch, rotate or drag can also be operated with a single-point action (a tap or click on a visible button). No script can tell whether a path-based gesture is genuinely the only way to perform the function.
Related
- All WCAG 2.2 success criteria
- Learn catalog
- Keyboard & focus — operability for non-pointer and single-pointer input.