# Accordion

TIP

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

Use this JS-Selector: .js-accordion-group

.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]
1
2
3
4

# Non-multiselectable example

[aria-multiselectable="false"]

I'm initially open. Cool.

hide code
<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

hide code
<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

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

I'm initially open. Cool.

hide code
<div class="js-accordion-group c-accordion-wrapper"
     id="accordion-light-version"
     role="tablist"
     aria-multiselectable="true">
    <div class="c-accordion -light -has-arrows">
        <h3>
            <button class="c-accordion__title"
                    id="accordion1_tab1"
                    role="tab"
                    aria-controls="accordion_light_panel1"
                    aria-expanded="true"
                    aria-selected="true"
                    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 open. Cool.
            </p>
        </div>
    </div>
    <div class="c-accordion -light -has-arrows">
        <h3>
            <button class="c-accordion__title"
                    id="accordion_light_tab2"
                    role="tab"
                    aria-controls="accordion_light_panel2"
                    aria-expanded="false"
                    aria-selected="false"
                    type="button">
                Accordion No. 2
            </button>
        </h3>
        <div class="c-accordion__panel"
             id="accordion_light_panel2"
             aria-labelledby="accordion_light_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>

# Settings and API

Default Settings:

    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"
        }
    };
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

TIP

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