-
Notifications
You must be signed in to change notification settings - Fork 56
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into kh-rename-files
- Loading branch information
Showing
17 changed files
with
687 additions
and
264 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# Guards against developers using the title attribute (`github/a11y-no-title-attribute`) | ||
|
||
💼 This rule is enabled in the ⚛️ `react` config. | ||
|
||
<!-- end auto-generated rule header --> | ||
|
||
The title attribute is strongly discouraged. The only exception is on an `<iframe>` element. It is hardly useful and cannot be accessed by multiple groups of users including keyboard-only users and mobile users. | ||
|
||
The `title` attribute is commonly set on links, matching the link text. This is redundant and unnecessary so it can be simply be removed. | ||
|
||
If you are considering the `title` attribute to provide supplementary description, consider whether the text in question can be persisted in the design. Alternatively, if it's important to display supplementary text that is hidden by default, consider using an accessible tooltip implementation that uses the aria-labelledby or aria-describedby semantics. Even so, proceed with caution: tooltips should only be used on interactive elements like links or buttons. See [Tooltip alternatives](https://primer.style/design/guides/accessibility/tooltip-alternatives) for more accessible alternatives. | ||
|
||
### Should I use the title attribute to provide an accessible name for an <svg>? | ||
|
||
Use a <title> element instead of the title attribute, or an aria-label. | ||
|
||
## Rule Details | ||
|
||
👎 Examples of **incorrect** code for this rule: | ||
|
||
```jsx | ||
<a src="https://www.github.com" title="A home for all developers"> | ||
GitHub | ||
</a> | ||
``` | ||
|
||
```jsx | ||
<a href="/" title="github.com"> | ||
GitHub | ||
</a> | ||
``` | ||
|
||
```jsx | ||
<span src="https://www.github.com" title="supercalifragilisticexpialidocious"> | ||
supercali... | ||
</span> | ||
``` | ||
|
||
👍 Examples of **correct** code for this rule: | ||
|
||
```jsx | ||
<iframe src="https://www.github.com" title="Github"></iframe> | ||
``` | ||
|
||
## Version |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# Ensures that interactive elements are not visually hidden (`github/a11y-no-visually-hidden-interactive-element`) | ||
|
||
💼 This rule is enabled in the ⚛️ `react` config. | ||
|
||
<!-- end auto-generated rule header --> | ||
|
||
## Rule Details | ||
|
||
This rule guards against visually hiding interactive elements. If a sighted keyboard user navigates to an interactive element that is visually hidden they might become confused and assume that keyboard focus has been lost. | ||
|
||
Note: we are not guarding against visually hidden `input` elements at this time. Some visually hidden inputs might cause a false positive (e.g. some file inputs). | ||
|
||
### Why do we visually hide content? | ||
|
||
Visually hiding content can be useful when you want to provide information specifically to screen reader users or other assitive technology users while keeping content hidden from sighted users. | ||
|
||
Applying the following css will visually hide content while still making it accessible to screen reader users. | ||
|
||
```css | ||
clip-path: inset(50%); | ||
height: 1px; | ||
overflow: hidden; | ||
position: absolute; | ||
white-space: nowrap; | ||
width: 1px; | ||
``` | ||
|
||
👎 Examples of **incorrect** code for this rule: | ||
|
||
```jsx | ||
<button className="visually-hidden">Submit</button> | ||
``` | ||
|
||
```jsx | ||
<VisuallyHidden> | ||
<button>Submit</button> | ||
</VisuallyHidden> | ||
``` | ||
|
||
```jsx | ||
<VisuallyHidden as="button">Submit</VisuallyHidden> | ||
``` | ||
|
||
👍 Examples of **correct** code for this rule: | ||
|
||
```jsx | ||
<h2 className="visually-hidden">Welcome to GitHub</h2> | ||
``` | ||
|
||
```jsx | ||
<VisuallyHidden> | ||
<h2>Welcome to GitHub</h2> | ||
</VisuallyHidden> | ||
``` | ||
|
||
```jsx | ||
<VisuallyHidden as="h2">Welcome to GitHub</VisuallyHidden> | ||
``` | ||
|
||
## Options | ||
|
||
- className - A css className that visually hides content. Defaults to `sr-only`. | ||
- componentName - A react component name that visually hides content. Defaults to `VisuallyHidden`. | ||
- htmlPropName - A prop name used to replace the semantic element that is rendered. Defaults to `as`. | ||
|
||
```json | ||
{ | ||
"a11y-no-visually-hidden-interactive-element": [ | ||
"error", | ||
{ | ||
"className": "visually-hidden", | ||
"componentName": "VisuallyHidden", | ||
"htmlPropName": "as" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
## Version |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# SVGs must have an accessible name (`github/a11y-svg-has-accessible-name`) | ||
|
||
💼 This rule is enabled in the ⚛️ `react` config. | ||
|
||
<!-- end auto-generated rule header --> | ||
|
||
## Rule Details | ||
|
||
An `<svg>` must have an accessible name. Set `aria-label` or `aria-labelledby`, or nest a `<title>` element as the first child of the `<svg>` element. | ||
|
||
However, if the `<svg>` is purely decorative, hide it with `aria-hidden="true"` or `role="presentation"`. | ||
|
||
## Resources | ||
|
||
- [Accessible SVGs](https://css-tricks.com/accessible-svgs/) | ||
|
||
## Examples | ||
|
||
### **Incorrect** code for this rule 👎 | ||
|
||
```html | ||
<svg height='100' width='100'> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
</svg> | ||
``` | ||
|
||
```html | ||
<svg height='100' width='100' title='Circle with a black outline and red fill'> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
</svg> | ||
``` | ||
|
||
```html | ||
<svg height='100' width='100'> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
<title>Circle with a black outline and red fill</title> | ||
</svg> | ||
``` | ||
|
||
### **Correct** code for this rule 👍 | ||
|
||
```html | ||
<svg height='100' width='100'> | ||
<title>Circle with a black outline and red fill</title> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
</svg> | ||
``` | ||
|
||
```html | ||
<svg aria-label='Circle with a black outline and red fill' height='100' width='100'> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
</svg> | ||
``` | ||
|
||
```html | ||
<svg aria-labelledby='circle_text' height='100' width='100'> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
</svg> | ||
``` | ||
|
||
```html | ||
<svg aria-hidden='true' height='100' width='100'> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
</svg> | ||
``` | ||
|
||
```html | ||
<svg role='presentation' height='100' width='100'> | ||
<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red'/> | ||
</svg> | ||
``` | ||
|
||
## Version |
Oops, something went wrong.