How can I keep native select controls accessible when styling them?
Quick answer
Keep the native <select> if its behavior meets your needs. Associate it with a clear label, keep its value visible, and test keyboard use and focus in the browsers and devices you support; native keyboard behavior can vary. appearance: none changes rendering but does not provide a custom interaction model, so supply a visible design. Consider a custom control only if you can implement and test its interactions.
The question, the details, the next step.
A practical checklist
Associate the select with a clear, understandable label.
Keep the selected value and any visual cue readable.
Test keyboard access, option selection, and visible focus in supported environments.
If using
appearance: none, supply a visible design and check that the widget has not visually disappeared.Choose a custom control only for a specific need, and plan how to implement and test its interactions.
A few more useful answers
Does `appearance: none` turn a native select into a custom control?
No. It changes rendering while retaining native functionality and interactions; it does not provide a replacement interaction model. Supply a visible design and test the result.
Is one keyboard test enough for a native select?
Native keyboard mechanisms can vary across browsers and operating systems. Test the environments you intend to support.
Does the styling example guarantee accessibility?
No. Check the label, keyboard behavior, selected value, and visible focus in your implementation and target environments.
Sources
References used for this guide.
- [S1] <select>: The HTML select element — MDN developer.mozilla.org · Checked
- [S2] appearance CSS property — MDN developer.mozilla.org · Checked
