Checkbox Example (Two State)
Read This First
The code in this example is not intended for production environments. Before using it for any purpose, read this to understand why.
This is an illustrative example of one way of using ARIA that conforms with the ARIA specification.
- There may be support gaps in some browser and assistive technology combinations, especially for mobile/touch devices. Testing code based on this example with assistive technologies is essential before considering use in production systems.
- The ARIA and Assistive Technologies Project is developing measurements of assistive technology support for APG examples.
- Robust accessibility can be further optimized by choosing implementation patterns that maximize use of semantic HTML and heeding the warning that No ARIA is better than Bad ARIA.
About This Example
This example implements the Checkbox Pattern for a two state checkbox using div
elements.
Similar examples include:
- Checkbox (Mixed-State): Demonstrates a checkbox that uses the mixed value for aria-checked to reflect and control checked states within a group of two-state HTML checkboxes contained in an HTML
fieldset
.
Example
Sandwich Condiments
- Lettuce
- Tomato
- Mustard
- Sprouts
Accessibility Features
- To help assistive technology users understand that each checkbox is part of a set of related checkboxes named
Sandwich Condiments
, the checkboxes are wrapped in agroup
labeled by theh3
heading element. - To enable assistive technology users to perceive the set of checkboxes as a list of four items, each
div
element that serves as a checkbox is contained within ali
element contained by aul
element. - To make it easier to perceive that clicking either the label or checkbox will activate the checkbox, when a pointer hovers over either the checkbox or label, the background color changes, a border appears, and the cursor changes to a pointer.
- Because transparent borders are visible on some systems when operating system high contrast settings are enabled, transparency cannot be used to create a visual difference between the element that is focused and other elements. Instead of using transparency, the focused element has a thicker border and less padding. When an element receives focus, its border changes from 0 to 2 pixels and padding is reduced by 2 pixels. When an element loses focus, its border changes from 2 pixels to 0 and padding is increased by 2 pixels.
-
To ensure the borders of the inline SVG checkbox graphics in the CSS have sufficient contrast with the background when high contrast settings invert colors, the color of the borders are synchronized with the color of the text content.
For example, the color of the checkbox borders is set to match the foreground color of high contrast mode text by specifying the CSS
currentcolor
value for thestroke
property of therect
andpolyline
elements used to draw the checkbox. To make the background of the checkbox graphics match the high contrast background color, thefill-opacity
attribute of therect
element is set to zero. If specific colors were instead used to specify thestroke
andfill
properties, those colors would remain the same in high contrast mode, which could lead to insufficient contrast between the checkbox and the background or even make the checkbox invisible if the color matched the high contrast mode background.
Note: The SVG element needs to have the CSSforced-color-adjust
property set toauto
for thecurrentcolor
value to be updated in high contrast mode. Some browsers do not useauto
for the default value.
Keyboard Support
Key | Function |
---|---|
Tab | Moves keyboard focus to the checkbox . |
Space | Toggles checkbox between checked and unchecked states. |
Role, Property, State, and Tabindex Attributes
Role | Attribute | Element | Usage |
---|---|---|---|
h3 |
|
||
group |
div |
|
|
aria-labelledby |
div |
References the id attribute of the h3 element to define the accessible name for the group of checkboxes. |
|
checkbox |
div |
|
|
tabindex="0" |
div |
Includes the checkbox in the page tab sequence. | |
aria-checked="false" |
div |
|
|
aria-checked="true" |
div |
|
JavaScript and CSS Source Code
- CSS: checkbox.css
- Javascript: checkbox.js
HTML Source Code
Simple Two-State Checkbox Example
To copy the following HTML code, please open it in CodePen.