Accordion

Release dato: 25.04.2024

Sist oppdatert: 26.05.2025

Accordion (ogsÄ kalt expandable, trekkspill eller uttrekkspanel) brukes til Ä gruppere innhold som kan Äpnes og lukkes. Det hjelper brukeren Ä fÄ oversikt og gjÞr det enklere Ä fokusere pÄ én ting om gangen. Accordion egner seg godt nÄr du har mye informasjon, men ikke Þnsker Ä overvelde brukeren.

Test komponenten

Relaterte komponenter

Varianter

Typer

Accordion har to ulike typer med ulike bruksomrÄder:

TypeBeskrivelse
StandardFlere rader kan Äpnes samtidig
Single (en Äpen)Brukes nÄr bare ett panel bÞr vÊre Äpent, for eksempel ved trinnvis guiding eller steg-for-steg-informasjon

StĂžrrelser

Accordion kommer i to ulike stĂžrrelser:

StĂžrrelseBeskrivelse
DefaultStandard stÞrrelse. Brukes nÄr du har vanlig mengde innhold og vil at komponenten skal ta litt mer plass for bedre lesbarhet.
CompactKompakt stÞrrelse. Brukes nÄr du vil spare plass eller nÄr accordion skal stÄ i et omrÄde med mange andre elementer. Passer godt der du vil ha en mer kompakt og diskret lÞsning.

Skins

Accordion kommer i fire ulike skins (farger og styling):

SkinBeskrivelse
BorderlessEnkel bakgrunnsfarge og stil
BorderKantlinje pÄ radene
BeigeAnnenhver rad er beige
BlueAnnenhver rad er blÄ

Retningslinjer for bruk

Bruk accordion nÄr

  • du vil presentere mye informasjon uten Ă„ overvelde brukeren
  • brukeren ikke trenger Ă„ lese alt for Ă„ forstĂ„ helheten
  • du har relaterte temaer som kan grupperes sammen

UnngÄ accordion nÄr

  • alt innhold mĂ„ leses i Ă©n sammenheng for Ă„ forstĂ„ helheten
  • du trenger mer kompleks interaktivitet, bruk heller modal eller tabs

Radene mÄ ha tydelige overskrifter

Tittelen i hvert rad mÄ vÊre beskrivende og kort. Brukeren mÄ forstÄ hva de finner bak hver rad uten Ä mÄtte Äpne den. De bÞr ogsÄ kun inneholde ett enkelt tema.

GjĂžr slik

Eksempel pÄ tydelig overskrift
Skriv tydelige og beskrivende overskrifter

UnngÄ

Eksempel ulogiske overskrifter
UnngÄ lange og ulogiske titler med flere temaer

Hold innholdet kort og konsist

Innholdet i hvert rad bÞr vÊre maks én til to korte setninger. Hvis det blir for langt, vurder Ä dele det opp eller flytte det til en egen side.

GjĂžr slik

Eksempel pÄ kort og tydelig tekst pÄ radene
Skriv tydelig og sÄ kort som mulig

UnngÄ

Eksempel pÄ lang innhold pÄ radene
UnngÄ Ä bruke accordion til veldig langt innhold, led heller brukeren til en annen side om du har mye innhold

Bruk accordion til innhold som logisk hĂžrer sammen

Accordion skal hjelpe brukeren Ä orientere seg. Derfor mÄ innholdet hÞre sammen. Tenk pÄ det som en liste med elementer som tilhÞrer samme kategori.

GjĂžr slik

Eksempel pÄ accordion med relaterte innhold
Hold innholdet i accordion relatert til hverandre

UnngÄ

Eksempel pÄ innhold som ikke hÞrer sammen
UnngÄ Ä bruke accordion til Ä samle informasjon som ikke hÞrer sammen

Responsivitet

Accordion fungerer godt pÄ alle skjermstÞrrelser. Den kollapser eller ekspanderer innhold uten Ä endre layout.

Du bĂžr likevel teste og forsikre deg om at

  • overskrifter ikke avkortes
  • det er lett Ă„ se hva som er Ă„pent/lukket, ogsĂ„ pĂ„ mobil
  • marginer og spacing mellom radene er riktig

Universell utforming

Innholdet mÄ gi mening med skjermleser

Accordion mÄ vÊre tilgjengelig for alle, ogsÄ for brukere som navigerer med tastatur eller bruker skjermleser. Bruker du komponenten som den er vil du fÄ funksjonaliteten, men du burde forsikre deg om at innholdet gjÞr det lett for brukeren Ä navigere i komponenten.

Komponenten stĂžtter

  • navigasjon mellom accordion-rader med “Tab” og “Shift” + “Tab”
  • Ă„pning og lukking av rader med Enter eller Space
  • tydelig visuell fokusindikator nĂ„r en rad er i fokus
  • tydelig markering av hvilken rad som er Ă„pen

Er Punkt sin accordion tilgjengelig nok?

Punkt sin accordion-komponent bruker HTML-elementene details og summary. Dette er fordi disse elementene er semantiske og tilgjengelige i seg selv. NÄr man fÞrst leser om accordion pÄ internett refereres det ofte til en test gjort av Haskall i 2019 som argumentasjon for Ä bruke andre alternativer (ofte buttons wrappet i headings som f.eks. WAI-ARIA sin accordion Pattern. Dette er fordi details og summary-elementene har hatt dÄrlig stÞtte i enkelte skjermlesere tidligere. Dette er noe som har blitt, og blir bedre med tiden. I dag er stÞtten god nok til at vi kan bruke disse elementene.

Mer om universell utforming av accordion:

Anatomi

ElementBeskrivelse
1. Tittel (valgfritt)Brukes som en forklaring over hele accordion-gruppen
2. Åpne- og lukke-ikonViser status og gir visuell ledetrĂ„d (pil-ikon)
3. OverskriftTittel pÄ hver rad, vises som summary
4. InnholdTeksten eller innholdet som vises nÄr raden Äpnes

Implementasjon i kode

Accordion lar brukeren Äpne og lukke innhold. I Punkt er komponenten bygget pÄ de semantiske HTML-elementene <details> og <summary>. Dette gir innebygd stÞtte for tastaturnavigasjon og gjÞr komponenten bÄde enkel og tilgjengelig.

For React og Elements tilbyr Punkt bÄde wrapper-komponenten <PktAccordion> og enkeltstÄende <PktAccordionItem>.

Som standard kan flere accordion-rader vĂŠre Ă„pne samtidig. Ønsker du at kun Ă©n rad skal vĂŠre Ă„pen, mĂ„ du styre tilstanden selv. Les mer under “Begrens antall Ă„pne rader”.

Hvordan ta komponenten i bruk?

Testing

Elements: Dersom du skal skrive tester med JSDOM eller liknende er det viktig at du lar komponenten bli rendret ferdig fĂžr du tester den. Dette kan gjĂžres ved Ă„ kjĂžre denne kodelinjen fĂžr testene kjĂžres:

await window.customElements.whenDefined("pkt-accordion");

Begrens antall Äpne rader

Som standard stÞtter Accordion Äpning av flere rader samtidig. For Ä styre at kun én rad kan vÊre Äpen om gangen, mÄ man styre alle radene sin toggle tilstand lokalt - det vil si at man mÄ overstyre den automatiske tilstandshÄndteringen til komponenten. Dette gjÞres ved Ä sette en boolean isOpen og en onClick/click funksjon pÄ <AccordionItem>/<pkt-accordion-item> som styrer Äpne-lukke tilstanden til komponenten.

I React trenger man Ä sende inn event for Ä forhindre inkonsekvent oppfÞrsel. Dette er fordi <details>-elementet har sin egen innebygde toggle-funksjon som kan fÞre til inkonsekvens nÄr vi prÞver Ä sette isOpen-propen i React. I <AccordionItem> kjÞrer vi e.preventDefault() for Ä forhindre at <details>-elementet sin innebygde toggle-funksjon kjÞrer. Sjekk eksemplene under!

Props og tokens

PktAccordion

PropTypeBeskrivelse
skinborderless
outlined
beige
blue
Hvordan skal accordion se ut?
ariaLabelledBystringID'en til elementet som beskriver accordionen. Brukes for tilgjengelighet.
compactbooleanEn kompakt accordion har mindre padding og margin
namestringNavn pÄ accordion-gruppen, som brukes for Ä gruppere flere accordion-items sammen.
Slot (children)Beskrivelse
defaultAccordion-elementene som skal vises i accordionen

PktAccordionItem

PropTypeBeskrivelse
titlestringTittelen som vises i sammendraget av elementet
idstringID-en til accordion-elementet
defaultOpenbooleanEt accordion-element kan settes til Ä vÊre Äpent som standard nÄr siden lastes
isOpenbooleanEn prop som kan brukes til Ä overstyre lokal isOpen-tilstand, og beskriver om accordion-elementet er Äpent eller ikke
namestringNavn pÄ accordion-element, som brukes for Ä gruppere flere accordion-elementer sammen.
Slot (children)Beskrivelse
defaultInnholdet i accordion-elementet