Comprehensive guide to web app accessibility

By Tomasz Gajda

1. Introduction

In the ever-evolving realm of web development, accessibility stands as a cornerstone of inclusive design, offering pathways for all users to seamlessly engage with digital content. But what exactly is accessibility in this context, and why does it hold such paramount significance?

1.1 What is Accessibility?

At its essence, accessibility in web development embodies the principle of ensuring that digital experiences are perceivable, operable, understandable, and robust for individuals of all abilities. It's about crafting online environments that transcend physical and cognitive barriers, empowering users with disabilities to navigate, interact, and derive value from the vast expanse of the internet. In practical terms, accessibility encompasses a myriad of considerations, ranging from the implementation of alternative text for images to the optimization of keyboard navigation and the creation of adaptable interfaces. It's about fostering an inclusive digital ecosystem where diversity is not only acknowledged but celebrated through thoughtful design and meticulous attention to detail.

1.2 Overlapping Areas of Webdev

Accessibility doesn't exist in isolation - rather, it intersects with a multitude of other facets of web development - each contributing to the overarching goal of delivering superior user experiences. From search engine optimization (SEO) to performance optimization and security protocols, the pursuit of accessibility dovetails with a host of complementary objectives.

Consider, for instance, the correlation between accessible design and SEO. By prioritizing semantic HTML markup, descriptive link text, and structured data, developers not only enhance the accessibility of their websites but also improve their visibility and rankings on search engine results pages. Similarly, the optimization of website performance through techniques like image compression and code minification not only accelerates page load times but also enhances the browsing experience for users with limited bandwidth or slower internet connections. Accessibility and security are also closely connected. Using accessible CAPTCHA alternatives and strong authentication methods increases both user trust and inclusivity.

1.3 Standards and Definitions

Established standards are essential for guiding developers in creating accessible websites. The Web Content Accessibility Guidelines (WCAG) by the World Wide Web Consortium (W3C) outline principles and success criteria for accessible web content. WCAG is based on four principles: perceivable, operable, understandable, and robust, with success criteria across three levels: A, AA, and AAA.

Other important standards include the Accessible Rich Internet Applications (ARIA) specification and the United States' Section 508 standards. Adhering to these guidelines helps developers create inclusive digital experiences. In the following chapters, we'll explore key aspects of accessible web development, including screen readers, semantic HTML, and ARIA, to help you build websites that are usable by everyone.

2. Screen readers

In the realm of web accessibility, screen readers play a pivotal role in ensuring that individuals with visual impairments can navigate and interact with digital content. Understanding how screen readers work, the importance of alternative text, and the array of other assistive technologies available is crucial for creating inclusive web experiences.

2.1 What Are Screen Readers and How Do They Work?

Screen readers are software applications that enable individuals with visual impairments to access digital content by converting text and graphical elements into synthesized speech or Braille output. These tools interpret the structure and content of web pages, allowing users to perceive and interact with the information presented. Screen readers work by parsing the HTML and other code behind a webpage, extracting meaningful content, and presenting it in a linear, auditory format. Users navigate through the content using keyboard shortcuts, allowing them to move between headings, links, form fields, and other elements. Popular screen readers include JAWS (Job Access With Speech), NVDA (NonVisual Desktop Access), and VoiceOver for macOS and iOS devices.

2.2 Alternative Text

Alternative text is a concise textual description provided for non-text content, such as images, graphics, and multimedia elements. Alt text is essential for accessibility as it conveys the purpose and content of these elements to users who cannot see them. When a screen reader encounters an image, it reads the alt text aloud, allowing the user to understand the image's context and relevance.

Best practices for writing alt text include:

  • Be Descriptive: Clearly describe the image's content and purpose. For example, "A group of people sitting around a conference table discussing a project",
  • Be Concise: Keep descriptions brief and to the point, typically no longer than a sentence or two,
  • Avoid Redundancy: Do not repeat information already conveyed in surrounding text or captions.

2.3 Other Assistive Technologies

Beyond screen readers, several other assistive technologies support individuals with disabilities in accessing and interacting with digital content:

  • Braille displays are devices that convert on-screen text into Braille, providing tactile feedback for users who are blind or have severe visual impairments. These displays connect to computers or mobile devices and dynamically update to reflect the text being read by the screen reader. This allows users to read and navigate digital content through touch.
  • Speech recognition software enables users to input text using voice commands. This technology is particularly beneficial for individuals with mobility impairments or conditions that make typing difficult. Popular speech recognition tools include Dragon NaturallySpeaking and built-in options like Apple's Siri and Google Assistant.
  • Voice control systems allow users to navigate web pages and applications using spoken commands. These systems work in conjunction with screen readers and other accessibility tools, providing an additional layer of interaction for users with various disabilities. For example, users can issue commands like "click link," "scroll down," or "open menu" to interact with web elements without needing to use a mouse or keyboard.

3. Accessible HTML

Creating accessible HTML is fundamental to ensuring that web content is usable by everyone, including individuals with disabilities. This involves using semantic HTML to convey meaning and structure, setting the appropriate language for content, and fixing markup errors to maintain a robust and navigable web experience.

3.1 Semantic HTML

Semantic HTML involves using HTML elements that accurately describe their meaning and purpose. This practice not only improves accessibility but also enhances SEO and overall code readability. Semantic elements provide context to browsers and assistive technologies, enabling them to interpret and present content correctly.

In web development we can often encounter an occurrence commonly called “div hell”. It refers to the overuse of <div> elements to structure a webpage. While <div> elements are versatile, their excessive use can lead to unmanageable, cluttered code that is difficult to read and maintain.

More importantly, it significantly hampers accessibility because <div> elements provide no semantic meaning about the content they enclose. This lack of semantic information makes it harder for assistive technologies to interpret the page structure and content correctly. Here is an example of a badly structured HTML page:

<div class="container">
  <div class="header">
    <div class="logo">My Website</div>
    <div class="nav">
      <div class="nav-item"><a href="#home">Home</a></div>
      <div class="nav-item"><a href="#about">About</a></div>
      <div class="nav-item"><a href="#contact">Contact</a></div>
    </div>
  </div>
  <div class="main-content">
    <div class="section">
      <div class="section-title">Our Services</div>
      <div class="section-content">
        <p>Details about services.</p>
      </div>
    </div>
  </div>
  <div class="footer">
    <div class="footer-content">
      (c) 2024 Your Company. All rights reserved.
    </div>
  </div>
</div>

In this example, even though the classes give us a mere understanding of the layout - the use of multiple nested <div> elements does not convey the purpose or structure of the content, making it difficult for assistive tech to navigate and interpret. Semantic HTML provides a solution - elements that convey specific meanings, making the content more accessible and easier to understand for both humans and assistive technologies. HTML5 brought even more semantic elements that help structure web pages more meaningfully:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Accessible Web Page</title>
  </head>
  <body>
    <header>
      <h1>My Website</h1>
      <nav>
        <ul>
          <li><a href="#home">Home</a></li>
          <li><a href="#about">About</a></li>
          <li><a href="#contact">Contact</a></li>
        </ul>
      </nav>
    </header>
    <main>
      <section>
        <h2>Our Services</h2>
        <p>Details about services.</p>
      </section>
    </main>
    <footer>
      <p>&copy; 2024 Your Company. All rights reserved.</p>
    </footer>
  </body>
</html>

3.2 Setting Language

Defining the language of your web content is crucial for accessibility. Screen readers rely on this information to apply the correct pronunciation and reading rules. Set the primary language of the document using the lang attribute in the tag.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Accessible Web Page</title>
</head>
<body>
  <header>
    <h1>My Website</h1>
    <!-- other content -->
  </header>
</body>
</html>

For multilingual content, we can set the lang attribute on individual elements as needed:

<p lang="es">Este es un ejemplo de contenido en español.</p>

4. Accessible Rich Internet Applications (ARIA)

ARIA is a set of specifications developed by the World Wide Web Consortium (W3C) to enhance the accessibility of web applications, especially those that are dynamic and rich in interactivity. ARIA provides additional attributes that help bridge the gap between complex user interfaces and assistive technologies, ensuring that all users, including those with disabilities, can interact with web content effectively.

4.1 What is ARIA?

ARIA (Accessible Rich Internet Applications) is a set of attributes that can be added to HTML elements to make web content and applications more accessible to people with disabilities. ARIA attributes provide information, which assistive technologies use to interpret and present web content more accurately.

4.2 Roles, States, and Properties

ARIA attributes are categorized into three main types: roles, states, and properties.

Roles

ARIA roles define the type of user interface element. By assigning a role to an element, you inform about the element's purpose. This is crucial for dynamic content that might not have a clear semantic equivalent in HTML. Role examples:

  • role="button": Defines an element as a button.
  • role="navigation": Indicates a navigation region.
  • role="main": Signifies the main content area of a document. Code sample:
<div role="button" tabindex="0">Click Me</div>

States

ARIA states represent the current condition of an element, such as whether it is disabled, expanded, or checked. States are dynamic and can change in response to user interactions. State examples:

  • aria-checked="true": Indicates that a checkbox or similar element is checked.
  • aria-expanded="false": Indicates that an expandable element is currently collapsed.
  • aria-disabled="true": Denotes that an element is disabled and not interactive. Code sample:
<button aria-pressed="true">Toggle</button>

Properties

ARIA properties describe the characteristics of elements that are not typically expressed in HTML. Properties provide additional context that helps users understand the purpose and behavior of elements. Property examples:

  • aria-label="Search": Provides an accessible name for an element.
  • aria-labelledby="elementID": Refers to another element that labels the current element.
  • aria-describedby="elementID": Points to an element that provides a description. Code sample:
<input type="text" aria-label="Search box" />

4.3 Accessible Names and Descriptions

ARIA introduces a foundational concept for all HTML markup: accessible names and descriptions. These attributes enhance the usability of web content by providing meaningful context to assistive technologies like screen readers. The text content or value exposed from elements like buttons, links, form inputs, or headings is referred to as an “accessible name.” This name is what assistive technologies use to identify and describe these elements to users:

<button>Submit</button>
<a href="#home">Home</a>

In contrast, text exposed on an element with a title attribute is called an “accessible description.” Descriptions are announced by screen readers after a slight delay and can be configured to be on or off. Therefore, don't rely solely on descriptions being announced. Descriptions can also act as accessible names if no other name is provided:

<button title="Click to submit the form">Submit</button>

Both accessible names and descriptions are crucial for assistive technology users, providing clarity on the purpose of an element. An accessible name or description should give users enough information to understand the element’s function.

ARIA Attributes: aria-label, aria-labelledby, & aria-describedby

You can explicitly set both accessible names and descriptions using ARIA attributes like aria-label, aria-labelledby, and aria-describedby. You can assign a string value to the aria-label attribute on an element with a qualifying role, such as a <button> or a landmark element.

<button aria-label="Settings"></button>

Both aria-labelledby and aria-describedby attributes take an ID as a value that matches another element's ID, making it easy to reuse content already present on the page.

<section aria-labelledby="section-heading-2">
  <h2 id="section-heading-2">All About Wombats</h2>
</section>

Determining the Accessible Name

When multiple pieces of content are associated with an element—text content, an aria-label, aria-labelledby, and aria-describedby—which one takes precedence? To avoid chaos in accessible naming, ARIA and related specifications define the order in which content should be exposed. This order does not rely on the source order (i.e., start-to-end in the markup). According to the standard algorithm, one attribute may override another, ensuring a predictable and coherent user experience across platforms.

Conclusions

Building accessible web applications is not just about adhering to standards; it’s about creating inclusive experiences that respect and accommodate the diverse needs of all users. By incorporating accessibility best practices into your development process, you ensure that your web content is usable by individuals with disabilities, thereby broadening your audience and enhancing overall user satisfaction. Throughout this article, we’ve explored the foundational principles of web accessibility, the importance of semantic HTML, the role of ARIA attributes, and the specific techniques for creating accessible names and descriptions. Here are some key takeaways:

  • Understanding Accessibility: Recognize that web accessibility is integral to modern web development. It overlaps with areas like SEO, performance, and security, reinforcing the overall quality and robustness of your web applications.
  • Using Semantic HTML: Employ semantic HTML elements to convey meaningful structure and context. This practice not only aids accessibility but also improves code maintainability and SEO.
  • Leveraging ARIA: Use ARIA roles, states, and properties judiciously to enhance the accessibility of dynamic content. Ensure that accessible names and descriptions provide clear and useful information to assistive technologies.
  • Adhering to Guidelines: Follow established guidelines such as the Web Content Accessibility Guidelines (WCAG) and the Accessible Rich Internet Applications (ARIA) specification. These standards offer comprehensive frameworks for creating accessible web content.
  • Continuous Learning and Improvement: Accessibility is an ongoing commitment. Stay informed about new developments, tools, and techniques. Engage with the accessibility community and seek feedback to continuously improve your practices.

Incorporating accessibility into your web development workflow is a step towards a more inclusive internet. By prioritizing accessibility, you not only comply with legal requirements and industry standards but also demonstrate a commitment to social responsibility and user-centric design. Ultimately, accessible web development is about making the web a place where everyone can participate and benefit, regardless of their abilities.

Additional Resources

To further enhance your understanding and implementation of web accessibility, consider exploring the following resources:

  • W3C Web Accessibility Initiative (WAI): Provides a wealth of information on web accessibility standards and guidelines.
  • WebAIM (Web Accessibility In Mind): Offers articles, tools, and training materials on web accessibility.
  • Mozilla Developer Network (MDN) Web Docs: Comprehensive documentation on HTML, ARIA, and accessibility best practices.
  • A11Y Project: A community-driven effort to make web accessibility easier.

By leveraging these resources and integrating accessibility into your web development practices, you contribute to a more inclusive digital world. Together, we can build web experiences that are not only functional and beautiful but also accessible to all.

Tomasz Gajda

Tomasz Gajda

Frontend Developer

With a keen eye for detail and a passion for enhancing user experiences, I bring a unique perspective to web development.

Could use some help with Tech?

Tomasz Gajda

Tomasz Gajda

Frontend Developer

With a keen eye for detail and a passion for enhancing user experiences, I bring a unique perspective to web development.

Could use some help with Tech?

Next Article

Simplify Your Node.js Projects with PNPM

Read article
Next Article

Simplify Your Node.js Projects with PNPM

Read article
Share
Fast Landing Pages
Plugins
Let's start working together!
What we can do
Let's start working together!