Jump to main content

Check your web interface for accessibility


This guide will help you address common accessibility pitfalls in web applications and content websites.

We aim to comply with the Web Content Accessibility Guidelines (WCAG) 2.2, level AA. WCAG has been adopted as the standard for accessibility legislation around the world.

Why accessibility is important

Designing and coding for accessibility helps everyone. People with disabilities or age-related challenges that affect seeing, hearing, moving, speaking, or understanding information need accessible design. But disabilities can also be temporary or situational, like having an injury, being in a noisy place, or dealing with glare.

The Web Content Accessibility Guidelines (WCAG) ensure that interfaces are perceivable, operable, understandable and robust.

When using Vanilla

Components, styles and documentation for Vanilla are written with accessibility in mind, but do not guarantee an accessible experience for your website or web application.

When you use Vanilla, check the Accessibility tab in each component's documentation. We also suggest that you check the code examples, which follow best practices.

Whether you are using Vanilla or not, make sure to use correct HTML markup and semantics to make the most of browsers' built-in accessibility features.

Automated tools

Automated tools can identify many issues with markup and styles. However, they are not sufficient for conducting a comprehensive accessibility audit. Use them mindfully, and do rely as well on manual reviews.

Here are some tools that may help you:

Check visual accessibility

These checks support people with low vision (cataracts), color vision deficiencies (color blindness), photosensitivity, or reading difficulties by ensuring clear contrast, readable text at any size, no reliance on color alone, and safe, non-distracting visuals.

Enable the visual features

High contrast mode
Go to Settings > Accessibility > Seeing, enable High Contrast.
You can also enable High Contrast in the Accessibility menu.
Dark theme
Go to Settings > Appearance > Style, select Dark.
Large text
Go to Settings > Accessibility > Seeing, enable Large Text.
You can also enable Large Text in the Accessibility menu.
Reduced motion
Go to Settings > Accessibility > Seeing, disable Animation Effects.

Visual accessibility checklist

  • All elements are visible and all text is legible in all themes
    • If your framework supports dark theme or high contrast mode, check all possible combinations.
  • All text wraps instead of overflowing/cropping when enabling large text mode
  • All text wraps instead of overflowing/cropping when zooming 200%
  • All text wraps instead of overflowing/cropping when the window is resized
  • Meaning is conveyed through text or icons, not by color alone.
    • For example: for errors, an error message is shown in addition to a red border.
  • Animations are disabled or reduced when reduced motion is enabled in the system settings
    • Large positional shifts, parallax scrolling, sliding panels, carousels, rotating spinners, or auto-playing loops are problematic and should be disabled.
    • Subtle opacity fades, color changes, shadows, or small local micro-interactions are OK.
    • Use CSS's prefers-reduced-motion to honour system settings.
  • No flashing (there should not be more than 3 flashes per second)
  • All elements have enough contrast with their background

Contrast checks

Default styles from Vanilla already provide sufficient contrast out of the box, but you should double check elements have enough color contrast so all content is perceivable:

  • For text: 4.5:1 or higher contrast with background
  • For everything else (for instance, icons on background): 3:1 or higher contrast with background

No minimum contrast is required for inactive components, decorative images or graphics, or logos.

You should be particularly cautious in the following cases:

  • Check how any local style overrides affect states like hover or focus
  • Check light colors, such as light gray for secondary text or yellow
  • Check semantic colors for text, such as red for errors or yellow for warnings
  • Check how colors change on light and dark theme, and high contrast mode

For checking color contrast:

  • On most browsers, including Firefox and Chrome, you can check contrast ratio by inspecting an element and clicking on the colour swatch next to the CSS value. Remember we are aiming at level AA at least.
  • Install a checker, such as Kontrast or Contrast in Ubuntu, and pick the foreground and background colors.

Be mindful of text on images, and the use of transparency: some automatic tests may evaluate contrast incorrectly in those cases. Common sense may help flag up problems too: if text looks unreadable to you, it's not accessible no matter what the contrast checker says.

Check keyboard navigation

These checks ensure a good experience for keyboard-only users, including people with motor disabilities that cannot use a mouse or trackpad, blind users who rely on screen readers, and power users who just prefer to use their keyboard.

Try keyboard shortcuts

For a simple test, select the window you want to test. Then hit the Tab key repeatedly and check how focus moves through all interactive elements.

For a more thorough test, you need these shortcuts:

Action Shortcut
Move to next interactive item Tab
Move to previous interactive item Shift+Tab
Interact with an item or group Enter
Exit a group Esc

Keyboard navigation checklist

  • All interactive elements (for example, buttons, fields, links) can be focused using the Tab key
  • All interactive elements have a visible focus state (ideally a focus ring)
  • There are no focus traps: it is possible to escape all loops, for instance by pressing the Esc key
  • Focus moves from one element to the next in a logical order
    • In most of our apps, that usually means sidebar (if open), then body; and top to bottom, left to right (or right to left for RTL languages such as Arabic or Hebrew).
  • A skip link is provided at the beginning of the page to bypass navigation
  • When a dialog opens, focus moves to the dialog
  • When a dialog closes, focus moves back to the element that triggered the dialog
  • Dialogs close by hitting the Escape key
  • If an element doesn't have a visible label but does have a tooltip on hover, the tooltip should also be visible on focus

Check screen reading

All graphical interfaces should be readable with common screen readers. Screen readers benefit blind and visually impaired users who rely on audio feedback to navigate interfaces. To work properly, screen readers require good markup, labelling, and logical content structure.

Use the screen reader

Orca is the default screen reader in Ubuntu Desktop and other Linux distributions. It can be enabled in Settings > Accessibility > Seeing. You can also enable Screen Reader in the Accessibility menu.

Note that some Orca features don't work with certain combinations of Ubuntu releases and application toolkits. Read Improve screen reader usability.

You need to become familiar with keyboard shortcuts to use the screen reader. Modifier keys are used in the shortcuts:

Super
Generally mapped to the Windows key on Windows computers, and the Command key on Macs.
Orca
By default, the Orca key is CapsLock for the Laptop layout, and the Insert key for the Desktop layout. You can set the layout in the Orca settings by typing orca -s in the terminal.
Action Laptop layout Desktop layout
Enable screen reader Super+Alt+S Super+Alt+S
Quit screen reader Super+Alt+S Super+Alt+S
Learn mode Orca+H (exit with Esc) Insert+H (exit with Esc)
Orca preferences CapsLock+Space Insert+Space
Toggle [flat review](https://documentation.ubuntu.com/desktop/en/latest/how-to/accessibility/orca/navigate-the-screen-using-the-screen-reader/#examine-a-window) CapsLock+P Insert+- on the numeric keypad
Say all (in flat review) CapsLock and double-press ; Double-press + on the numeric keypad
Read current line CapsLock+I 8 on the numeric keypad
Read next line CapsLock+O 9 on the numeric keypad
Read previous line CapsLock+U 7 on the numeric keypad

You can find further guidance in the screen reader documentation.

Screen reading checklist

  • All interactive elements (buttons, fields, links…) have a label and a role that is read out loud by the screen reader
  • The HTML document has an appropriate lang attribute on the root element (e.g., <html lang="en">)
  • HTML5 semantic elements (<header>, <nav>, <main>, <article>, <aside>, <footer>) and ARIA landmarks are used to define page regions
  • All labels are descriptive, meaningful and concise
  • All labels are unique, unless they trigger the exact same action.
    • For example, if there's more than one share button, each label should mention what it refers to ("Share [item name 1]", "Share [item name 2]")
  • Links have descriptive text that makes sense out of context (avoid "click here" or "read more")
  • All pages have a meaningful title or main heading
  • All headings are unique and meaningful
  • Headings follow a sequential order, without skipping any levels.
    • For example, H3 headings are always under an H1 and an H2 heading.
    • Use the right markup for heading levels regardless of how they are styled. You can achieve this by using heading classes, for example: <h2 class="p-heading--3">
  • Errors are announced and readable with the screen reader
  • For images that are not strictly decorative, provide alternative text that can be read out loud by the screen reader
    • Get guidance on how to write good alternative text in the Vanilla content guidelines
    • Avoid using images or icons in CSS pseudo-elements (:before, :after) as they are not accessible to screen readers
  • Decorative elements are hidden from screen readers using aria-hidden="true" or appropriate CSS techniques
  • SVG graphics have appropriate <title> and <desc> elements, or use aria-label or aria-labelledby
  • All visual content in videos is described by a narrator, in the transcript, or in adjacent text.

Check additional accessibility

Besides the more common checks above, you should also keep in mind these:

  • All interactive elements have a width and height of at least 24px, or have sufficient space around them.
  • All UI text is reasonably short and easy to understand
  • The content is organized with a clear and logical structure that makes sense
  • Layout and design patterns are consistent throughout the interface
  • When there's an error submitting data or in a flow, a meaningful error message is shown
    • Good error messages explain to the user how to avoid them, or at least explain the cause of the error.
  • Search functionality is provided whenever possible so users have an alternative way to find the page or section they are looking for
  • Audio or video that lasts more than 3 seconds does not play automatically
  • Audio or video that lasts more than 3 seconds can be paused or muted
  • If an experience cannot be made accessible, provide an alternative for users to access the same information or functionality
    • Provide text alternatives (for instance, transcriptions or captions) for audio and video content
    • Provide good labels or a table as an alternative for data charts.

Look for user feedback

When auditing an app, check any outstanding accessibility issues in the app repository. Actual users are the best source for accessibility issues.

You should proactively test your interface with a diverse group of users, including people who use assistive technologies. You can recruit testers through specialized agencies or by reaching out to colleagues and friends.

Report accessibility issues

If you spot an accessibility problem in Vanilla, let us know by filing an issue on GitHub.

If you found an accessibility issue in another project, please file an issue in the relevant repository.

Describe the issue in as much detail as you can, and provide instructions to test it. Screenshots and screen recordings also help. You can propose a fix for the issue, but it's not strictly necessary.

References

The volume of information on the WCAG website can be disorienting. We keep the following links handy for quick reference:

  • WCAG 2.2: The complete W3C standard, including principles, guidelines, and success criteria
  • Understanding WCAG 2.2: Detailed reference with intent, benefits to people with disabilities, examples, resources, and techniques
  • How to Meet WCAG 2.2: A customizable quick reference with guidelines, success criteria, and techniques
  • Techniques for WCAG 2.2: Instructions for developers, including browser and assistive technology support notes, examples, code, resources, and test procedures

Additional resources

The web is abundant in tools that help to create and test for accessible sites. We find the following particularly useful: