hover:
Mouse enter
focus:
Keyboard or click focus
active:
Mouse down
focus-visible:
Keyboard-only focus
Hover me. The card uses group-hover: internally.
<input type="checkbox" class="peer">
<div class="peer-checked:bg-emerald-500 peer-checked:text-white">
Styled when peer is checked
</div>
Style children based on parent state.
Style siblings based on peer state.
[&_p]:hover:text-red-400 // child p on hover
[&:has(input:checked)]:bg-emerald-600
group-[:nth-child(odd)]:bg-zinc-800
peer-focus-within:bg-blue-500
| Aspect | Basic (hover/focus) | peer / group | Arbitrary |
|---|---|---|---|
| Use Case | Simple element states | Sibling / parent relationships | Complex selectors |
| Readability | Excellent | Good | Lower |
| HTML Bloat | Low | Medium | High |
| Performance | Best | Excellent | Good (JIT) |
peer- and group- over heavy arbitrary variants for maintainability.
Arbitrary variants are powerful escape hatches — use them sparingly.