Pointer and Motion Accessibility
Pointer and motion accessibility is about how people operate a page: with a mouse, a finger or a stylus, or by moving the device itself. WCAG 2.2 groups the rules under guideline 2.5 Input Modalities, plus 1.3.4 Orientation. The idea is the same throughout: a function that needs a two-finger pinch, a swipe, a drag or a shake must also work with a simple tap or click, an accidental touch must be cancellable, and the content must work in both portrait and landscape.
A concrete example: a to-do app lets you reorder tasks only by dragging them. A person with a hand tremor who uses a mouse, or someone who uses a head pointer, can click reliably but may be unable to hold the button down while moving to an exact spot. Two small buttons, Move up and Move down, make the same function available with single clicks.
Why it matters
When a function exists only behind a gesture, the people who cannot perform that gesture lose the whole function, not just a convenience. That includes people with tremor or limited dexterity, people who touch the screen with one finger or a mouth stick, people who use eye tracking or a head pointer, and people whose tablet is mounted on a wheelchair in one fixed orientation. Accidental activation hurts too: if Delete fires the moment a finger touches the screen, one slip deletes data.
For the product, all of these criteria are required for WCAG 2.2 Level AA conformance, the level most organisations and contracts target, and 2.5.7 Dragging Movements is new in 2.2, so designs that were approved against WCAG 2.1 may never have been checked for it. For the tester, the defects are easy to miss: on a desktop with a mouse, or on your own phone, the gesture works for you. You have to test deliberately for the people who cannot make it.
Pointer gestures and pointer cancellation (2.5.1, 2.5.2)
2.5.1 Pointer Gestures (Level A) covers multipoint gestures, which need two or more fingers at once (pinch to zoom, a two-finger swipe), and path-based gestures, where the path of the movement matters and not only its start and end (a swipe in a given direction, drawing a shape). Every such function must also work with a single pointer and no path: a tap, a click, a double tap or a long press. A map with pinch-to-zoom passes when it also has + and − buttons; a carousel that moves only by swiping fails. The exception is a gesture that is essential, such as drawing your signature, where the path itself is the input; if the drawing only acknowledges something, a button would do, so it is not essential. The criterion covers gestures the page itself interprets: the browser’s own pinch zoom and the screen reader’s gestures are out of scope.
2.5.2 Pointer Cancellation (Level A) protects against accidental activation. For any function operated with a single pointer, at least one of these must hold: the down-event (the moment the button or finger goes down) runs no part of the function; the function completes on the up-event and can be aborted before or undone after; the up-event reverses whatever the down-event did; or completing on the down-event is essential. Native buttons and links already behave well: click fires after release, so pressing, sliding off the control and releasing does nothing. The defect appears when a developer attaches the action to pointerdown, mousedown or touchstart. Pressing a key of an on-screen keyboard or keypad counts as essential.
- Gestures: list every swipe, pinch, two-finger and drawing interaction in the feature, then find the single-pointer way for each one and actually use it.
- Cancellation: press on every control that performs an action, move the pointer or finger off it, and release; nothing may happen. Start with delete and payment actions.
- Drag and drop counts too: picking an item up on the down-event is fine, as long as releasing it outside any drop target cancels the move.
// Defect (2.5.2): the item is deleted the moment the pointer goes down
deleteButton.addEventListener('pointerdown', deleteItem);
// Expected: click fires after release, and not if the pointer slid off the button
deleteButton.addEventListener('click', deleteItem);Dragging movements and target size (2.5.7, 2.5.8)
2.5.7 Dragging Movements (Level AA) is new in WCAG 2.2. A dragging movement is pressing on an element, moving the pointer and releasing at another point, where only the start and end points matter: reordering a list, moving a card between columns, moving a slider thumb, panning a map. Every such function needs a way that works with single pointer actions and no drag, unless dragging is essential or the browser provides the behaviour and the author has not changed it.
Note what does not count: keyboard support. A slider that responds to the arrow keys meets 2.1.1 Keyboard, but a person using a head pointer, or a mouse with a tremor, is still a pointer user and may still be unable to drag. The alternatives must be real controls that meet 2.5.8 Target Size (Minimum) (Level AA): at least 24 by 24 CSS pixels, or enough spacing, with the exceptions taught in the visual accessibility guide. A 16-pixel Move up arrow squeezed against Move down replaces one failure with another. 2.5.5 Target Size (Enhanced), at Level AAA, asks for 44 by 44.
- Sortable list: Move up and Move down buttons on each row, or a Move to menu.
- Kanban board: select the card, then choose the target column from a menu or tap the column.
- Slider: a tap or click on the track moves the thumb to that value, or − and + buttons, or a number field next to it.
- Map: arrow buttons to pan, + and − buttons to zoom.
Drag-only sortable listFail
A row moves only by press, move and release on its handle.
- Criterion:
- 2.5.7 Dragging Movements (AA)
- How to check:
- Mouse, clicks only: the row cannot be moved
List with Move up and Move downPass
Dragging still works; each click moves the row one place.
- Criterion:
- 2.5.7 Dragging Movements (AA)
- How to check:
- Click Move down: the row moves one place
Slider with − and + buttonsPass
Drag the thumb, tap the track, or click − and +.
- Criterion:
- 2.5.7 Dragging Movements (AA)
- How to check:
- Tap the track or click +: the value changes without a drag
Illustrative wireframes. The alternative buttons must themselves meet 2.5.8: at least 24 by 24 CSS pixels, or enough spacing.
Motion actuation and orientation (2.5.4, 1.3.4)
2.5.4 Motion Actuation (Level A) applies when moving the device (shake to undo, tilt to scroll) or moving in front of a camera (wave to go to the next page) operates a function. Two things are required: the same function is available through an ordinary on-screen control, and the response to motion can be turned off, so that a tremor or a bumpy bus ride does not trigger it. There are two exceptions: motion used through an accessibility supported interface (this covers the ordinary movements of operating a keyboard, a mouse, a touch screen or an assistive technology), and motion that is essential to the activity, such as a step counter. This is motion as input; animation on the screen and the reduced-motion preference were covered with visual accessibility.
1.3.4 Orientation (Level AA) says content must not restrict its view and operation to portrait or landscape unless a specific orientation is essential; the examples WCAG gives include a bank check, a piano application, slides for a projector or television, and virtual reality content. A person whose tablet is fixed to a wheelchair cannot rotate it to suit your page. A layout that changes between orientations is fine and expected; the failure is a page that refuses to work, shows only a "Please rotate your device" message, or turns its content sideways. When you test, switch the device’s rotation lock off first, otherwise a pass means nothing.
Where an orientation lock usually hides (search the code and config):
CSS @media (orientation: landscape) { main { display: none; } }
JS screen.orientation.lock('portrait')
Manifest "orientation": "portrait" (installed web app)
Android android:screenOrientation="portrait" (AndroidManifest.xml)
iOS UISupportedInterfaceOrientations (Info.plist, portrait only)Testing with a mouse, a touch device and device emulation
Use all three inputs, because each one finds different defects. Start with the mouse on a desktop: it is precise, so it shows whether every function has a single-click path. Move to a real phone or tablet for gestures, motion and rotation. Use browser device emulation in between to check phone-width layouts quickly, but never as the final word on touch or sensors.
- Mouse: complete every drag, swipe and pinch function with single clicks only; press, move off and release on every control that performs an action; measure small targets in devtools.
- Touch device: perform each gesture, then find and use its tap alternative; touch a button, slide your finger off and lift; shake and tilt where a feature reacts to motion, then switch the motion response off in the settings; turn rotation lock off and rotate on every screen, including open dialogs.
- Device emulation: in Chrome DevTools the device toolbar (
Ctrl+Shift+M, orCmd+Shift+Mon a Mac) sets a phone viewport, simulates touch with the mouse and has a rotate button, and the Sensors panel sets device orientation values. Firefox’s Responsive Design Mode also offers a phone viewport, touch simulation and a rotate button. Watch for alternatives that the phone layout hides, such as carousel arrows that disappear below a breakpoint (the width at which the layout switches). - Limits of emulation: it changes what the page is told, such as the viewport, touch events and, with a device preset, the User-Agent string (the text in which the browser names itself, its version and its operating system), not the hardware. It cannot shake a phone, it does not show how a real finger covers a small target, and the real operating system’s rotation behaviour can differ. Paste
navigator.userAgentfrom the console into a User-Agent parser and you will see the session claim to be a phone while it runs on desktop hardware. Confirm every pass on at least one real device. - Record with each result: device and OS, browser, the input used (mouse, finger or stylus), orientation and rotation lock state. A short screen recording makes gesture defects reproducible.
| Criterion | Mouse on a desktop | Real touch device | Browser device emulationfirst pass only |
|---|---|---|---|
| 2.5.1 Pointer GesturesLevel A | Do each swipe or pinch function with clicks only | Use each gesture, then its tap alternative | Check the alternatives still show at phone width |
| 2.5.2 Pointer CancellationLevel A | Press, move off, release: nothing happens | Touch, slide the finger off, lift: nothing happens | Repeat with simulated touch events |
| 2.5.4 Motion ActuationLevel A | Find an on-screen control for each motion feature | Shake or tilt, then switch the motion response off | Sensors panel sets tilt valuesshaking needs a real device |
| 2.5.7 Dragging MovementsLevel AA, new in 2.2 | Complete every drag with single clicks | Complete every drag with single taps | Check that the phone layout keeps the Move controls |
| 2.5.8 Target Size (Minimum)Level AA | Measure in devtools: 24 × 24 CSS px or spacing | Tap dense controls and note wrong hits | Measure again at phone width |
| 1.3.4 OrientationLevel AA | No check with this input | Rotation lock off; rotate on every screen | Rotate button in the device toolbar |
Worked example: testing a task board
A team ships a mobile-friendly task board. Cards move between columns by dragging, a swipe left on a card archives it, shaking the phone undoes the last change, and the delete icon on a card reacts on touch.
The tester runs the session from the previous section and records what passed as well: the board’s zoom works with + and − buttons as well as pinch (2.5.1), and the column header buttons measure 32 by 32 CSS pixels (2.5.8). Then the tester writes these defects, each with the criterion and the expected behaviour:
- "Card can be moved between columns only by dragging; no single-pointer way": fails 2.5.7 (AA). Expected: a Move to menu on each card, or select the card and then tap the column.
- "Archive is available only by swiping left": fails 2.5.1 (A), because a swipe is a path-based gesture. Expected: an Archive item in the card menu.
- "Shake to undo has no on-screen Undo and cannot be turned off": fails both requirements of 2.5.4 (A). Expected: an Undo button after each change and a setting that disables shake.
- "Card deleted on
touchstart; sliding the finger off does not cancel": fails 2.5.2 (A). Expected: delete on release, ideally with Undo. - "Board shows a rotate-to-portrait message in landscape on tablets": fails 1.3.4 (AA); a task board has no essential orientation.
Common mistakes
- Accepting keyboard support as the alternative to a drag or a swipe. 2.1.1 Keyboard and 2.5.7 are separate requirements: pointer users need a pointer way.
- Testing only in desktop emulation and marking touch, motion and orientation as passed. Emulation cannot shake a device or imitate a real finger; confirm on a real phone or tablet.
- Reporting the browser’s own pinch zoom or the screen reader’s gestures as 2.5.1 failures. The pointer criteria cover gestures the page itself interprets.
- Checking pointer cancellation with a normal click. A normal click always looks fine; you must press, slide off the control and release.
- Testing orientation with rotation lock on, or reporting a different landscape layout as a failure. The defect is a page that blocks or forces an orientation, not one that adapts.
- Forgetting to test the alternatives themselves: 16-pixel Move up and Move down buttons packed together without spacing, or buttons that appear only on hover, which does not exist on touch screens.
The QA perspective
The cheapest moment is design review. For every drag, swipe, pinch, shake or orientation rule in a design or story, ask one question: how does someone do this with a single tap? Write the answer into the acceptance criteria, for example "a card can be moved to another column from its menu", so the alternative is built and tested like any other requirement instead of being added after an audit.
During testing, keep a small inventory of every gesture-driven function in the product and re-run it on each release, because new components bring new gestures. Report each defect with the exact criterion and level, the device, browser, input and orientation, and a short screen recording. If the team claims that a gesture is essential, ask who decided and record the reasoning: in WCAG, essential means that removing the gesture would fundamentally change the function, not that the alternative takes extra work.
Practice exercise
Audit a playlist screen for pointer and motion defects
The mobile web playlist screen of a music app is ready for testing. Read the feature notes below. For each numbered behaviour, name the WCAG 2.2 criterion it touches, say whether it passes or fails as described, describe how you would check it (mouse, touch device or emulation), and write a defect title for each failure.
Playlist screen, release 3.2 (mobile web)
1. Reorder songs by dragging the handle on each row.
2. Volume slider: drag the thumb; tapping the track does nothing.
The arrow keys change the volume.
3. Swipe a row left to reveal Remove.
4. Shake the phone to shuffle. There is no Shuffle button.
No setting turns shake-to-shuffle off.
5. Remove runs on touchstart.
6. In landscape the page shows "Rotate your phone" and hides the list.
7. Album art viewer: pinch to zoom (handled by the app); double tap also zooms.- Classify each interaction: multipoint or path-based gesture, dragging, single pointer action, device motion or orientation.
- Match it to 2.5.1, 2.5.2, 2.5.4, 2.5.7, 2.5.8 or 1.3.4 and decide pass or fail from the notes.
- Choose the input and the device you would use to confirm the result.
- Write a defect title with the expected behaviour for every failure.
Show the model answer
1. Dragging, 2.5.7 (AA): fails, because there is no single-pointer way. Check with a mouse, clicks only. Defect: "Songs can be reordered only by dragging". Expected: Move up and Move down buttons or a Move to menu; then measure the new buttons against 2.5.8.
2. Dragging, 2.5.7 (AA): fails. Keyboard support meets 2.1.1, not 2.5.7. Check with a mouse by clicking the track, and on a touch device by tapping it. Defect: "Volume slider can be set only by dragging the thumb; tapping the track has no effect". Expected: a tap on the track sets the value, or − and + buttons.
3. Path-based gesture, 2.5.1 (A): fails, because the swipe is the only way to reach Remove. Check on a touch device and with a mouse. Defect: "Remove is reachable only by swiping a row left". Expected: a visible Remove button or a row menu.
4. Device motion, 2.5.4 (A): fails twice, with no on-screen control and no way to turn the response off. Confirm on a real phone; emulation cannot shake. Defect: "Shuffle works only by shaking the phone and cannot be disabled". Expected: a Shuffle button, and a setting that turns shake-to-shuffle off.
5. Pointer cancellation, 2.5.2 (A): fails. On a real device, touch Remove, slide the finger off and lift. Defect: "Song removed on touch down; sliding the finger off does not cancel". Expected: remove on release, with Undo.
6. Orientation, 1.3.4 (AA): fails; a playlist has no essential orientation. Check with rotation lock off on a phone, and with the rotate button in emulation. Defect: "Playlist hidden in landscape behind a rotate-your-phone message". Expected: the playlist works in both orientations; its layout may adapt.
7. Multipoint gesture, 2.5.1 (A): passes, because a double tap is a single-pointer action without a path. Check on a touch device: double tap the album art and confirm it zooms. Record as an improvement that visible zoom buttons are easier to discover than a double tap.
Frequently asked questions
Does keyboard support satisfy 2.5.7 Dragging Movements?
No. 2.1.1 Keyboard requires keyboard operation; 2.5.7 separately requires that every dragging function can be done with single pointer actions and no drag. Understanding 2.5.7 says this directly: a keyboard equivalent meets it only if it also provides controls that can be clicked or tapped. People who use a head pointer, eye tracking or a mouse with a tremor are pointer users, so they need clicks or taps, not arrow keys.
Is a double tap or a long press an acceptable alternative to a swipe?
Under 2.5.1, yes: both are single-pointer actions without a path. They are hard to discover, though, so a visible button is usually the better design.
Can I test these criteria without a real phone?
Partly. Desktop testing with a mouse covers the single-click alternatives, pointer cancellation and target size, and device emulation covers phone-width layouts, touch events and the rotate button. Shaking, real finger contact and the operating system’s rotation behaviour need a real device, so plan for at least one.
How is motion actuation different from reduced motion?
2.5.4 Motion Actuation is about motion as input: moving the device, or yourself, to operate a function. Reduced motion, 2.3.3 Animation from Interactions and the prefers-reduced-motion setting are about motion as output: animation the page shows. A shake-to-undo feature falls under 2.5.4; a sliding page transition falls under the animation criteria.
References
- Web Content Accessibility Guidelines (WCAG) 2.2The W3C Recommendation that defines the testable success criteria for accessible web content, organised under four principles and three conformance levels (A, AA, AAA).
- Understanding WCAG 2.2The informative explanation of each WCAG 2.2 guideline and success criterion: intent, who benefits, examples and techniques (not normative).
- How to Meet WCAG (Quick Reference)A filterable checklist of every WCAG 2.2 success criterion with its sufficient techniques and common failures.
- What are browser developer tools? — MDNAn introduction to the developer tools built into browsers — the inspector, the JavaScript console and the debugger — for examining a page while testing it.
Practise with Mutqan tools
Generate structured test cases (id, title, preconditions, steps, expected result, priority) from a feature description and field list.
Convert a list of numbered requirements into traceable test cases with a requirement-to-test matrix.
Parse User-Agent strings into browser, version, engine, OS, device type and bot detection.
Generate a tailored QA checklist (functional, UI, API, security, performance, accessibility, release) for any feature with Mutqan AI.
Generate clear, searchable bug titles from a messy description with Mutqan AI.
Go deeper
Your progress on this topic
Not started
Mark the topic complete when you have studied it and done the exercise.
Sign in to track your progress
Mark topics complete, continue where you left off and unlock specialisation exams.