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.

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

Light Version With Arrows

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

I'm initially closed. Cool.

Show Code
html
<div
        class="js-accordion-group c-accordion-wrapper"
        id="accordion-arrows-version"
        role="tablist"
        aria-multiselectable="false"
>
    <div class="c-accordion -light -has-arrows">
        <h3>
            <button class="c-accordion__title"
                    id="accordion2_light_tab1"
                    role="tab"
                    aria-controls="accordion2_light_panel1"
                    aria-expanded="false"
                    aria-selected="false"
                    type="button"
            >
                Accordion No. 1
            </button>
        </h3>
        <div
                class="c-accordion__panel"
                id="accordion2_light_panel1"
                aria-labelledby="accordion2_light_tab1"
                role="tabpanel"
                aria-hidden="false"
        >
            <p>
                I'm initially closed. Cool.
            </p>
        </div>
    </div>
</div>

With Left Border

.c-accordion[.-has-border]

Test

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

Show Code
html
<div
        class="js-accordion-group c-accordion-wrapper"
        id="accordion-border-version"
        role="tablist"
        aria-multiselectable="false"
>
    <div class="c-accordion -has-border">
        <div class="c-accordion__border"></div>
        <h3>
            <button class="c-accordion__title"
                    id="accordion_border_tab1"
                    role="tab"
                    aria-controls="accordion_border_panel1"
                    aria-expanded="false"
                    aria-selected="false"
                    type="button"
            >
                Accordion No. 1
            </button>
            <span class="c-accordion__subtitle">Test</span>
        </h3>
        <div
                class="c-accordion__panel"
                id="accordion_border_panel1"
                aria-labelledby="accordion_border_tab1"
                role="tabpanel"
                aria-hidden="false"
        >
            <p>
                Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
            </p>
        </div>
    </div>
</div>

Custom Layout Example

With custom HTML for shortened Title, extra Subtitle, Action-Button and Highlight-Block Panel:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

Show Code
html
<div
  class="js-accordion-group c-accordion-wrapper"
  id="accordion-custom-version"
  role="tablist"
  aria-multiselectable="false"
>
  <div class="c-accordion -has-arrows -light">
    <div class="h-flex h-flex-row h-space-between p-b-reset">
      <button class="c-accordion__title m-r-s h-width-80"
              id="accordion_custom_tab1"
              role="tab"
              aria-controls="accordion_custom_panel1"
              aria-expanded="false"
              aria-selected="false"
      >
                <span class="c-accordion__title__main h-overflow-ellipsis">
                    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
                    </span>
        <span class="h-small h-inline-block m-l-m h-color-disabled">
                    <span class="h-no-wrap">234 g</span>
                </span>
      </button>
      <div class="h-pos-relative h-flex h-flex-row h-vertical-center h-end">
        <div class="print-hide -open-left h-help-pointer h-inline-block c-tooltip__trigger">
          <button id="button-93" type="button" class="-small -inverted -redesign c-btn -icon-btn" aria-label="Bestandteil löschen">
            <span aria-hidden="true" class="fa fa-trash"></span>
            <span class="h-sr-only">Bestandteil löschen</span>
          </button>
          <div class="c-tooltip h-always-on-top m-r-xs m-t-m">Bestandteil löschen</div>
        </div>
      </div>
    </div>
    <div class="c-accordion__panel m-t-xs"
         id="accordion_custom_panel1"
         aria-labelledby="accordion_custom_tab1"
         role="tabpanel"
         aria-hidden="false"
    >
      <div class="h-highlight-block p-x-l p-y-l">
        <p>
          Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
        </p>
        <p>
          Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
        </p>
      </div>
    </div>
  </div>
</div>

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);

Close all accordions in an AccordionGroup:
Accordion.closeAll(accordionGroup: Node);

Open individual accordion:
Accordion.open(accordion: Node);

Close individual accordion:
Accordion.close(accordion: Node);