Skip to content
Componentsbeta

Checkbox

Turn one option on or off, or pick several from a short list. A native checkbox tinted brand red, so it is accessible and looks right on every OS.

Example

Value: false

vue
<Checkbox v-model="newsletter">
  Email me new events in my city
</Checkbox>

States

Accept the terms to continue.

Group

Several checkboxes answer one question: wrap them in a fieldset with a legend.

Styles you dance

Without a slot · in a Field

vue
<Checkbox id="remember" v-model="remember" />
<Label for="remember">Remember me</Label>
Accept the terms to continue.
vue
<Field :error="errors.terms">
  <Checkbox v-model="form.terms">I accept the booking terms</Checkbox>
</Field>

Props

PropTypeDefaultDescription
v-modelbooleanfalseChecked state.
default slotlabel text—When present, the checkbox renders inside its own <label> row (min 44px tall) — the whole row toggles it.
invalidbooleanfalseRed outline + aria-invalid without a Field.
classstring—Classes for the row (with slot) or the box (without).
…attrsHTML attrs—name, value, disabled, required, id go to the <input>.

Do & don't

Do — Phrase the label as the 'on' state, so checked means yes.

Don't — Use negative labels — 'Don't email me' makes people think twice.

Accessibility

  • Native input type=checkbox: Space toggles, screen readers announce checked state.
  • With the slot, the label wraps the box, so tapping the text toggles it and the row is at least 44px tall.
  • Groups need a fieldset + legend so the question is read with each option.
  • Keyboard focus shows the amber ring token around the box.