Loading…
Loading…
Disabled states indicate an element exists but cannot currently be used, preventing invalid actions while maintaining visibility for context.
stellae.design
Disabled states communicate an element is present but not actionable. They prevent invalid actions while keeping the element visible. Standard: reduced opacity (40-60%) plus 'not-allowed' cursor. Best practice: explain WHY it's disabled. Use sparingly — consider hiding elements when disabled state would confuse.
Disabled states communicate that an interactive element exists but is currently unavailable — and getting this communication right is critical because a poorly designed disabled state either confuses users who cannot figure out why something is unavailable, or goes unnoticed entirely, leaving users to wonder why their clicks produce no response. Disabled states sit at the intersection of visual design, interaction design, and accessibility, requiring careful coordination between reduced visual prominence, clear explanatory context, and assistive technology support. When implemented thoughtfully, disabled states guide users toward the prerequisite actions needed to enable the control; when implemented carelessly, they create dead ends that frustrate users and generate support tickets.
GitHub disables the merge button on pull requests until all required status checks pass, and displays a clear list of pending and failing checks directly above the button with links to the relevant build logs. Users can see exactly which checks are blocking the merge and click through to investigate failures, transforming the disabled state from a dead end into an actionable status dashboard. When all checks pass, the button enables with a green visual change that provides immediate positive feedback.
Stripe's payment forms keep the submit button disabled until all required fields pass validation, but display real-time inline validation messages as the user fills in each field, creating a clear connection between the user's input and the button's state. The button's transition from disabled to enabled provides a satisfying confirmation that the form is ready to submit, and users always understand what they need to fix because the validation messages appear at the point of error. This progressive enablement pattern makes the disabled state feel like a helpful guide rather than an unexplained barrier.
A registration form displays a grayed-out submit button with no indication of which fields are incomplete, which validation rules are failing, or what the user needs to do differently to enable submission. Users who have filled out every visible field stare at the disabled button in confusion, unable to determine whether a field they consider optional is actually required or whether a formatting rule they cannot see is being violated. The disabled state provides no pathway to resolution, turning a simple form into an unsolvable puzzle.
• The most pervasive mistake is using disabled states without explaining why the element is disabled — a grayed-out button with no tooltip, no helper text, and no adjacent message leaves users stranded with no way to understand or resolve the situation. Teams also set disabled-state opacity so low that the element becomes effectively invisible, which is worse than the problem the disabled state was meant to solve because users do not even know the control exists. Another common error is applying the HTML `disabled` attribute to buttons that should still be focusable and descriptive for screen reader users — `aria-disabled` with an explanatory `aria-describedby` preserves discoverability and context for assistive technology users while still preventing activation.
Was this article helpful?