Bistable

No dependencies
Code format

Install with shadcn

Needs a free account token. Get a token

npx shadcn@latest add @movin/toggle-bistable

About this component

A switch with two valleys and a hill between them, like the spring inside a real one: the ball climbs slowly over the hump, then drops into the other valley and rocks there before it settles.

Dependencies
None
Difficulty
Intermediate
Reduced motion
Respected
Theme
Light and dark
Follows page color-scheme

Triggers3

  • Click
  • State change
  • Spring

Techniques2

  • CSS transition
  • SVG

Accessibility

Keyboard and screen readers

A native checkbox with role="switch" inside a <label>, so Space toggles it and the visible text names it; :focus-visible on the input outlines the track, which is aria-hidden.

Reduced motion

The ball moves straight to its valley.

Use it in anything you build, commercial and client work included. Licence

More toggles

See all
BristleGet code
BumperGet code
ConfirmGet code
HapticGet code