The :indeterminate pseudo-class matches a form control in an indeterminate state — neither fully on nor off.
It applies to checkboxes with indeterminate = true (set in JavaScript), radio buttons in a group where none are checked, and <progress> elements with no value attribute. It is not the same as :checked.
Baseline · Widely available.
Not deprecated. Standard Selectors Level 4 / HTML pseudo-class. Cross-browser support for the common cases is strong in modern browsers.
Note No HTML attribute for checkboxes
There is no indeterminate HTML attribute. Use JavaScript: checkbox.indeterminate = true. A user click usually clears that flag.
Syntax
CSS Syntax
syntax.css
:indeterminate {/* styles when indeterminate */ }
Often combined with a type or sibling: input:indeterminate + label or progress:indeterminate.
Create the indeterminate state first, then style it (or its neighbors).
For checkboxes, set element.indeterminate = true in JavaScript (often for Select All).
For radios, leave the whole named group unchecked to start.
For progress, omit the value attribute until you know the amount.
Style with :indeterminate and/or + label; keep labels accessible with for/id.
Try it
Live Preview
Toggle the checkbox’s indeterminate flag, pick a radio, and watch the valueless progress bar. Labels turn green while the matching control is :indeterminate.
Form sample
Uses input:indeterminate + label and progress:indeterminate.
Interactive
Checking…
Code
CSS Examples
Each snippet focuses on :indeterminate. Use Try It Yourself for a live editor.
Example 1 — Indeterminate Checkbox + Label
Set a checkbox to indeterminate in JavaScript, then style its label.
Omit value. Unknown progress is indeterminate by default.
Match with CSS.progress:indeterminate targets that state.
Add a clear cue. A green outline marks the busy / unknown bar.
Set a value later. Adding value (and usually max) ends the match.
Edge Cases & Pitfalls
Indeterminate is a real UI state — wire it with JS where HTML cannot.
vs :checked
Third state, not checked
An indeterminate checkbox does not match :checked. Style both states separately for Select All UIs.
HTML
No indeterminate attribute
Unlike checked, you cannot mark a checkbox indeterminate in markup. Always set the DOM property in script.
click
User interaction clears the flag
Clicking or pressing Space on an indeterminate checkbox typically sets indeterminate back to false and toggles checked.
a11y
Announce partial selection
Pair visual styles with clear label text (for example “Select all — some selected”) so assistive tech users understand the partial state.
Compatibility
Browser Support
:indeterminate is a browser CSS pseudo-class. Node.js, Deno, and Bun do not evaluate it.
✓ Baseline · Widely available
:indeterminate
Chrome 39+, Edge 79+, Firefox 51+, Safari 10+, Opera 26+. Internet Explorer has only partial / limited support.
97%Global reach
Google Chrome39+
Full support
Mozilla Firefox51+
Full support
Apple Safari10+
Full support
Microsoft Edge79+
Full support
Opera26+
Full support
Samsung Internet4+
Full support
Internet Explorer9โ11
Partial support
:indeterminateWidely supported
Bottom line: Safe for modern form UIs. Prefer progressive enhancement for Select All patterns. It is not a server runtime API.
Remember
Key Takeaways
Role: style controls that are neither fully on nor off.
Targets: JS checkboxes, unchecked radio groups, valueless progress.
vs :checked: a separate third state for checkboxes.
Practice: set checkbox state in JS; style with :indeterminate.
One line: when the UI is only partly decided, mark the control indeterminate and style that state in CSS.
Frequently Asked Questions
It matches form controls in an indeterminate state: checkboxes with the JS indeterminate property set to true, radio buttons in a group where none are checked, and progress elements with no value attribute.
No. There is no HTML attribute for checkbox indeterminate. Set it with JavaScript: checkbox.indeterminate = true.
No. An indeterminate checkbox is a third state. It does not match :checked until the user checks it (which also clears indeterminate).
Checkboxes (via JS), radio buttons when their named group has no checked member, and progress elements without a value.
When some child options are selected, set the parent checkbox to indeterminate so the UI shows a partial state between none and all.
No. It is a CSS pseudo-class evaluated by the browser. Setting checkbox.indeterminate is a DOM property, not a Node.js feature.