WCAG 2.1.3: Keyboard (No Exception)
The Level A keyboard rule, 2.1.1, has exactly one escape hatch: functionality that depends on the pathof the user’s movement — freehand drawing, for instance — may be pointer-only. This criterion closes that hatch. At Level AAA, every function must be operable from the keyboard, no exceptions. If a mouse can do it, a keyboard user must be able to do it too.
The success criterion, in full
All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes.
Compare this with 2.1.1 Keyboard (Level A): the wording is identical exceptthat 2.1.1 ends with “…except where the underlying function requires input that depends on the path of the user’s movement and not just the endpoints.” 2.1.3 deletes that clause. That deletion is the entire criterion.
Who this helps
The keyboard interface is the universal adapter of assistive technology. People who cannot use a mouse — because of tremor, paralysis, missing limbs, chronic pain, or low vision that makes tracking a pointer impossible — almost always operate the web through something that emits keyboard events:
Switch access users
One or two physical switches, driven by head, hand, or breath, scanning through keyboard-focusable controls.
Screen reader users
Blind users cannot follow a pointer path at all — the keyboard is the only way they operate content.
Alternate keyboard users
Sip-and-puff devices, eye-gaze systems, and on-screen keyboards that emulate keystrokes.
People with tremor or fatigue
Steady dragging along a path is far harder than pressing discrete keys, one at a time, at any pace.
For these users, a feature that is pointer-only is not merely inconvenient — it does not exist. 2.1.3 says that at the highest conformance level, nothing on the page is allowed to not exist for them.
2.1.3 vs. 2.1.1: what actually changes
Under 2.1.1, a “path-dependent” function — one where the route the pointer travels matters, not just where it starts and ends — is exempt. Classic examples: freehand drawing in a paint tool, a handwritten signature pad, steering in a driving game. Everything else already had to be keyboard-operable at Level A.
2.1.3 removes the exemption. Three things follow:
- Drag-and-drop was never exempt — dragging a card between columns depends only on start and end points, so it already needed a keyboard alternative under 2.1.1. 2.1.3 changes nothing there; it just makes the requirement easier to remember: everything, always.
- Genuinely path-dependent features now need an equivalent. A signature pad needs a typed-signature option; a freehand annotation tool needs keyboard-placeable shapes or text notes that serve the same purpose.
- The keystroke-timing clause stays. Neither criterion allows interfaces that require specific timings for individual keystrokes — that protection exists at Level A and simply carries through.
Also related but distinct: 2.1.2 No Keyboard Trap (A) ensures focus can always leave a component, and 2.5.7 Dragging Movements (AA) requires a single-pointer alternative to dragging. 2.1.3 sits above all of them: total keyboard operability.
Pass and fail examples
✓ Passes 2.1.3
- A kanban board where cards can be dragged with a mouse and moved with arrow keys after pressing Space to “grab” them.
- A signature step that offers “Draw” and “Type your name” options with equal legal standing.
- A map that pans with arrow keys, zooms with +/−, and exposes search and location lists as focusable controls.
- A diagram editor where shapes are inserted from a keyboard-navigable palette and nudged with arrow keys.
- A slider operable with arrow keys, Home, End, Page Up, and Page Down.
✗ Fails 2.1.3
- A signature pad that only accepts pointer strokes — this passes 2.1.1 via the path exception, but fails 2.1.3.
- A freehand highlighter for annotating documents with no typed-comment or keyboard-placed alternative.
- A file-upload area that responds only to drag-and-drop, with no browse button.
- A custom dropdown that opens on hover and cannot be opened or navigated by keyboard.
- A gesture-drawn unlock pattern with no PIN or password alternative.
Code examples
Keyboard alternative to drag-and-drop reordering
The grab-and-move pattern: Space (or Enter) picks up the item, arrow keys move it, Space drops it, Escape cancels. Announce each move to a live region so screen reader users hear the result.
<ul role="listbox" aria-label="Task order">
<li role="option" tabindex="0" aria-describedby="reorder-hint">
Write launch email
</li>
<!-- … -->
</ul>
<p id="reorder-hint" class="sr-only">
Press Space to grab, arrow keys to move, Space to drop, Escape to cancel.
</p>
<div aria-live="polite" class="sr-only" id="move-status"></div>
<script>
let grabbed = null;
list.addEventListener("keydown", (e) => {
const item = e.target.closest("[role='option']");
if (!item) return;
if (e.key === " ") {
e.preventDefault();
grabbed = grabbed ? null : item; // grab / drop
status.textContent = grabbed
? `${item.textContent} grabbed`
: `${item.textContent} dropped`;
}
if (grabbed && e.key === "ArrowUp" && item.previousElementSibling) {
item.parentNode.insertBefore(item, item.previousElementSibling);
item.focus();
status.textContent = `Moved up to position ${position(item)}`;
}
if (grabbed && e.key === "ArrowDown" && item.nextElementSibling) {
item.parentNode.insertBefore(item.nextElementSibling, item);
item.focus();
status.textContent = `Moved down to position ${position(item)}`;
}
});
</script>A typed alternative to a path-dependent signature
Keep the canvas for pointer users; make the keyboard route a first-class equal, not a degraded fallback.
<fieldset>
<legend>Sign this document</legend>
<div role="radiogroup" aria-label="Signature method">
<label><input type="radio" name="sig-mode" value="draw" /> Draw signature</label>
<label><input type="radio" name="sig-mode" value="type" checked /> Type signature</label>
</div>
<!-- Pointer path (optional enhancement) -->
<canvas id="sig-pad" width="400" height="120" hidden></canvas>
<!-- Keyboard path (always available) -->
<label for="sig-text">Type your full legal name</label>
<input id="sig-text" type="text" autocomplete="name" />
<p>Your typed name will be rendered as your signature.</p>
</fieldset>Never rely on hover or pointer events alone
/* ✗ Reveal only on hover — keyboard users never see it */
.card .actions { display: none; }
.card:hover .actions { display: flex; }
/* ✓ Reveal on hover AND keyboard focus within the card */
.card:hover .actions,
.card:focus-within .actions { display: flex; }Common failures
- Treating the 2.1.1 path exception as permanent — shipping a drawing, sketching, or signature feature with no keyboard-operable equivalent and still claiming AAA.
- Drag-only interactions: file dropzones, sortable lists, sliders, or map pins that respond to pointer drags but ignore the keyboard entirely.
- Custom widgets built from <div> and <span> with click handlers but no tabindex, no keydown handling, and no focus styles.
- Actions that appear only on mouse hover (row action buttons, tooltips, mega-menus) with no focus-based equivalent.
- Requiring rapid or precisely-timed key presses — double-tap shortcuts with tight windows, or hold-to-confirm patterns with no alternative.
- Canvas- or WebGL-based UI that paints its own controls and never exposes them as focusable, operable elements.
- Keyboard alternatives that exist but are hidden behind a pointer-only affordance, such as an options menu that itself opens only on right-click.
How to test for 2.1.3
- 1
Unplug the mouse
Literally, if you can. Put the pointer away and attempt to complete every task the page offers using only Tab, Shift+Tab, Enter, Space, arrow keys, and Escape. Anything you cannot do is a candidate failure.
- 2
Inventory every function, not every element
The unit of testing is functionality: 'reorder tasks', 'sign the contract', 'crop the image'. For each function, ask whether some keyboard-only route achieves the same outcome — it does not have to be the same mechanics.
- 3
Hunt the path-dependent features specifically
Drawing surfaces, signature pads, annotation tools, gesture inputs, games. These pass 2.1.1 without a keyboard route, so they are exactly where 2.1.3 failures hide. Each needs an equivalent alternative.
- 4
Check for timing dependence
Operate slowly. Press keys one at a time with long pauses. If any interaction requires speed — chorded keys within a window, hold durations, rapid double-presses — it fails unless an untimed alternative exists.
- 5
Verify with a screen reader
Run through the same tasks with NVDA or VoiceOver. This confirms the keyboard routes are also perceivable: focus is visible and announced, state changes are reported, and instructions for custom key patterns are exposed.
Automated scanners can flag missing tabindex or click-only handlers, but only a human can judge whether a keyboard route truly accomplishes the same function. Work through the full WCAG 2.2 checklist alongside this criterion.
Frequently asked questions
What does WCAG 2.1.3 Keyboard (No Exception) require?
It requires that all functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes — full stop. It is the Level AAA version of 2.1.1 Keyboard, and it removes the one exception 2.1.1 allows: functionality that depends on the path of the user's movement. Under 2.1.3, even path-dependent features such as freehand drawing must have some keyboard-operable way to achieve the same result.
How is 2.1.3 different from 2.1.1 Keyboard?
The normative text is almost identical. 2.1.1 (Level A) ends with an exception: 'except where the underlying function requires input that depends on the path of the user's movement and not just the endpoints.' 2.1.3 (Level AAA) deletes that clause. So under 2.1.1 a signature pad or freehand drawing tool may be mouse-only; under 2.1.3 it may not — you must provide a keyboard-operable alternative that accomplishes the same underlying task, or the page cannot claim AAA conformance for that functionality.
Does 2.1.3 mean I cannot use drag-and-drop at all?
No. You can keep drag-and-drop as a convenience — pointer interactions are fine and often faster for mouse users. What 2.1.3 requires is that everything drag-and-drop achieves can also be achieved with the keyboard alone: reordering with arrow keys, a 'move to' menu, cut-and-paste commands, or grab/drop key patterns. The pointer path is an enhancement; the keyboard path is the requirement.
What does 'without requiring specific timings for individual keystrokes' mean?
It means the interface must not depend on how fast or in what rhythm keys are pressed. A control that only activates if two keys are pressed within 200 milliseconds of each other, or that requires holding a key for an exact duration, fails. Users with motor disabilities may type one key at a time with long pauses, often through alternate input hardware that emulates a keyboard. Note this phrase appears in both 2.1.1 and 2.1.3 — it is not the difference between them.
Can any website realistically meet 2.1.3?
Most can. The vast majority of web functionality — navigation, forms, media controls, editors, sortable lists, sliders, maps — has well-established keyboard patterns. The genuinely hard cases are path-dependent by nature: freehand drawing, handwritten signatures, gesture-based games. Even there, alternatives exist: typed signatures, shape palettes with keyboard placement and arrow-key nudging, or parameter-based input. If a feature truly cannot be made keyboard-operable, the page simply cannot conform at Level AAA — which is one reason AAA is a target for specific pages, not usually entire sites.
Does using a touchscreen or voice control satisfy 2.1.3?
No. The criterion is specifically about a keyboard interface, because the keyboard is the universal fallback that almost every assistive technology can emulate — sip-and-puff devices, switch access, on-screen keyboards, and speech input all generate keyboard events. If something works only by touch gesture or only by voice, users of those keyboard-emulating technologies are locked out. Supporting the keyboard interface is what makes all the others work.
Related Success Criteria
All functionality is available from a keyboard interface.
Focus can be moved away from any component using standard keyboard methods.
Single character key shortcuts can be turned off or remapped.
Users can turn off, adjust, or extend time limits.
Moving, blinking, or auto-updating content can be paused, stopped, or hidden.