2.2.3 Level AAA Guideline 2.2 Enough Time Added in WCAG 2.0 Not detectable automatically

No Timing

Timing is not an essential part of the event or activity presented, except for non-interactive synchronised media and real-time events.

Who this affects

Users who need unlimited time. At AAA the standard removes time pressure entirely rather than merely making it adjustable.

The failure and the fix

Each example below is a self-contained page, loaded in a frame so its markup cannot affect this page. Open either one on its own to test it with a keyboard or screen reader.

Fails 2.2.3

Open the failing example in a new tab

fail.html — the problem

<h1>Membership quiz</h1>

<!-- This page satisfies 2.2.1 Timing Adjustable at Level A: the user is warned
     well before the limit expires and can extend it with one action.

     It still fails 2.2.3 at AAA, which does not accept an adjustable limit -
     it requires that timing is NOT AN ESSENTIAL PART of the activity at all.
     A countdown that can be extended is still a countdown, and it still
     imposes pressure on someone who reads slowly, uses a screen reader, or
     needs to think. -->
<p>Time remaining: <span class="timer" id="t">45</span> seconds
   <button type="button" class="button button--secondary" id="more">Give me more time</button></p>

<div class="warn" role="status" id="warn" hidden>
  <p>Less than 20 seconds remaining.</p>
</div>

<form>
  <fieldset>
    <legend>Which year did Riverline Books open?</legend>
    <p><input type="radio" id="y1" name="y"><label for="y1">1988</label></p>
    <p><input type="radio" id="y2" name="y"><label for="y2">1998</label></p>
    <p><input type="radio" id="y3" name="y"><label for="y3">2008</label></p>
  </fieldset>
  <button type="submit" class="button">Submit answer</button>
</form>

Meets 2.2.3

Open the passing example in a new tab

pass.html — the fix

<h1>Membership quiz</h1>

<!-- FIX: there is no timer. Nothing counts down, nothing expires, and the
     user's answers are saved as they go, so leaving and coming back later
     loses nothing.

     Ask what the time limit was actually FOR. Most of them exist for one of
     three reasons, and none survives scrutiny:
       - "to stop cheating"      -> a timer does not stop cheating
       - "to free up inventory"  -> hold stock differently, or extend generously
       - "the framework does it" -> configure the framework -->
<p>Take as long as you like. Your answers are saved automatically.</p>

<form>
  <fieldset>
    <legend>Which year did Riverline Books open?</legend>
    <p><input type="radio" id="y1" name="y"><label for="y1">1988</label></p>
    <p><input type="radio" id="y2" name="y"><label for="y2">1998</label></p>
    <p><input type="radio" id="y3" name="y"><label for="y3">2008</label></p>
  </fieldset>
  <button type="submit" class="button">Submit answer</button>
</form>
<p id="saved" role="status"></p>

<!-- The exceptions 2.2.3 allows:
       - real-time events, such as a live auction or a live broadcast
       - non-interactive synchronised media: a video is allowed to have a
         duration
     Everything else must have no essential timing.

     Where timing genuinely IS essential - a timed exam, an auction - you
     cannot meet 2.2.3, and that is expected. AAA is not meant to be achievable
     for all content; W3C says so explicitly. Meet 2.2.1 at Level A properly
     and document why 2.2.3 does not apply. -->

How to test it

Confirm no time limits exist at all, other than the permitted exceptions.

  • Automated

    Requires reviewing the whole flow for time dependencies.

    No axe rule maps to this criterion. It has to be checked by a person.

  • Keyboard

    Unplug the mouse. Move through the page with Tab, Shift+Tab, Enter, Space and the arrow keys. See the keyboard testing script.

  • Screen reader

    Listen to both examples with NVDA, JAWS, VoiceOver or TalkBack and compare what is announced. See the screen reader cheat sheets.

  • Visual

    Zoom to 200% and 400%, narrow the viewport to 320 px, and apply the text-spacing overrides. See the visual testing procedures.

In the specification