Checkbox

Use checkboxes when users need to select none, one, or many options from a list.

Live demo

Checkboxes let people turn independent options on or off. Use them for filters (combine topic and year), multi-select preferences, and explicit consent. Each option should read clearly beside its control. In faceted search, checkboxes often sit in a sidebar with other filters.

Behaviour

Toggling a checkbox usually updates filters, form values, or consent state. On mobile and desktop, the same choices may appear in different layouts; the meaning of each option should stay consistent.

When checkboxes are grouped, a parent row can show an indeterminate state when some but not all child options are selected (for example “select all” for a category). Individual checkboxes stay selected or unselected.

Some designs wrap the control in a pill so the native box is hidden; the selected state must still be obvious without relying on colour alone.

Anatomy

  1. Checkbox control (checked or unchecked).
  2. Label that states what the option does.
  3. Optional group heading when several checkboxes belong to one category.

Checkbox in a filter list (placeholder)

Replace with a faceted sidebar row and, if useful, a pill-wrapped example.

Content guidelines

  • Keep labels parallel inside one group (for example all nouns or all short verb phrases) so the list scans easily.
  • Match authoring labels to what actually changes on the page or in results.
  • For required consent or validation failures, pair the control with clear error text (see Accessibility).

When to use

  • Filters where people may pick several values at once.
  • Opt-in agreements and other multi-select forms.

When not to use

  • Exactly one choice from a short list; use radio buttons or another single-select pattern.
  • Yes or no for a single setting when a toggle better matches “on or off” for the whole feature.

Best practices

Do

  • Pair every checkbox with a visible label or an agreed accessible name.
  • Give filter groups a clear section title so people (and assistive technology) get context.
  • Show errors in text when a required box is missing or invalid.

Don't

  • Rely on colour alone for checked state; use label, icon, and wording.
  • Use checkboxes when only one option in a set should apply; use Radio instead.

Related

Resource
RadioExactly one option from a set.
PillsPill-wrapped checkbox styling in some filters.
Form controlsBroader form patterns.
SearchKeyword search beside faceted checkboxes.

The base pattern follows common form-check styling. Faceted search and some features use custom sizing and brand colours. Pill treatments follow the Pills pattern. Specific overrides by area (student groups, CCE, consent, Thunderstone, and others) live in feature clientlibs; see Code for paths.

Refer to Tokens for typography on labels where the design system applies tokens.

Instances on the published site

Grouped by feature (representative paths under apps/concordia/components/).

Faceted list filters (sidebar checkboxes)

Area Location (pattern) Notes
News list news-events/news-list/filters/ (skill_domains.jsp, public_scholars.jsp, jmec_en.jsp, jmec_fr.jsp, ctl.jsp, chrcs.jsp, …) Faceted news formats; format_faceted_search.jsp can render checkbox-style filter options from configuration.
Program list program-list/filters/*.jsp (campus, category, degree undergraduate/graduate, experiential learning, faculty, level, program type undergraduate/graduate, …) Large set of program filters.
Program concentrations program-list/concentrations_undergraduate.jsp Checkbox list for concentrations.
Research awards list academics/research-awards-list/filters/ (sponsor-level.jsp, discipline.jsp, deadline.jsp, career-stage.jsp) Award faceting.
Individual profile list individual-profile-list.html (faculty, decade, award flags, dynamic awards) and individual-profile-list/filters/ (faculty.html, class-year.html, recognition.html) Mix of inline and included filter fragments.
Student group list student-group-list/filters/associations.html Association membership; form-check-input, shared name="association", distinct value; title on inputs documents each option.
IT service list it-services/service-list/filters/ (category.html, faculty.html, role.html) Service catalogue filters.
CCE offering list cce/cce-offering-list/filters/ (topic.html, month.html, delivery-mode.html) Topic and month use form-check; delivery mode uses pill checkboxes (see Pills).
Thunderstone faceted search/thunderstone-faceted-search/filters.jsp Dynamic facet tags; class="form-check-input", name="infield:<%= facetValue %>".

Forms and interactive components

Area File Notes
Submit event news-events/submit-event/submit-event.html (and related submit-event.jsp) Fee, all-day, acceptance checkboxes; focus-custom--outline-offset-0 on inputs.
Newsletter sign-up newsletter-sign-up/newsletter-sign-up.jsp Interest area checkboxes; logic hides the set when only one interest is configured.
Student consent it-services/student-consent/student-consent.html Consent checkbox with form-check-input; apps.concordia.student-consent styles.
IT service notifications it-services/it-service-notifications/it-service-notifications.html Checkboxes in notification subscription UI.
IITS cinemas calendar ems/iits-cinemas-calendar/iits-cinemas-calendar.html Calendar UI with form-check-input (see iits-cinemas-calendar.less).

AEM authoring dialogs (dialog.xml)

Dozens of components define type="checkbox" in dialog.xml for author toggles (examples: card, hero, news-list, events-list, accordion-panel, thunderstone-faceted-search, profile page props, colctrl, gallery, alert, faculty components, research tools, CCE components, newsletter page templates, etc.).

These are not documented line by line here. To enumerate or audit:

rg 'type="checkbox"' apps/concordia --glob '**/dialog.xml'

Implementation

Layer Files
Bootstrap clientlibs/vendor/bootstrap/less/bootstrap.css.less (.form-check-input[type=checkbox], validation states).
Base forms clientlibs/base/less/form.less (#boot; limited checkbox-specific rules).
Faceted clientlibs/faceted-search/less/faceted-search.less
Thunderstone clientlibs/thunderstone-faceted-search/less/tfs.less, filters.jsp
Student groups clientlibs/student-group-list/less/student-group-list.less
CCE clientlibs/cce/less/offering-template.less
Student consent clientlibs/student-consent/less/student-consent.less
Cinemas clientlibs/iits-cinemas-calendar/less/iits-cinemas-calendar.less

Markup patterns

Faceted (typical):

<div class="form-check ps-0">
  <label class="form-check-label">
    <input class="form-check-input ms-0" type="checkbox" name="…" value="…">
    <div>Label text</div>
  </label>
</div>

Label association: Prefer explicit for / id when label and input are not nested.

Dependencies

  • List and filter components often restore checked state from query parameters.
  • Thunderstone faceted uses tfs.js for AJAX behaviour alongside checkbox changes.

Related (implementation)

  Resource
!AEM Component paths in Instances; dialog checkboxes in dialog.xml per component.