1 min read

CSS :checked Pseudo-class

The :checked pseudo-class represents any radio (<input type="radio">), checkbox (<input type="checkbox">), or option (<option> in a <select>) element that is checked or toggled to an "on" state.

1. Basic Usage

You can use it to style the input element itself.

input[type="checkbox"]:checked {
  accent-color: green; /* Sets the color of the checkbox/radio */
  outline: 2px solid green;
}

2. The "Checkbox Hack" (Custom UI)

The most powerful use of :checked is combining it with sibling selectors (+ or ~) to style other elements based on the input's state. This enables pure CSS interactive components like toggles, tabs, and modals.

Example: Custom Toggle

HTML:

<label class="toggle">
  <input type="checkbox">
  <span class="slider"></span>
</label>

CSS:

/* Hide the actual input */
.toggle input {
  display: none;
}

/* Style the slider based on the input state */
.toggle input:checked + .slider {
  background-color: <a href='/?search=%232196F3' class='obsidian-tag'>#2196F3</a>;
}

3. Use Case: Pure CSS Accordion

Using a hidden checkbox to toggle visibility of a content panel.

HTML:

<div class="accordion">
  <input type="checkbox" id="tab1">
  <label for="tab1">Click me</label>
  <div class="content">
    Hello World!
  </div>
</div>

CSS:

/* Hide input and content initially */
input[type="checkbox"], .content {
  display: none;
}

/* Show content when checkbox is checked */
input:checked ~ .content {
  display: block;
}

4. :checked vs [checked]

  • :checked: Matches the current live state. Updates when the user interacts with the element.
  • [checked]: Matches the HTML attribute. Only checks if checked was present in the initial HTML (or added via JS setAttribute). It does not track user interaction.

Always use :checked for styling state.

programming/css/css programming/css/pseudo-classes-and-pseudo-elements programming/css/selectors