Accessibility Overview
Shortcut
- Restrict single-character shortcuts. Make shortcuts consistent with convention.
Focus
-
change the default color of the outline
-
change the default color of the element
-
remove the box and underline text
Focus order
-
Elements must receive focus in an order that preserves meaning and operability (left to right, top to bottom)
-
Not jumping around between sections
-
No keyboard trap. Focus can be moved away using the keyboard or
tabindex
-
-1
indicates the element can’t tab to with keyboard, but can set focus programmatically. -
0
indicates tab to element, focus order determined by the HTML. -
1+
indicates focus order is the value of the attribute regardless the place of html element. -
Don’t fix focus order issues by setting tabindex to positive numbers.
-
Use html structure to control focus order
-
Set tabindex on elements that would not usually receive keyboard focus
Bypass blocks
-
Clear page structure by using html5 structural elements like
<main>
-
Skip link
.skip-link {
display: inline-block;
position: absolute;
top: 0;
left: -100000px;
}
.skip-link:focus {
left: 0;
}
Forms
Clear labels
-
user input must have labels
-
labels must be linked to the form control
<label for="name">Your name</label>
<input id="name" type="text">
- aria labelling. If label is not seen visually, we can use
aria-label
oraria-labelledby
.
<input id="txtSearch" aria-label="Search" aria-labelledby="butnSearch" type="text" />
<button id="btnSearch">Search</button>
-
label placement
-
input attribute: types, readonly, disabled
-
disabled value is not submitted to server, readonly value is submitted to server.
Input purposes
-
browsers offer to autocomplete info, improves suggestion accuracy
-
use autocomplete attribute for input purpose
<input type="text" autocomplete="username" />
Required fields
required
attribute present an in-broweser validation, whereasaria-required
doesn’t but will be read by screen reader
<input type="text" required>
<input type="text" aria-required="true">
Presenting error messages
-
covers all form error messages
-
identify the input control with the error.
-
aria-invalid, aria-describedby="error1"
<input id="name" type="text" aria-invalid="true" aria-required="true" aria-describedby="error1">
<span id="error1"> This field is required.</span>
-
add validation summary. when user submits the form, it immediately jumps to the validation summary if error occurs. It can be achieved by
-
setting keyboard focus to the validation summary
-
making the validation summary a live region. It does not change focus. But validation error will be read aloud.
<div id="validation-summary" role="alert"></div>
aria-live
: The[aria-live=POLITENESS_SETTING]
is used to set the priority with which screen reader should treat updates to live regions.