Skip to content
On this page

Checkbox

A binary input that can be standalone or in a multiselect group.

When in a group, any number of checkboxes can be checked at a time.

Typical use will involve using v-for to loop through an array of items and output a Checkbox component for each one. Each Checkbox will have the same v-model prop, but different inputValue props and label content.

For a single checkbox, the v-model value will be a boolean true when the checkbox is checked and false when unchecked.

For multiple checkboxes, the v-model value will be an array of the inputValue props of any currently checked checkboxes (or an empty array if no checkboxes are checked).

Demos

Open up the browser console to see events emitted on input.

Configurable

NameValue
Props
status
disabled
indeterminate
View
Reading direction

Single checkbox with label and description

Always include label text via the default slot. You can also add description text via the #description slot.

A single checkbox does not need an inputValue prop. v-model is bound to a boolean value: true for checked, false for unchecked.

Checkbox value: false

This improves privacy and helps prevent unsolicited emails.
NameValue
View
Reading direction

Form field

When used in a form, a single Checkbox or group of Checkboxes can be wrapped in the Field component to add features like a semantic label, description and help text, validation messages, and more. See the Field page for more information.

When building a Checkbox field, always set isFieldset to true, even for a single Checkbox, to ensure accessibility support. This wraps the group in a <fieldset> element and labels it with an associated <legend>.

If using a Checkbox or Checkbox group outside of a form, follow the instructions in the next demo.

Checkbox group

For a group of related checkboxes, each Checkbox component's v-model will be bound to an array of the inputValue props of the checkboxes that are currently "on".

This demo shows what to do when using a Checkbox group outside of a form:

  1. Wrap the group in an element with role="group"
  2. Connect the group with a label via the aria-labelledby attribute

Checkbox group value: [ "checkbox-2", "checkbox-6" ]

Inline checkboxes

Use the inline prop to get an inline layout.

Indeterminate state

The indeterminate state indicates that a checkbox is neither on nor off. Within this component, this state is purely visual. The parent component must house the logic to set a checkbox to the indeterminate state via this prop (e.g. in the case of a set of nested checkboxes where some boxes are checked and some are not, making the parent checkbox neither fully on nor fully off).

This prop is independent of the value provided by v-model. If indeterminate is set to true, the indeterminate visual state will display, but the value will not be affected. Nor will the value affect the visual state: indeterminate overrides the checked and unchecked visual states. If indeterminate changes to false, the visual state will reflect the current v-model value.

In the example below, all of the checkboxes have their indeterminate prop set to true initially. As a result, they all appear to be in the indeterminate state initially, whether they are checked or not. Checking or unchecking a checkbox will undo the indeterminate state since you have provided a definite value for the checkbox.

Checkbox group value: [ "checkbox-2", "checkbox-4" ]

Indeterminate checkbox demos

Usage

Props

Prop nameDescriptionTypeValuesDefault
modelValueValue of the checkbox or checkbox group.

Provided by v-model binding in the parent component.
boolean|string[]|number[]-false
inputValueHTML "value" attribute to assign to the input.

Required for input groups.
string|number|boolean-false
disabledWhether the disabled attribute should be added to the input.boolean-false
indeterminateWhether the indeterminate visual state should be displayed.

This is unrelated to the value provided by v-model, and the indeterminate visual state will override the checked or unchecked visual state.
boolean-false
inlineWhether the component should display inline.

By default, display: block is set and a margin exists between sibling components, for a stacked layout.
boolean-false
statusstatus attribute of the checkbox.ValidationStatusType'default', 'error''default'

Events

Event namePropertiesDescription
update:modelValuemodelValue boolean|string[]|number[] - The new model valueEmitted when modelValue changes.

Slots

NameDescriptionBindings
defaultLabel text.
descriptionShort description text.

CSS-only version

Markup structure

The structure below can be used for most cases. If you need a description, see the section on that feature below.

With description

To add a description below the label:

  • Add a span after the <label> element with an ID and class cdx-label__description. Include the description text here.
  • Add class cdx-label__label to the <label> element
  • Wrap the label and description in a div with classes cdx-checkbox__label and cdx-label
  • Add an aria-describedby attribute to the <input> element with the value of the ID of the description
This improves privacy and helps prevent unsolicited emails.

Checkbox group

Native attributes of the <input> element can be used. For example:

  • Add the checked attribute to the <input> element if it should be selected initially.
  • Add the disabled attribute to the <input> element if it should be disabled.

Note that indeterminate is not supported in the CSS-only version since it cannot be set without JavaScript.

Always include one of these two features for accessible grouping:

  1. If using the Checkbox group in a field, wrap the group in a <fieldset> element and add a <legend> element with the group label. This method is demonstrated below and requires some style resets on <fieldset> and <legend>. You can use the CSS-only Field and Label components to reset browser styles of these elements.
  2. If using the Checkbox group outside of a field, wrap the group in a <div> with role="group" and aria-labelledby set to the ID of the group label. See an example of this above (you can just include a <label> element instead of using the Label component).
CSS-only Checkbox group demo

Inline checkboxes

Add the cdx-checkbox--inline class to the root element to get an inline layout.