Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update a11y guidelines #6361

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 59 additions & 11 deletions docs/source/contributing/accessibility-guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,61 @@ myst:

# Accessibility guidelines

Attention should be paid to improve and maintain accessibility. In documentation, code and filenames you will often see this abbreviated as "a11y".
Attention should be paid to improve and maintain accessibility, abbreviated as "a11y".

## Clickable elements that have a symbol or icon and no visible text

If the symbol or icon is clear enough for sighted users, for instance a big "X" to close a dialog, it will still need a text for screen reader users.
## Tools

You can achieve a 'hidden' label by setting the property "aria-label" on the element.
If available, use the translation machinery available to make the label appear in the correct language.
Volto developers use several tools to analyze and test the accessibility of their projects.

Example:
[`cypress-axe`](https://github.com/component-driven/cypress-axe)
: Automate accessibility testing with [`axe-core`](https://github.com/dequelabs/axe-core) in [Cypress](https://cypress.io/).
See also [axe devTools](https://www.deque.com/axe/devtools/), a tool that helps developers check digital content against accessibility standards.

[IBM Equal Access Accessibility Checker browser extensions](https://www.ibm.com/able/toolkit/tools#develop)
: Browser extensions that test your code for accessibility issues.

[Accessible Web](https://accessibleweb.com/)
: A commercial tool that helps teams discover, understand, and remediate web accessibility issues.

[VoiceOver](https://developer.apple.com/documentation/accessibility/voiceover/)
: A gesture-based screen reader that provides an auditory description of the content onscreen for Apple iOS and macOS devices.
See [VoiceOver keyboard shortcuts](https://dequeuniversity.com/screenreaders/voiceover-keyboard-shortcuts) for usage.

[A11Y-Color-Blindness-Empathy-Test](https://vinceumo.github.io/A11Y-Color-Blindness-Empathy-Test/)
: Help designers and developers to understand color blindness and visual imparity.

[WAI-ARIA - Screen reader compatibility](https://www.powermapper.com/tests/screen-readers/aria/)
: Shows how different WAI-ARIA attributes behave in commonly used screen readers.
The results include two types of tests.

- Expected to work - these tests show support when accessibility features are used correctly
- Expected to fail - these tests show what happens when accessibility features are used incorrectly





## Tests

We use [`cypress-axe`](https://github.com/component-driven/cypress-axe) for automated testing of accessibility in Volto via Cypress.

Place accessibility test files in the directory {file}`packages/volto/cypress/tests/core/a11y/`.

Name accessibility tests `[THING] tested for a11y axe violations`.


## Common accessibility issues

This section describes common issues that you might need to address while developing for Volto core or an add-on.


### Clickable elements that have a symbol or icon and no visible text

If the symbol or icon is clear enough for sighted users—for instance a big "X" to close a dialog—it will still need a text for screen reader users.

You can achieve a "hidden" label by setting the property `aria-label` on the element.
If available, use the translation machinery to make the label appear in the correct language.

```jsx
<button className="cancel" aria-label="Cancel" onClick={() => this.onCancel()}>
Expand All @@ -31,11 +76,14 @@ Example:
</button>
```

## Do not use `<a>` tags without href
### Do not use `<a>` tags without `href`

If an element has an event listener on it and performs an action, but does not point to a proper URL, use a `<button>` and style with CSS.
The `<a></a>` HTML tag has specific behavior that screen readers support and users expect.

If an element has an event listener on it and performs an action, but does not point to a proper URL, use a `<button>` and style with CSS to style.
The reasoning is that the `<a></a>` HTML tag has specific behavior that screenreaders support and that screenreader users expect.

## Make sure form elements have a label
### Make sure form elements have a label

This is true for one-element forms as well, such as the "Search" form on the folder-contents component. Putting an icon on it does not convey any meaning to screenreader-users, you should clarify it with an aria-label.
This is true for single element forms as well, such as the "Search" form on the folder contents component.
Putting an icon on it does not convey any meaning to screen reader users.
You should clarify it with an `aria-label` attribute.
1 change: 1 addition & 0 deletions packages/volto/news/6361.documentation
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update accessibility guidelines. @stevepiercy
Loading