Skip to main content
BEEQ Checkbox component overview
Checkboxes help people make independent selections, confirm agreement, or control optional settings. Use them when more than one option can be selected at the same time, or when a single opt-in needs an explicit checked state.
Use a clear visible label for every checkbox. When several checkboxes belong to the same decision, group them under a shared descriptive heading.

When to use

Use checkboxes when
  • People can select one, many, or none from a set of options
  • A setting or preference needs a simple on or off choice
  • A form needs explicit confirmation, such as accepting terms

Do not use checkboxes when
  • The user must choose exactly one option from a list
  • An action should happen immediately instead of storing a selected state
  • The label is so long or ambiguous that the yes-or-no meaning becomes unclear

Patterns

Anatomy

BEEQ Checkbox component anatomy
A checkbox is composed of a visible label and a square control that can appear unselected, selected, or indeterminate depending on the current state.
PartElementDescription
1LabelThe text that explains the option or setting and makes the checked state understandable
2Checkbox: defaultThe square control in its unchecked state before selection
3Checkbox: activeThe selected or indeterminate state that confirms the option is enabled or partially selected

Design guidelines

Use checkbox labels and grouping patterns that make the selected state easy to understand before people interact with the control.
1

Start with the key meaning

Put the important words at the beginning of the label so people can scan the list quickly.
2

Group related choices

Use a shared heading or fieldset when several checkboxes belong to one decision or category.
3

Use indeterminate as a summary

Reserve the indeterminate state for parent checkboxes that represent a partially selected group.
If users must choose exactly one option, use Radio instead of adapting a checkbox pattern to a single-select task.

Usage

Default

Use the default checkbox for a straightforward binary choice with a short label.
You do not need to set any prop that already uses its default value.

Long label

Use a longer label when people need more context before deciding, but keep the core meaning easy to scan at the beginning of the sentence.

Options

Background on hover

Use background-on-hover when the surrounding layout benefits from a larger perceived hit area and stronger hover feedback.

Checked and disabled

Use checked for a preselected default, and disabled when the option is currently unavailable or not editable in the current context.

Indeterminate group

Use the indeterminate state when a parent checkbox controls a related set of child options and only some of them are selected.
Indeterminate is a visual summary state, not a third submitted form value. Keep the parent and child checkboxes synchronized through event handling.

Best practices

DoWrite checkbox labels as clear statements, not questions, so people understand the resulting selected state.

Don’tDo not use checkboxes when users must choose only one option. Use Radio instead.

DoAlign long labels from the top so wrapped text stays visually connected to the checkbox control.

Don’tDo not center long wrapped labels vertically against the control, because that weakens scanability.

DoGroup related checkboxes under a shared heading when they belong to the same decision.

Don’tDo not rely on unchecked-by-default choices to imply consent when legal or high-stakes confirmation is required.

DoUse the indeterminate state only when it accurately summarizes a partially selected group of child options.

Don’tDo not present indeterminate as a standalone third choice, because it is only meaningful as a group summary.

Accessibility

  • Built-in native checkbox semantics — the component uses a native <input type="checkbox">, so checked, unchecked, disabled, and required states follow standard browser and assistive technology behavior.
  • Built-in label association — the internal input and the slotted text are wrapped in the same <label>, so clicking the label toggles the checkbox without extra wiring.
  • Built-in focus support — the shadow root delegates focus to the native input, and the component emits bqFocus and bqBlur when that input gains or loses focus.
  • Group related choices semantically — when multiple checkboxes form a set, provide a shared heading or a <fieldset> with an accessible label.
  • Use indeterminate carefully — it should summarize a partial group selection, not replace clear child options.
  • Do not rely on color alone — the checked mark, focus treatment, and label text should all help communicate meaning.

API reference

Properties

PropertyAttributeDescriptionTypeDefault
backgroundOnHoverbackground-on-hoverIf true, the checkbox displays a background on hoverbooleanfalse
checkedcheckedIf true, the checkbox is checkedbooleanundefined
disableddisabledIf true, the checkbox is disabledbooleanfalse
formIdform-idThe form ID that the checkbox is associated withstringundefined
formValidationMessageform-validation-messageThe native form validation messagestringundefined
indeterminateindeterminateA state that is neither checked nor uncheckedbooleanfalse
namenameName of the HTML form control submitted with the formstringundefined
requiredrequiredIf true, the checkbox must be selected before form submissionbooleanundefined
valuevalueThe submitted value for the checkboxstringundefined

Events

EventDescriptionType
bqBlurFired when the checkbox loses focusCustomEvent<HTMLBqCheckboxElement>
bqChangeFired when the checkbox state changesCustomEvent<{ checked: boolean; }>
bqFocusFired when the checkbox receives focusCustomEvent<HTMLBqCheckboxElement>

Methods

MethodDescriptionReturns
vBlur()Removes focus from the native input elementPromise<void>
vClick()Simulates a click on the native input elementPromise<void>
vFocus()Sets focus on the native input elementPromise<void>

Slots

SlotDescription
(default)The visible label content for the checkbox

Shadow parts

PartDescription
baseThe component’s internal wrapper
controlThe container that holds the custom checkbox
inputThe native <input type="checkbox"> used under the hood
checkboxThe element that renders the checked or indeterminate state
labelThe element that holds the text content

CSS custom properties

VariableDescriptionDefault
--bq-checkbox--sizeCheckbox size24px
--bq-checkbox--border-radiusCheckbox border radiusvar(--bq-radius--xs)
--bq-checkbox--border-widthCheckbox border widthvar(--bq-stroke-m)

Resources

Interactive playground

Explore checkbox examples and states in Storybook

Source code

View the component source on GitHub