PLAINFINCH learn by building

Accessibility checklist

  • "Click here" is avoided Links say where they lead instead of vague words that mean nothing when read alone.
  • 1.1.1 Non-text Content Images, icons and other non-text items need a text version that gives the same meaning.
  • 1.3.2 Meaningful Sequence When order changes the meaning, the code order must match the order people should read.
  • 1.3.5 Identify Input Purpose Fields asking for personal details say what they collect so browsers can fill them in.
  • 1.4.1 Use of Color Colour alone never carries meaning; pair it with text, an icon or a pattern as well.
  • 1.4.10 Reflow At 320 CSS pixels wide the page fits on screen without scrolling sideways to read.
  • 1.4.11 Non-text Contrast Borders of controls, focus rings and key icons need at least 3:1 contrast.
  • 1.4.3 Contrast (Minimum) Normal text needs a 4.5:1 contrast ratio and large text needs at least 3:1.
  • 1.4.4 Resize Text Text can be enlarged to 200 percent without content being cut off or lost.
  • 2.1.1 Keyboard Everything a mouse can do on the page can also be done with a keyboard alone.
  • 2.1.2 No Keyboard Trap Focus can always move into and back out of every part of the page by keyboard.
  • 2.2.2 Pause, Stop, Hide Moving or auto-updating content that lasts over five seconds can be paused or hidden.
  • 2.3.1 Three Flashes Nothing on the page flashes more than three times in any one second.
  • 2.4.1 Bypass Blocks There is a way to jump past repeated blocks like the header straight to the content.
  • 2.4.11 Focus Not Obscured A focused item is never fully hidden behind sticky headers, banners or other overlays.
  • 2.4.2 Page Titled Each page has a title that describes its topic or the task it is for.
  • 2.4.3 Focus Order Tabbing moves through the page in an order that keeps meaning and makes sense.
  • 2.4.4 Link Purpose The reason for a link is clear from its text, or from the text right around it.
  • 2.4.7 Focus Visible Whatever has keyboard focus shows a visible indicator so people know where they are.
  • 2.5.3 Label in Name The accessible name of a control contains the words shown on its visible label.
  • 3.1.1 Language of Page The page states its main language in code so screen readers pronounce it properly.
  • 3.3.1 Error Identification When input is wrong, the problem field is identified and the error is described in text.
  • 3.3.2 Labels or Instructions Fields come with labels or instructions whenever people need to enter information.
  • 3.3.3 Error Suggestion If the site knows how to fix a mistake, the error message tells the person how.
  • 4.1.3 Status Messages Status updates are announced by screen readers without moving the user's focus.
  • :focus-visible A CSS selector that styles focus for keyboard users without showing it on every click.
  • <details> and <summary> Built-in elements that make a show and hide section with no script and full keyboard support.
  • <dialog> A native HTML element for pop-up windows that handles focus and Escape for you.
  • Accessibility Making sites work for people with all kinds of abilities, devices and ways of browsing.
  • Accessibility audit A structured review of a page against checks, noting each failure and how to fix it.
  • Accessibility tree The simplified version of the page that browsers pass on to screen readers and other tools.
  • Accessible name The text a screen reader announces for an element, such as a button's label.
  • alt="" An empty alt tells screen readers to skip an image that is only there for decoration.
  • Animations respect reduced motion Large movement is toned down or turned off for people who have asked for less motion.
  • ARIA Extra attributes that add roles, states and names where plain HTML cannot express them.
  • aria-controls Points from a control to the element it shows, hides or changes, using that element's id.
  • aria-current Marks the current item in a set, such as the page you are on in a navigation menu.
  • aria-describedby Links an element to extra text, like a hint or error, that is read after its name.
  • aria-disabled Marks a control as unavailable while keeping it focusable so people can still find it.
  • aria-expanded Tells screen readers whether the section a button controls is open or closed right now.
  • aria-hidden Hides an element from screen readers while leaving it visible on the screen.
  • aria-invalid Flags a field whose current value has failed validation so screen readers say so.
  • aria-label Gives an element an accessible name directly when there is no visible text to use.
  • aria-labelledby Names an element using the text of one or more other elements, referenced by id.
  • aria-live Makes a region announce its changes so screen reader users hear updates as they happen.
  • aria-pressed Shows whether a toggle button is currently on or off, like a bold or mute button.
  • aria-required Tells screen readers a field must be filled, mainly for custom controls without required.
  • Assistive technology Tools like screen readers, magnifiers and switches that help people use a computer.
  • autocomplete An input attribute that tells the browser what data a field wants so it can be filled in.
  • Autoplay can be stopped Video, audio or carousels that start on their own have a clear way to pause them.
  • Browse mode A screen reader mode for reading a page with arrow keys and jumping by headings or links.
  • Buttons do actions, links go places Use a button for something that happens on this page and a link to go somewhere else.
  • Contrast ratio A number comparing the lightness of text and background, from 1:1 up to 21:1.
  • Data table headers Tables of data use th cells so each value is read with the heading it belongs to.
  • Decorative image An image that adds no information and should be silent to screen readers.
  • Dialog returns focus on close When a pop-up closes, focus goes back to the control that opened it.
  • Disclosure pattern A button that shows or hides a nearby section and reports its open state.
  • div onclick A clickable div is not a real button and misses keyboard and screen reader support.
  • Error summary A list at the top of a form that names each problem and links to the field involved.
  • Escape closes overlays Pressing Escape shuts dialogs, menus and pop-ups and returns the user to where they were.
  • Every field has a visible label Each input has a label people can see, tied to it in code so it is announced too.
  • Every image has alt text Each img has an alt attribute, written out for meaning or left empty for decoration.
  • Every page has one h1 A single main heading tells people what the page is about before anything else.
  • fieldset and legend Wrap related fields in a fieldset and give it a legend that names the whole group.
  • Focus indicator The outline or highlight showing which element will respond to the keyboard.
  • Focus management Moving focus on purpose with script, for example into a dialog when it opens.
  • Focus order The sequence in which elements receive focus as someone presses Tab through a page.
  • for attribute Connects a label to its input by matching the input's id, so clicking the label works.
  • Functional image An image that works as a link or button, so its alt says what it does, not how it looks.
  • Heading levels Headings go from h1 to h6 in order, without skipping levels to get a smaller size.
  • Icon buttons have a name Buttons that show only an icon still need a text name for screen readers to announce.
  • inert An attribute that makes part of the page unclickable and unfocusable while a dialog is open.
  • inputmode Hints which on-screen keyboard to show, such as a number pad, without changing validation.
  • Keyboard trap A spot where keyboard focus gets stuck and the user cannot Tab or Escape away from it.
  • Landmarks Page regions like header, nav, main and footer that screen reader users can jump between.
  • lang attribute Set on the html element to declare the page language, such as lang="en".
  • Language of parts A phrase in another language gets its own lang so it is read with the right voice.
  • Links list A screen reader feature that lists every link on the page, stripped of surrounding text.
  • Lists use ul, ol and li Groups of items are marked up as real lists so screen readers say how many there are.
  • Live region An area of the page whose updates are spoken aloud without the user moving to it.
  • main element Wraps the main content of the page so it can be reached in one jump.
  • Native elements first Prefer built-in HTML controls before ARIA, since they already come with keyboard support.
  • Nested interactive elements Putting a button inside a link, or the reverse, confuses browsers and screen readers.
  • New tab warning Tell people when a link opens a new tab or window so the change is not a surprise.
  • Placeholder is not a label Hint text inside a field vanishes when typing starts, so it cannot replace a label.
  • Plain language Short sentences and common words make content easier for everyone to understand.
  • prefers-reduced-motion A CSS media query that detects when someone has asked their system for less motion.
  • Read more links Repeated links like Read more need hidden or extra text so each one is unique.
  • Reading order The order a screen reader follows, which comes from the code rather than the layout.
  • Reflow Content rearranges into a single column at high zoom instead of needing sideways scroll.
  • rem units Sizing text in rem lets it grow when people raise the default font size in their browser.
  • required attribute Marks a field as mandatory so browsers and screen readers both report it.
  • Required fields marked in text Show required fields with words or an explained asterisk, never by colour alone.
  • role An ARIA attribute that tells assistive technology what kind of thing an element is.
  • role=alert Announces urgent messages, like a form error, immediately and interrupts other speech.
  • role=group Groups related controls under a shared name when a fieldset is not a good fit.
  • role=img on SVG Treat an inline SVG as one image and give it a name so it is announced properly.
  • role=menu Meant for app-style menus with arrow keys, not for ordinary site navigation links.
  • role=status A polite live region for updates such as saved messages or search result counts.
  • Screen reader Software that reads the screen aloud or in braille and is driven by the keyboard.
  • showModal() Opens a dialog as modal, trapping focus inside it and making the page behind inert.
  • Skip link A link at the very top that jumps keyboard users past the menu to the main content.
  • tabindex Controls whether an element can take focus; 0 adds it and -1 allows focus by script only.
  • tabindex above zero is avoided Positive tabindex values reorder focus in confusing ways and are hard to maintain.
  • type=button Stops a button inside a form from submitting it when it is only meant to run script.
  • type=email and type=tel Specific input types bring the right mobile keyboard and better autofill for each field.
  • user-scalable=no A viewport setting that blocks pinch zoom on phones and should never be used.
  • Visually hidden text Text kept off screen with CSS but still read by screen readers for extra context.
  • WCAG The Web Content Accessibility Guidelines, the shared standard for testing accessibility.
  • WCAG 2.2 AA The level most laws and policies aim for, covering all A and AA success criteria.