A label should only contain text, do not put interactive elements such as links and buttons inside, since:
- It is more complicated to activate the form control associated with
<label>
. - Screen readers will have problems announcing the content of
<label>
(they only read the part that does not contain text).
DON'T
<label for="tac">
<input
type="checkbox"
id="tac"
name="tac"
/>
I agree with the <a href="terms-and-conditions.html">Terms and Conditions</a>
</label>
The best option is to take the interactive element out of <label>
and relate it to the form control using the aria-describedby
attribute.
DO
<label for="tac">
<input
type="checkbox"
id="tac"
name="tac"
aria-describedby="tac-desc"
/>
I agree with the Terms and Conditions
</label>
<p id="tac-desc">
Please read <a href="terms-and-conditions.html">our Terms and Conditions</a>
</p>
Also, do not use headings within a label as many assistive technologies have trouble advertising them and are the most frequent navigation resource for their users.
DON'T
<label for="your-name">
<h3>Your name</h3>
<input
id="your-name"
name="your-name"
type="text"
/>
</label>
If the label text needs visual adjustments to make it look like a heading, they have to be done using CSS.
DO
<label for="your-name" class="large-label">
Your name
<input
id="your-name"
name="your-name"
type="text"
/>
</label>
Top comments (0)