Build vertically collapsing accordions
Panels are wired through aria-controls and resolved at runtime
with ariaControlsElements (Baseline 2025).
import Accordion from '@19h47/accordion';
const element = document.querySelector('.js-accordion');
const accordion = new Accordion(element);
accordion.init();
<div class="js-accordion">
<div
class="js-accordion-panel"
data-accordion-open="true"
data-accordion-deselect="true"
>
<h3>
<button
class="js-accordion-header"
type="button"
id="lorem-header"
aria-expanded="true"
aria-controls="lorem-body"
>
Toggle
</button>
</h3>
<div id="lorem-body" role="region" aria-labelledby="lorem-header">
<div class="js-accordion-inner">
Panel content
</div>
</div>
</div>
</div>
Itaque dolore ipsa harum nobis distinctio aperiam quis omnis error incidunt iusto dolorem inventore laboriosam.
Once open, this panel cannot be collapsed from its header.
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptatibus quos dolor deleniti?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Magnam fugiat eligendi ex minima.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Eaque cupiditate aspernatur ut magnam.
Anchor the link on the panel root (always visible), e.g.
#behir — not the
hidden region body.
The behir is a snake-like reptilian monster whose dozen legs allow it to move with considerable speed.
The chimera has the hindquarters of a large black goat and the forequarters of a huge tawny lion.
Dolor sit, amet consectetur adipisicing elit.
Porro magnam dolorem maxime odio nulla autem.
Sit amet, consectetur adipisicing elit. Omnis ex inventore tempore.