Accordeon
Introductie
Een accordeon biedt een verticale keuzelijst die je per onderdeel kunt openklappen om meer informatie te tonen.
Snelstart
SCSS importeren:
@use "@minvws/manon/components/accordion";
JavaScript initialiseren:
import "@minvws/manon/js/accordion.js";
Benodigde stappen
- Plaats een korte zichtbare tekst binnen een kop (
h2t/mh6, passend binnen de kopstructuur van de pagina). Bijvoorbeeld een omschrijvende titel of een vraag. Deze tekst is zichtbaar als de accordeon gesloten is. Zorg ervoor dat de gebruiker op basis van deze tekst kan bepalen of de onderliggende informatie waardevol is. - Geef de kop een unieke
iden verwijs vanaf dedivvia eenaria-labelledbynaar deidvan de kop ten behoeve van toegankelijkheid. - Groepeer de uitklapbare content binnen een
divdirect na de kop.
Het script maakt binnen de kop automatisch een button aan en regelt aria-controls en aria-expanded. Zonder JavaScript blijft de kop een gewone
kop en is alle content zichtbaar.
Standaard is het eerste onderdeel opengeklapt. Dit kan aangepast worden middels het data-expanded-attribuut van de kop.
Voeg data-expanded="false" toe aan de kop van het eerste onderdeel om te voorkomen dat het standaard opengeklapt is.
Voeg data-expanded="true" toe aan de kop van een ander onderdeel om te zorgen dat dat onderdeel standaard opengeklapt is. Let op: dit zorgt ervoor dat het eerste onderdeel niet meer standaard opengeklapt is. Om te zorgen dat het eerste onderdeel óók standaard opengeklapt is, kan je ook daar data-expanded="true" toevoegen.
Zet verder geen button, aria-expanded of aria-controls in je HTML: accordion.js voegt die bij het initialiseren zelf toe. Werkt de JavaScript niet, dan blijven de koppen gewone koppen, staan alle onderdelen opengeklapt en blijft alle content beschikbaar. Zie werken zonder JavaScript.
Voorbeelden
Voorbeeld: ul
Voorbeeld: div
Voorbeeld: section
Resultaat na initialisatie
Deze markup schrijf je niet zelf. Ter illustratie: zo ziet het eerste onderdeel
van het ul-voorbeeld eruit nádat accordion.js het component heeft
geïnitialiseerd.
<ul class="accordion">
<li>
<h3 id="example-1-accordion-item-1">
<button type="button" aria-controls="DIV-3b9aca01" aria-expanded="true">
Voorbeeld-onderwerp 1
</button>
</h3>
<div id="DIV-3b9aca01" aria-labelledby="example-1-accordion-item-1">…</div>
</li>
</ul>
Het script maakt in elke kop een button en verplaatst de tekst van de kop
daarheen. De id blijft op de kop staan, zodat de aria-labelledby van de div ook zonder JavaScript blijft kloppen.
Die button wordt via aria-controls gekoppeld aan de div die op de kop
volgt. Heeft die div nog geen id, dan genereert het script er een. Vandaar de
willekeurige waarde hierboven. Geef je de div zelf een id, dan wordt die
gebruikt.
Daarnaast krijgt elke button een aria-expanded-attribuut, en wordt op de body de class js-accordion-loaded gezet. Pas met die class klapt de CSS
onderdelen in. Werkt de JavaScript niet, dan gebeurt dit alles niet en staan alle
onderdelen open.