How can I make a button’s disabled state clear and usable?
Quick answer
Use a native disabled state when a form button should be unavailable and removed from keyboard focus. Consider aria-disabled="true" when keeping an important unavailable action in the Tab order would help people discover it—but that attribute does not block activation or manage styling, so you must handle those separately. In either case, explain why the action is unavailable and update the state when it becomes available.
The question, the details, the next step.
A practical checklist
Choose native disabled behavior or focusable aria-disabled based on whether keyboard discoverability while unavailable matters.
Write a specific explanation of the unmet condition and make it perceivable with the button.
If using aria-disabled, separately prevent activation and provide legible unavailable styling.
When availability changes, update the state and confirm the action works again.
Test expected Tab behavior, unavailable activation, and the transition to available using a keyboard.
A few more useful answers
Does aria-disabled="true" stop a button from activating?
Should every unavailable button stay in the Tab order?
No. Keeping an unavailable action discoverable can help in some cases, but requires careful handling. Native disabled behavior generally removes a form control from keyboard focus; choose based on whether reaching the unavailable action is useful for your interface. [S1]
Sources
References used for this guide.
- [S1] MDN: The aria-disabled state developer.mozilla.org · Checked
- [S2] WAI-ARIA Authoring Practices: Button Pattern w3.org · Checked
