Good accessibility usually starts with clear words and the right HTML elements, not a large amount of extra code.
What You Need to Know
A native select is often all a form needs. A custom combobox is much harder: it needs arrow-key handling, focus management, and announcements. Pick the native control unless the extra behavior is genuinely necessary.
Try the Example
Take a look at the example. We’ll explain the important lines right below it.
<label for="region">Choose your region</label>
<select id="region" name="region">
<option value="north">North</option>
<option value="south">South</option>
</select>
Let’s Read the Code
- <label>: The label tells people what the input is for. A matching for/id pair makes the label clickable.
- <select>: The select lets someone choose an item from a list.
- for: For connects a label or output with a control by ID.
- id: An id uniquely identifies an element on this page.
Read the named elements and attributes together. They explain how the browser connects this feature to the rest of the page.
What Happens in the Browser?
Try this with Tab and Shift+Tab. If you can, inspect the accessibility tree too; appearance alone does not tell the whole story.
Try a different way of reading. Read only the headings and labels, or navigate through links without looking at the rest of the page. If the page still makes sense, the underlying HTML is probably doing an important part of its job.
Your Turn
Use Tab and Shift+Tab to visit the controls, then read their labels aloud. Is the purpose of each one clear?
Common Beginner Mistakes
- Judging the page only by how it looks, without checking its meaning and keyboard behavior.
- ARIA changes what assistive technology is told; it does not automatically add keyboard controls, visual styling, or JavaScript behavior.
Key Takeaways
- A native select is often all a form needs.
- <label>: The label tells people what the input is for. A matching for/id pair makes the label clickable.
- A meaningful HTML element is usually a stronger starting point than adding an ARIA role to a generic div. Also check what happens using only the keyboard.