The :enabled pseudo-class matches form controls that are enabled — they can be clicked, typed into, or focused.
It is the opposite of :disabled. Use it when you want a clear “ready to use” look next to inactive controls. Most fields are enabled by default; style :enabled when the contrast matters.
Baseline · Widely available.
Not deprecated. Core form-state selector. Extremely broad browser support.
Syntax
CSS Syntax
syntax.css
:enabled{ /* declarations */ }
Often typed as input:enabled, button:enabled, or select:enabled.
Teaching pattern. Same as MDN’s side-by-side demo.
Edge Cases & Pitfalls
If styles do not apply, check these first.
default
Often optional
Bare input / button rules already style enabled controls. Use :enabled when you need an explicit pair with :disabled.
fieldset
Disabled fieldset disables children
Controls inside a disabled fieldset do not match :enabled, even without their own attribute.
aria
aria-disabled still matches :enabled
Only the HTML disabled state flips the pseudo-class. Style ARIA-only cases with [aria-disabled="true"].
div
Form controls only
:enabled targets elements that support a disabled state. Plain div/span widgets need classes or ARIA + JS.
readonly
Read-only can still be enabled
A readonly input is usually still :enabled (focusable). See :read-only for that state.
Compatibility
Browser Support
The :enabled pseudo-class is a browser CSS selector. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
:enabled
Supported in all modern browsers (CSS3-era form selectors). Safe for teaching and production.
100%Core support
Google Chrome1+
Full support
Mozilla Firefox1+
Full support
Apple Safari3.1+
Full support
Microsoft Edge12+
Full support
Opera9+
Full support
Samsung Internet1+
Full support
Internet Explorer9+
Full support
:enabledUniversal
Bottom line: No prefixes. No polyfills. It is not a runtime API.
Remember
Key Takeaways
Role: style form controls that can be activated or focused.
Trigger: no HTML disabled state (and not inside a disabled fieldset).
Opposite: use :disabled for inactive controls.
Tip: pair both states when the UI contrast matters.
One line::enabled styles interactive form controls so users can tell what they can use.
Frequently Asked Questions
It matches form controls that are enabled — they can be activated, edited, or focused. That means they do not have the HTML disabled state.
Controls that support the disabled attribute when they are not disabled: input, button, select, textarea, fieldset, optgroup, and option.
:enabled matches interactive controls. :disabled matches the same kinds of controls when they are inactive.
Not always. Many styles apply to the default state. Use :enabled when you want an explicit contrast next to :disabled, such as button:enabled { cursor: pointer; }.
Yes. It is Baseline Widely available and works in every modern browser. It is a CSS selector, not a Node.js or runtime API.
No. A control with only aria-disabled="true" still matches :enabled unless it also has the HTML disabled attribute.