Skip to content

Commit 5c90965

Browse files
authored
Update accessibility guidelines with WCAG references
Add WCAG references and supporting evidence to recommendations. Some developers are unfamiliar with accessibility terminology ("focus traps", etc) or how disabled users are affected. These link help give more context and often give concrete examples of how and why to implement a recommendation.
1 parent 5e2d950 commit 5c90965

1 file changed

Lines changed: 54 additions & 27 deletions

File tree

accessibility/README.md

Lines changed: 54 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -51,61 +51,61 @@ Automated checks can catch a lot of common issues before they reach production.
5151
### Design
5252

5353
- Ensure all content's foreground color values meet the [minimum contrast ratio]
54-
for the background color they are placed over
54+
for the background color they are placed over ([WCAG 1.4.3][wcag-1-4-3])
5555
- Ensure all interactive content has distinct hover and focus states to help
56-
indicate interactivity
56+
indicate interactivity ([WCAG 2.4.7][wcag-2-4-7])
5757
- Ensure interactive elements [have a visible text label][rule-2]
58-
- Ensure color is not the only way to determine meaning
58+
- Ensure color is not the only way to determine meaning ([WCAG 1.4.1][wcag-1-4-1])
5959
- Ensure interactive components use common UI affordances where applicable, to
6060
help users understand how they can be operated
6161
- Prefer icons and glyphs that don't rely on specialized knowledge to understand
6262
their meaning, unless being used in a domain-specific context
63-
- Prefer language that is [simple and direct]
64-
- Ensure form inputs have labels that are visible in every state
65-
- Ensure link and button text is descriptive and distinct
63+
- Prefer language that is [simple and direct] ([WCAG 3.1][wcag-3-1])
64+
- Ensure form inputs have [labels that are visible in every state][placeholder-labels]
65+
- Ensure link and button text is descriptive and distinct ([WCAG 2.4.4][wcag-2-4-4])
6666
- Prefer content that is broken into logical sections, with headings that
67-
explain the content that follows
67+
explain the content that follows ([WCAG 2.4.10][wcag-2-4-10])
6868
- Prefer text sizing that is set to 16px or larger
6969
- Ensure animation does not auto-play, can be paused, and avoids [vestibular and
70-
seizure triggers]
71-
- Ensure video content has captions
70+
seizure triggers] ([WCAG 2.2.2][wcag-2-2-2])
71+
- Ensure video content has captions ([WCAG 1.2.2][wcag-1-2-2])
7272
- Prefer larger interactive target sizes, with some space between grouped
73-
interactive controls
73+
interactive controls ([WCAG 2.5.8][wcag-2-5-8])
7474

7575
### Development
7676

77-
- Ensure every focusable or interactive element has an [accessible name][]
77+
- Ensure every focusable or interactive element has an [accessible name][] ([WCAG 4.1.2][wcag-4-1-2])
7878
- Follow the [Cardinal Rules of Naming][]:
7979
1. [Heed Warnings and Test Thoroughly][rule-1]
8080
2. [Prefer Visible Text][rule-2]
8181
3. [Prefer Native Techniques][rule-3]
8282
4. [Avoid Browser Fallback][rule-4]
8383
5. [Compose Brief, Useful Names][rule-5]
84-
- Ensure semantic markup is used to describe content
85-
- Ensure content does not disappear off the screen when zoomed
84+
- Ensure [semantic markup][semantic-markup] is used to describe content
85+
- Ensure content does not disappear off the screen when zoomed ([WCAG 1.4.10][wcag-1-4-10])
8686
- Ensure that interactive content can be tabbed to and activated using the
87-
keyboard, and that the tab order matches reading order
87+
keyboard, and that the tab order matches reading order ([WCAG 2.1.1][wcag-2-1-1], [WCAG 2.4.3][wcag-2-4-3])
8888
- Ensure that heading elements are used, and that heading levels are placed in a
89-
logical order
90-
- Ensure that landmarks are used to describe the overall layout of the page or
89+
logical order ([WCAG 2.4.10][wcag-2-4-10])
90+
- Ensure that [landmarks][landmark-regions] are used to describe the overall layout of the page or
9191
view
9292
- Ensure that alternative descriptions for image content are concise,
9393
descriptive, and use punctuation (`alt` attributes for images, `title`
9494
elements for SVGs)
95-
- Ensure labels are programmatically associated with their inputs
95+
- Ensure [labels are programmatically associated][labels-associated-inputs] with their inputs
9696
- Prefer implementing a method to allow users to skip sections of repeated
97-
content
97+
content ([WCAG 2.4.1][wcag-2-4-1])
9898
- Ensure each page or view has a unique title that describes the content it
99-
contains
100-
- The `title` attribute is only used to describe `iframe` element contents
101-
- Ensure that links are used to navigate to other locations and buttons are used
102-
to trigger actions
103-
- Ensure that focus is trapped inside of modal interactions
104-
- Ensure `fieldset` and `legend` elements are used to group related inputs and
105-
label them
99+
contains ([WCAG 2.4.2][wcag-2-4-2])
100+
- The [`title` attribute is only used to describe `iframe` element contents][title-iframe]
101+
- Ensure that [links are used to navigate to other locations and buttons are used
102+
to trigger actions][links-vs-buttons]
103+
- Ensure that [focus is trapped inside of modal interactions][focus-traps]
104+
- Ensure `fieldset` and `legend` elements are used to [group related inputs and
105+
label them][fieldsets-legends]
106106
- Ensure form feedback messaging is programmatically associated with the
107-
relevant inputs
108-
- Ensure that [dynamic changes to a web page are announced](https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html)
107+
relevant inputs ([WCAG 3.3.1][wcag-3-3-1])
108+
- Ensure that dynamic changes to a web page are announced ([WCAG 4.1.3][wcag-4-1-3])
109109
- Prefer using role selectors in automated acceptance tests
110110
- [capybara_accessible_selectors]
111111
- [Testing Library's `getByRole()`][testing-library-getbyrole]
@@ -121,6 +121,33 @@ Automated checks can catch a lot of common issues before they reach production.
121121
[capybara_accessible_selectors]: https://github.com/citizensadvice/capybara_accessible_selectors
122122
[testing-library-getbyrole]: https://testing-library.com/docs/queries/byrole
123123
[playwright-getbyrole]: https://playwright.dev/docs/locators#locate-by-role
124+
[landmark-regions]: https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/
125+
[labels-associated-inputs]: https://www.w3.org/WAI/WCAG22/Techniques/html/H44
126+
[title-iframe]: https://www.w3.org/WAI/WCAG22/Techniques/html/H64
127+
[links-vs-buttons]: https://www.nngroup.com/videos/buttons-vs-links/
128+
[focus-traps]: https://okenlabs.com/blog/accessibility-implementing-focus-traps/
129+
[fieldsets-legends]: https://www.w3.org/WAI/WCAG22/Techniques/html/H71
130+
[placeholder-labels]: https://www.deque.com/blog/accessible-forms-the-problem-with-placeholders/#:~:text=A%20Placeholder%20Is%20Not%20a%20Replacement%20for%20Visible%20Labels
131+
[semantic-markup]: https://www.w3.org/WAI/WCAG22/Techniques/html/H101
132+
133+
[wcag-1-4-3]: https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html
134+
[wcag-1-4-1]: https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html
135+
[wcag-3-1]: https://www.w3.org/WAI/WCAG22/Understanding/readable.html
136+
[wcag-2-4-4]: https://www.w3.org/WAI/WCAG22/Understanding/link-purpose-in-context
137+
[wcag-2-4-10]: https://www.w3.org/WAI/WCAG22/Understanding/section-headings.html
138+
[wcag-2-2-2]: https://www.w3.org/WAI/WCAG22/Understanding/pause-stop-hide.html
139+
[wcag-1-2-2]: https://www.w3.org/WAI/WCAG22/Understanding/captions-prerecorded.html
140+
[wcag-2-5-8]: https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
141+
[wcag-4-1-2]: https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html
142+
[wcag-4-1-3]: https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html
143+
[wcag-1-4-10]: https://www.w3.org/WAI/WCAG22/Understanding/reflow.html
144+
[wcag-1-3-1]: https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html
145+
[wcag-2-1-1]: https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html
146+
[wcag-2-4-3]: https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html
147+
[wcag-2-4-1]: https://www.w3.org/WAI/WCAG22/Understanding/bypass-blocks.html
148+
[wcag-2-4-2]: https://www.w3.org/WAI/WCAG22/Understanding/page-titled.html
149+
[wcag-3-3-1]: https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html
150+
[wcag-2-4-7]: https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html
124151

125152
## Full audit
126153

0 commit comments

Comments
 (0)