Did you know that the
<button> element's content, and the content of its decendants may be concatenated to create an accessible name.
Lets start by looking at the different methods that can be used to generate an accessible name for the
aria-labelledby is present, the contents of one or more another elements could be used to generate an accessible name:
<button aria-labelledby="aaa"></button> <p id="aaa">Hello world</p>
If there is no
aria-labelledby present, the content of the
aria-label attribute could be used:
<button aria-label="Hello world"></button>
If there is no
aria-label present, the
<button> element's content could be used. This is the preferred method as it provides a matching visible text label and accessible name.
And finally, if there is no
aria-label or content present, the content of the
title attribute could be used.
<button title="Hello world"></button>
More on button content
Let's look more closely at "Option 3", where the
<button> element's content is used for the accessible name.
This accessible name is concatenated from:
- Any content (text strings) directly within the element
- The accessible names of all child or descendant elements, if relevant
The result of these two possible sources generates the final accessible name, expressed as text strings.
<button> element below has 6 child elements. For each of these, any possible accessible name must be calculated before being applied to the overall accessible name.
In this case, the final accessible name is: "Hello how are you doing today?"
<button> Hello <span>how</span> <span>are</span> <span>you</span> <span role="img" aria-label="doing"></span> <span role="img" aria-labelledby="bbb"></span> <span title="?"></span> </button> <p id="bbb">today</p>