Skip to content

Accordion

TIP

A collapsible accordion to toggle the visibility of content across your project.

Use this JS-Selector on .c-accordion-wrapper: .js-accordion-group

html
.c-accordion-wrapper[role=tablist, aria-multiselectable]
> .c-accordion
    > .c-accordion__title[.-is-active, role=tab, aria-controls, aria-expanded, aria-selected]
    > .c-accordion__panel[.-is-active, role=tabpanel, aria-labelledby, aria-hidden]

Non-multiselectable example

[aria-multiselectable="false"]

I'm initially open. Cool.

Show Code
html
<div
  class="js-accordion-group c-accordion-wrapper"
  id="accordion1"
  role="tablist"
  aria-multiselectable="false"
>
  <div class="c-accordion">
    <h3>
      <button
        class="c-accordion__title"
        id="accordion1_tab1"
        role="tab"
        aria-controls="accordion1_panel1"
        aria-expanded="true"
        aria-selected="true"
        type="button"
      >
        Accordion No. 1
      </button>
    </h3>
    <div
      class="c-accordion__panel"
      id="accordion1_panel1"
      aria-labelledby="accordion1_tab1"
      role="tabpanel"
      aria-hidden="false"
    >
      <p>
        I'm initially open. Cool.
      </p>
    </div>
  </div>

  <div class="c-accordion">
    <h3>
      <button
        class="c-accordion__title"
        id="accordion1_tab2"
        role="tab"
        aria-controls="accordion1_panel2"
        aria-expanded="false"
        aria-selected="false"
        type="button"
      >
        Accordion No. 2
      </button>
    </h3>
    <div
      class="c-accordion__panel"
      id="accordion1_panel2"
      aria-labelledby="accordion1_tab2"
      role="tabpanel"
      aria-hidden="true"
    >
      <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio doloribus eius eos, ipsa magni nam numquam placeat provident, quasi repudiandae sit veniam? A cumque eligendi ipsum laudantium nihil perspiciatis saepe!
      </p>
    </div>
  </div>

  <div class="c-accordion">
    <h3>
      <button
        class="c-accordion__title"
          id="accordion1_tab3"
          role="tab"
          aria-controls="accordion1_panel3"
          aria-expanded="false"
          aria-selected="true"
          type="button"
        >
          Accordion No. 3
      </button>
    </h3>
    <div
      class="c-accordion__panel"
      id="accordion1_panel3"
      aria-labelledby="accordion1_tab3"
      role="tabpanel"
      aria-hidden="true"
    >
      <p>
        Content of Tab 3
      </p>
    </div>
  </div>
</div>

Multiselectable example

.js-accordion-group[aria-multiselectable="true"] for multi selection

Show Code
html
<div
  class="js-accordion-group c-accordion-wrapper"
  id="accordion2"
  role="tablist"
  aria-multiselectable="true"
>
  <div class="c-accordion">
    <h3>
      <button
        class="c-accordion__title"
        id="accordion2_tab1"
        role="tab"
        aria-controls="accordion2_panel1"
        aria-expanded="false"
        aria-selected="false"
        type="button"
      >
        Accordion No. 1
      </button>
    </h3>
    <div
      class="c-accordion__panel"
      id="accordion2_panel1"
      aria-labelledby="accordion2_tab1"
      role="tabpanel"
      aria-hidden="true"
    >
      <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur esse et, facilis laborum nobis odio provident quod temporibus voluptas voluptatibus? Ipsa nobis officia repudiandae unde. Ad dolorem iusto necessitatibus nostrum!
      </p>
    </div>
  </div>
  <div class="c-accordion">
    <h3>
      <button
        class="c-accordion__title"
        id="accordion2_tab2"
        role="tab"
        aria-controls="accordion2_panel2"
        aria-expanded="false"
        aria-selected="false"
        type="button"
      >
        Accordion No. 2
      </button>
    </h3>
    <div
      class="c-accordion__panel"
      id="accordion2_panel2"
      aria-labelledby="accordion2_tab2"
      role="tabpanel"
      aria-hidden="true"
    >
      <p>
        Content of Tab 2
      </p>
    </div>
  </div>
  <div class="c-accordion">
    <h3>
      <button
        class="c-accordion__title"
        id="accordion3_tab3"
        role="tab"
        aria-controls="accordion3_panel3"
        aria-expanded="false"
        aria-selected="true"
        type="button"
      >
        Accordion No. 3
      </button>
    </h3>
    <div
      class="c-accordion__panel"
      id="accordion3_panel3"
      aria-labelledby="accordion3_tab3"
      role="tabpanel"
      aria-hidden="true"
    >
      <p>
        Content of Tab 3
      </p>
    </div>
  </div>
</div>

Modifiers

Large Version

.c-accordion[.-large]

I'm initially closed. Cool.

Light Version With Arrows

.c-accordion[.-light.-has-arrows]

I'm initially closed. Cool.

Settings and API

Default Settings:

js
    const defaults = {
        selector: {
            accordionWrapper:   ".js-accordion-group",
            accordionHeader:    "[role='tab']",
            accordionPanel:     "[role='tabpanel']",
            accordionOpen:      "[aria-expanded='true']",
            accordionDisabled:  "[aria-disabled='true']"
        },
        attribute: {
            multiSelectable:    "aria-multiselectable",
            expanded:           "aria-expanded",
            selected:           "aria-selected",
            hidden:             "aria-hidden"
        },
        class: {
            isActive:           "-is-active"
        }
    };

TIP

Initialize Accordion:
Accordion.init(settings: object);