useSemanticElements
Summary
Section titled Summary- Rule available since:
v1.8.0
- Diagnostic Category:
lint/a11y/useSemanticElements
- This rule is recommended, which means is enabled by default.
- This rule doesn’t have a fix.
- The default severity of this rule is error.
- Sources:
- Same as
jsx-a11y/prefer-tag-over-role
- Same as
Description
Section titled DescriptionIt detects the use of role
attributes in JSX elements and suggests using semantic elements instead.
The role
attribute is used to define the purpose of an element, but it should be used as a last resort.
Using semantic elements like <button>
, <nav>
and others are more accessible and provide better semantics.
Examples
Section titled ExamplesInvalid
Section titled Invalid<div role="checkbox"></div>
code-block.jsx:1:6 lint/a11y/useSemanticElements ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ The elements with this role can be changed to the following elements:
<input type=“checkbox”>
> 1 │ <div role=“checkbox”></div>
│ ^^^^^^^^^^^^^^^
2 │
ℹ For examples and more information, see WAI-ARIA Roles
<div role="separator"></div>
code-block.jsx:1:6 lint/a11y/useSemanticElements ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ The elements with this role can be changed to the following elements:
<hr>
> 1 │ <div role=“separator”></div>
│ ^^^^^^^^^^^^^^^^
2 │
ℹ For examples and more information, see WAI-ARIA Roles
Valid
Section titled Valid<> <input type="checkbox">label</input> <hr/></>;
All elements with role="img"
are ignored:
<div role="img" aria-label="That cat is so cute"> <p>🐈 😂</p></div>
How to configure
Section titled How to configure{ "linter": { "rules": { "a11y": { "useSemanticElements": "error" } } }}