WCAG 2.1 A

WCAG 2.1 Level A represents the most fundamental set of accessibility requirements from the Web Content Accessibility Guidelines (WCAG) 2.1. It builds upon all the success criteria defined in WCAG 2.0 Level A, extending them with crucial additions that address the evolving landscape of web usage, particularly concerning mobile devices, touch interactions, and the needs of people with low vision or cognitive disabilities. Meeting Level A compliance is considered the minimum necessary to make web content accessible to a broad range of users with disabilities.

Introduction to WCAG 2.1 Level A

While WCAG 2.0 provided a robust foundation for web accessibility, the rapid proliferation of mobile devices, touchscreens, and new interaction methods highlighted gaps in its coverage. WCAG 2.1 was developed to fill these gaps, and Level A within 2.1 introduces several new success criteria that are critical for modern web experiences.

Achieving WCAG 2.1 Level A means your content not only adheres to core principles like providing text alternatives for non-text content, ensuring keyboard navigability, and preventing content that could cause seizures, but also incorporates considerations for how users interact with content on a diverse array of devices and through various input methods.

Why WCAG 2.1 Level A Matters: Accessibility Impact and Affected User Groups

Meeting WCAG 2.1 Level A is crucial for creating an inclusive digital environment. It addresses significant barriers for various user groups:

  • Mobile Users and Users with Motor Impairments: The new criteria address challenges related to device orientation, complex pointer gestures, and motion-based interactions, ensuring functionality is accessible regardless of how a user holds their device or their dexterity.
  • Users with Cognitive Disabilities: Criteria like “Label in Name” contribute to predictability and ease of understanding for interactive elements, reducing cognitive load.
  • Users with Low Vision: While many visual accessibility features are in Level AA, the foundational requirements of Level A, combined with new touch interaction guidelines, provide a more robust experience.
  • Users of Assistive Technologies: Ensuring accessible names match visible labels (Label in Name) significantly improves the experience for screen reader users, speech input users, and others who rely on programmatic access to UI components.
  • All Users: Adhering to these guidelines often results in better overall usability, a more robust design, and a more consistent user experience across different devices and input methods.

Key Success Criteria Introduced in WCAG 2.1 Level A

WCAG 2.1 Level A incorporates all WCAG 2.0 Level A criteria and adds the following new requirements:

1.3.4 Orientation (A)

Criterion: Content does not restrict its view and operation to a single display orientation (e.g., portrait or landscape), unless a specific display orientation is essential.

  • Requirement: Users should be able to view and operate content in any device orientation they prefer (portrait or landscape). An exception is made only when a specific orientation is absolutely necessary for the functionality (e.g., a piano application or a banking app requiring landscape for a specific data entry form if there’s no suitable portrait layout).
  • Impact: Crucial for users who mount their devices in a fixed orientation, or those with motor disabilities who find it difficult or impossible to rotate their device.

2.5.1 Pointer Gestures (A)

Criterion: All functionality that uses multipoint or path-based gestures for operation can be operated with a single pointer without a path-based gesture, unless a multipoint or path-based gesture is essential.

  • Requirement: If your website or application relies on complex touch gestures (like pinch-to-zoom, two-finger swipe, or drawing a specific path), you must provide an equivalent way to perform that action using a simple single-pointer click, tap, or drag.
  • Impact: Benefits users with motor impairments who may struggle with complex gestures, and users who operate devices with a mouse, trackball, or head-pointer.

2.5.2 Pointer Cancellation (A)

Criterion: For functionality that can be operated using a single pointer, at least one of the following is true:

  • No Down-Event: The down-event does not itself initiate any part of the function’s completion.
  • Abort or Undo: Completion of the function is on the up-event, and a mechanism is available to abort the function before completion or to undo the completion.
  • Essential: The function is essential.
  • Requirement: When a user clicks or taps an interactive element, the action should ideally not be triggered on the ‘pointer down’ event. Instead, it should complete on ‘pointer up’ (e.g., when the mouse button is released or finger is lifted). This allows users to cancel an accidental action by dragging their pointer/finger off the element before releasing. If an action must trigger on ‘pointer down’, then an undo mechanism must be provided.
  • Impact: Helps users with tremors, Parkinson’s, or other motor control issues who may accidentally click or tap elements. It provides a “safety net” for interactions.

2.5.3 Label in Name (A)

Criterion: For user interface components with labels that include text or images of text, the Accessible Name contains the text that is presented visually.

  • Requirement: The accessible name (the name exposed to assistive technologies) of a user interface component must include the visible text label of that component. For example, if a button visually says “Submit”, its accessible name should also contain “Submit”. It doesn’t have to be identical, but it must include the visible text.
  • Impact: Crucial for screen reader users and speech input users. Screen reader users hear the accessible name, and speech input users rely on matching their spoken commands to the accessible name. If the accessible name doesn’t include the visible label, these users may struggle to identify or interact with components.

2.5.4 Motion Actuation (A)

Criterion: Functionality that can be operated by device motion or user motion can also be operated by user interface components, and the user can disable the motion actuation, unless the motion is essential for the function or accepting the input.

  • Requirement: If an action on your site or app is triggered by device motion (e.g., shaking your phone to undo, tilting to scroll), there must be an equivalent UI component (like a button or menu item) to perform that action. Additionally, users must be able to disable the motion control entirely.
  • Impact: Benefits users who may have difficulty with device motion (e.g., in a moving vehicle, users with tremors), or those who simply prefer not to use motion controls.

Practical Guidelines for Compliance

  • For 1.3.4 Orientation:
    • Use responsive design principles that adapt to both portrait and landscape orientations without losing content or functionality.
    • Avoid using CSS properties like @media (orientation: landscape) to force specific layouts unless absolutely essential, and always provide an alternative if doing so.
    • Do not use JavaScript methods like screen.orientation.lock() without providing a user-controlled override.
  • For 2.5.1 Pointer Gestures:
    • For pinch-to-zoom, provide UI controls like plus/minus buttons.
    • For swipe gestures on carousels, also include navigation arrows or dots.
    • Ensure all such functionality is also keyboard accessible.
  • For 2.5.2 Pointer Cancellation:
    • Design interactive elements so that actions are initiated on the mouseup or touchend event, not mousedown or touchstart.
    • If an immediate action is necessary on mousedown (rare), provide a clear “Undo” or “Cancel” mechanism.
  • For 2.5.3 Label in Name:
    • Ensure the <label> element’s text content is exactly what is visually presented for form controls.
    • For buttons, the text content of the <button> element or the alt text of an image button should match its visible text.
    • When using aria-label or aria-labelledby, make sure the accessible name generated includes the visible text.
  • For 2.5.4 Motion Actuation:
    • If a “shake to undo” feature exists, provide an “Undo” button in the UI.
    • If tilting a device scrolls content, provide traditional scrollbars or navigation arrows.
    • Always offer a setting to enable/disable motion controls.

Examples of Correct and Incorrect Implementations

Orientation (1.3.4)

Correct Implementation: Responsive Design

<!-- HTML Structure -->
<div class="container">
  <header>...</header>
  <main>...</main>
  <footer>...</footer>
</div>

/* CSS for responsiveness */
.container {
  display: flex;
  flex-direction: column;
}

@media (min-width: 768px) {
  .container {
    flex-direction: row;
  }
  /* Content reflows horizontally */
}

/* No hardcoded orientation lock */

This design adapts fluidly to both portrait and landscape orientations without requiring the user to change their device’s physical orientation.

Incorrect Implementation: Forced Orientation

<!-- HTML (irrelevant, problem is in CSS/JS) -->

/* CSS attempting to force landscape */
@media (orientation: portrait) {
  body {
    display: none; /* Hides content if in portrait */
  }
  body::before {
    content: "Please rotate your device to landscape mode";
    display: block;
    text-align: center;
    padding-top: 50vh;
  }
}

// JavaScript attempting to lock orientation
// Avoid using unless essential AND an override is provided
// screen.orientation.lock('landscape');

The content is unusable or hidden in portrait mode, forcing the user into a specific orientation without an essential reason.

Pointer Gestures (2.5.1)

Correct Implementation: Alternative Controls for Pinch-to-Zoom

<div class="map-container">
  <img src="map.png" alt="Interactive map" role="img" aria-describedby="map-controls">
  <div id="map-controls" class="zoom-controls">
    <button aria-label="Zoom In">+</button>
    <button aria-label="Zoom Out">-</button>
  </div>
</div>

/* JavaScript for pinch-to-zoom (gesture) AND button controls */
// (Illustrative, actual implementation would be more complex)
function zoomIn() { /* ... zoom in logic ... */ }
function zoomOut() { /* ... zoom out logic ... */ }

document.querySelector('.zoom-controls button:first-child').addEventListener('click', zoomIn);
document.querySelector('.zoom-controls button:last-child').addEventListener('click', zoomOut);

// Touch event listeners for pinch-to-zoom would also be present

Users can pinch-to-zoom, but also use the dedicated zoom in/out buttons.

Incorrect Implementation: Gesture-Only Interaction

<div class="carousel">
  <img src="image1.jpg" alt="Slide 1 of carousel">
  <img src="image2.jpg" alt="Slide 2 of carousel">
</div≯

/* JavaScript: Only swipe gesture is supported for navigation */
// (Illustrative)
let carousel = document.querySelector('.carousel');
carousel.addEventListener('touchstart', handleTouchStart, false);
carousel.addEventListener('touchmove', handleTouchMove, false);
// No buttons or keyboard controls for next/previous slide

The carousel can only be navigated by swiping, making it inaccessible to mouse users or those who cannot perform swipe gestures.

Pointer Cancellation (2.5.2)

Correct Implementation: Action on Pointer Up

<button id="myButton">Click Me</button>

<script>
  document.getElementById('myButton').addEventListener('mouseup', function() {
    alert('Button clicked!'); // Action triggered on mouseup/touchend
  });
  // No action on mousedown/touchstart
</script>

The user can press the button down and then drag their pointer away to cancel the action before releasing.

Incorrect Implementation: Action on Pointer Down Only

<button id="myButton">Click Me</button>

<script>
  document.getElementById('myButton').addEventListener('mousedown', function() {
    alert('Button clicked!'); // Action triggered immediately on mousedown
  });
  // No undo mechanism provided
</script>

The action triggers immediately on pointer down, offering no opportunity to abort an accidental click.

Label in Name (2.5.3)

Correct Implementation: Accessible Name Contains Visible Label

<label for="firstName">First Name:</label>
<input type="text" id="firstName">

<button>Submit Form</button>

<!-- Button with icon and ARIA label that includes visible text -->
<button aria-label="Close dialog"><span aria-hidden="true">×</span></button>

The accessible name for the input is “First Name:”, and for the first button is “Submit Form”. For the close button, the accessible name “Close dialog” includes the implied visible text/functionality.

Incorrect Implementation: Mismatch Between Label and Accessible Name

<p>Email Address:</p> <!-- Visually identifies the input -->
<input type="email" id="emailInput" aria-label="Enter your email">

<button aria-label="Send"><img src="paper-plane.svg" alt="Send icon"></button> <!-- Visually appears as 'Send' -->

For the input, the visible label is “Email Address:”, but the accessible name is “Enter your email”. This mismatch can confuse screen reader users and speech input users. For the button, while the image has alt text, the visible *intent* of the button is “Send”, and the aria-label should align with this visible meaning or contain the visible text if there were any.

Motion Actuation (2.5.4)

Correct Implementation: Alternative UI Control and Disable Option

<!-- UI for undo functionality -->
<button id="undoButton">Undo Last Action</button>

<!-- UI for motion control toggle -->
<label for="motionToggle">Enable Shake to Undo:</label>
<input type="checkbox" id="motionToggle" checked>

<script>
  let motionEnabled = true;

  document.getElementById('undoButton').addEventListener('click', function() {
    // Perform undo action
    alert('Action undone via button!');
  });

  document.getElementById('motionToggle').addEventListener('change', function(event) {
    motionEnabled = event.target.checked;
    if (motionEnabled) {
      console.log('Shake to undo enabled');
      // Add device motion listener
    } else {
      console.log('Shake to undo disabled');
      // Remove device motion listener
    }
  });

  // Example of motion listener (only active if motionEnabled is true)
  window.addEventListener('devicemotion', function(event) {
    if (motionEnabled) {
      // Check for significant motion and trigger undo
      // alert('Action undone via shake!');
    }
  });
</script>

Users can undo via a button or by shaking the device (if enabled). The shake-to-undo feature can be toggled off.

Incorrect Implementation: Motion-Only Actuation

<!-- No visual UI for undo -->

<script>
  // Only relies on device motion for undo functionality
  window.addEventListener('devicemotion', function(event) {
    // Check for significant motion and trigger undo
    alert('Action undone via shake!');
  });
  // No button for undo, and no way to disable motion actuation
</script>

The “undo” function is exclusively triggered by shaking the device, with no alternative UI control and no option to disable the motion control.

Best Practices and Common Pitfalls

Best Practices:

  • Design for Mobile First: Incorporate responsive and adaptive design from the outset to naturally handle various orientations and screen sizes.
  • Prioritize Keyboard Accessibility: Ensure all interactive elements can be operated via keyboard, which often provides a good baseline for single-pointer alternatives.
  • Semantic HTML: Use appropriate HTML elements (e.g., <button>, <a>, <label>, form controls) for their intended purpose to ensure correct accessible naming and interaction patterns.
  • Test with Assistive Technologies: Regularly test your content with screen readers, speech input, and other assistive technologies to catch issues.
  • User Testing: Involve users with disabilities in your testing process to gain real-world insights.
  • Clear Labeling: Always ensure visual labels of interactive components are part of their accessible names.
  • Provide Alternatives: For any complex or motion-based interaction, proactively provide simple, UI-based alternatives.

Common Pitfalls:

  • Over-reliance on Gestures: Designing for touch interfaces with complex gestures without providing simpler alternatives.
  • Forcing Orientation: Locking the device orientation without a compelling and essential reason.
  • Triggering Actions on mousedown/touchstart: This common development pattern can inadvertently violate Pointer Cancellation if no undo is provided.
  • Inconsistent Accessible Names: The visible text of a button says “Read More”, but its aria-label is “More Info”, causing confusion for screen reader and speech input users.
  • Motion-Only Interactions: Assuming all users can or want to interact with content via device motion.
  • Ignoring WCAG 2.0 A: Remember that WCAG 2.1 A *includes* all WCAG 2.0 A requirements. Neglecting these fundamentals (e.g., image alt text, keyboard navigation) is still a failure.

Conclusion

WCAG 2.1 Level A sets a crucial baseline for modern web accessibility, ensuring that fundamental aspects of web content are usable by a wider audience, especially as technology evolves. By diligently adhering to these guidelines, developers and content creators can build more inclusive, robust, and user-friendly digital experiences that work for everyone, regardless of their abilities or the devices they choose to use.

Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.