Skip to main content

Accordion

Accordion viser og skjuler innhold i seksjoner. Den er nyttig når mye innhold skal gjøres oversiktlig: brukeren ser overskriftene og åpner kun det som er relevant. Komponenten bygger på native <details>/<summary>, så tastatur og skjermleser fungerer uten ekstra oppsett.

Egnet til

  • Vanlige spørsmål (FAQ) og hjelpeinnhold
  • Lange skjemaer eller innstillinger delt i logiske bolker
  • Sekundær informasjon som ikke alle trenger samtidig
  • Å gjøre tett innhold skannbart uten å skjule det helt

Uegnet til

  • Innhold brukeren må se for å komme videre — vis det åpent
  • Én enkelt seksjon — bruk heller en vanlig overskrift + tekst
  • Navigasjon mellom sider — bruk lenker eller meny
  • Når alt innholdet uansett må leses i rekkefølge

Bruk

Laster...

Eksempler

Default-åpne seksjoner

Seksjonene er uavhengige — flere kan stå åpne samtidig. Marker de seksjonene som bør være åpne ved start med defaultOpen.

Laster...

Med prefiks-ikon

Accordion.Header tar ReactNode, så du kan sette et ikon foran tittelen. Teksten er alltid hovedbæreren — ikonet er kun støtte.

Laster...

Rikt innhold

Innholdet kan bestå av tekst, lister, lenker og andre komponenter.

Laster...

Retningslinjer

Skriv headere som kan leses alene

Headeren er det eneste brukeren har å gå etter før hen åpner seksjonen. Sett det viktigste ordet først, og hold den kort nok til å skannes nedover lista. Må seksjonen åpnes for at headeren skal gi mening, er headeren for vag.

Ikke legg accordion i accordion

To nivåer med åpne og lukkede seksjoner er vanskelig å holde oversikt over. Trenger du flere nivåer, del innholdet på egne sider eller i faner i stedet.

Start med det viktigste åpent

Sett defaultOpen på den seksjonen folk oftest er ute etter, så møter de innhold og ikke bare en liste med lukkede rader. Seksjonene er uavhengige, så flere kan stå åpne fra start.

Designvalg

Akseptansekriteriene beskriver en button-basert accordion (<button aria-expanded aria-controls> med et panel som har matchende id). Vi bygger i stedet på native <details>/<summary>. Den oppfyller samme intensjon uten eksplisitt aria-expanded/aria-controls: disclosure-knappen er fokuserbar, Enter og Space åpner og lukker, og skjermlesere annonserer tilstanden. Innholdet er programmessig knyttet til headeren ved å ligge inne i samme <details>, så aria-koblingen er overflødig. Løsningen er enklere, har bred innebygd støtte, og følger samme native-tilnærming som Digdir og Designsystemet.

Universell utforming

Hva du selv må sørge for

  • Skriv kort og beskrivende header-tekst. Headeren er klikkflaten og må gi mening alene. Et valgfritt prefiks-ikon støtter, men teksten er alltid hovedbæreren.
  • Plasser Accordion.Header først i hver Accordion.Item — native <details> krever at <summary> er første barn.
  • Bruk overskriftsnivå ved behov. Inngår headerne i en dokumentstruktur, kan du legge en <Heading>/<h3> inni Accordion.Header for korrekt overskriftshierarki.

Hva komponenten gjør automatisk

  • Disclosure-semantikk: header er en native <summary>: fokuserbar med Tab, åpnes/lukkes med Enter og Space, og åpen/lukket-tilstand annonseres av skjermlesere. Ingen ekstra ARIA er nødvendig.
  • Programmessig kobling: innholdet ligger inne i samme <details> som headeren, så de er knyttet sammen uten aria-controls/id.
  • Tilstandsindikator: en chevron roterer for å vise åpen/lukket. Animasjonen er kort og respekterer prefers-reduced-motion.
  • Fokusindikator: tydelig fokusring på header (:focus-visible).

Tastaturnavigasjon

TastHandling
TabFlytter fokus til neste header (og til fokuserbare elementer i åpent innhold)
Shift+TabFlytter fokus til forrige fokuserbare element
EnterÅpner eller lukker seksjonen når headeren har fokus
SpaceÅpner eller lukker seksjonen når headeren har fokus

Skjermleser

  • Header annonseres som en disclosure-knapp med åpen/lukket-tilstand (native <summary>) — f.eks. «Tittel, skjult/vist»
  • Å åpne en seksjon eksponerer innholdet som ligger inne i <details>; tilstanden annonseres uten at fokus flyttes
  • Seksjonene er uavhengige — å åpne én påvirker ikke de andre, og fokus blir værende på headeren brukeren aktiverte

WCAG-kriterier

Sist gjennomgått: 2026-06-24 — alle 56 WCAG 2.2-kriterier vurdert

WCAG-kriterier6 ditt ansvar · 15 håndtert · 36 ikke relevant · 0 ikke på plass
Ditt ansvar (6)
KriteriumNivåHva du må gjøre
2.4.6 Overskrifter og ledeteksterAASkriv kort og beskrivende header-tekst. Hver Accordion.Header er klikkflaten og skal beskrive innholdet i seksjonen slik at den gir mening lest alene. Hold den kort. Et valgfritt prefiks-ikon kan støtte forståelsen, men teksten er alltid hovedbæreren — ikonet skal ikke være eneste informasjon.
1.1.1 Ikke-tekstlig innholdASkriv kort og beskrivende header-tekst. Hver Accordion.Header er klikkflaten og skal beskrive innholdet i seksjonen slik at den gir mening lest alene. Hold den kort. Et valgfritt prefiks-ikon kan støtte forståelsen, men teksten er alltid hovedbæreren — ikonet skal ikke være eneste informasjon.
1.3.1 Informasjon og relasjonerAPlasser Accordion.Header først i hver Accordion.Item. Native <details> krever at <summary> (Accordion.Header) er første barn for at klikk og tastatur skal fungere. Skriv alltid Accordion.Header før Accordion.Content.
2.1.1 TastaturAPlasser Accordion.Header først i hver Accordion.Item. Native <details> krever at <summary> (Accordion.Header) er første barn for at klikk og tastatur skal fungere. Skriv alltid Accordion.Header før Accordion.Content.
1.3.1 Informasjon og relasjonerABruk overskriftsnivå i header ved behov. Hvis seksjonene inngår i en dokumentstruktur der headerne fungerer som overskrifter, kan du legge et passende overskriftselement (f.eks. en <Heading> / <h3>) inni Accordion.Header for korrekt overskriftshierarki. Knapp-semantikken kommer fra <summary>.
2.4.10 2.4.10?Bruk overskriftsnivå i header ved behov. Hvis seksjonene inngår i en dokumentstruktur der headerne fungerer som overskrifter, kan du legge et passende overskriftselement (f.eks. en <Heading> / <h3>) inni Accordion.Header for korrekt overskriftshierarki. Knapp-semantikken kommer fra <summary>.
Håndtert av komponenten (15)
KriteriumNivåHva komponenten gjør
1.3.1 Informasjon og relasjonerASemantisk struktur via native <details>/<summary>: header er en disclosure-knapp, innholdet er programmessig knyttet til den ved å ligge inne i samme <details>. Skillelinjer mellom seksjoner er rent visuelle.
1.3.2 Meningsfull rekkefølgeAInnhold følger naturlig leserekkefølge i DOM: header (summary) før innhold (content), seksjon for seksjon.
1.4.1 Bruk av fargeAÅpen/lukket-tilstand formidles av native disclosure-semantikk (annonseres av skjermleser) og chevron-ikon — ikke av farge alene.
1.4.3 Kontrast (minimum)AATekst bruker --ix-color-foreground-main-default på --ix-color-surface-main, som oppfyller kontrastkravet i både light og dark mode.
1.4.4 Endre tekststørrelseAARelative enheter (font-size-tokens) — tekst skalerer korrekt ved 200 % zoom uten at innhold brytes.
1.4.10 OmflytAAMobile-first uten faste bredder — reflower korrekt ned til 320px viewport uten horisontal scroll.
1.4.11 Kontrast for ikke-tekstlig innholdAAFokusindikator på header oppfyller 3:1 kontrastkrav via --ix-outline-default.
2.1.1 TastaturAHeader er en native <summary> — fokuserbar med Tab og åpnes/lukkes med Enter og Space. Fullt opererbart med tastatur.
2.1.2 Ingen tastaturfelleAIngen tastaturfeller — fokus navigeres fritt ut med Tab/Shift+Tab.
2.4.3 FokusrekkefølgeAFølger naturlig tab-rekkefølge i DOM: header etter header.
2.4.7 Synlig fokusAATydelig fokusindikator på header (:focus-visible).
2.5.8 Målstørrelse (minimum)AAHeader har min. 44px høyde (touch-mål) via min-height + padding.
3.2.1 Ved fokusAIngen kontekstendring ved fokus. Å åpne/lukke en seksjon flytter ikke fokus og laster ikke ny kontekst.
3.2.2 Ved inndataAÅ aktivere en header gjør kun det forventede (viser/skjuler innhold) — ingen automatisk kontekstendring.
4.1.2 Navn, rolle, verdiANative <details>/<summary> gir korrekt rolle og åpne/lukke-tilstand til skjermlesere uten ekstra ARIA. Komponenten er ren CSS og setter ingen ARIA.
Ikke relevant (36)
KriteriumNivåHvorfor ikke relevant
1.1.1 Ikke-tekstlig innholdAKomponenten har ikke eget bildeinnhold. Et valgfritt prefiks-ikon i headeren er konsumentens ansvar (Icon-komponenten håndterer alt-tekst/aria-hidden).
1.2.1 Bare lyd og bare video (forhåndsinnspilt)AIngen medieelementer.
1.2.2 Teksting (forhåndsinnspilt)AIngen medieelementer.
1.2.3 Synstolking eller mediealternativ (forhåndsinnspilt)AIngen medieelementer.
1.2.4 Teksting (direkte)AAIngen medieelementer.
1.2.5 Synstolking (forhåndsinnspilt)AAIngen medieelementer.
1.3.3 Sensoriske egenskaperAFormidler ikke instruksjoner basert på sensoriske egenskaper.
1.3.4 VisningsretningAAIngen fast orientering — tilpasser seg visningsretning.
1.3.5 Identifiser formål med inndataAAIkke et skjemafelt som ber om personlig informasjon.
1.4.2 Styring av lydAIngen lydelementer.
1.4.5 Bilder av tekstAAIngen bilder av tekst.
1.4.12 TekstavstandAA
1.4.13 Innhold ved hover eller fokusAA
2.1.4 TastatursnarveierAIngen egendefinerte tastatursnarveier.
2.2.1 Justerbar hastighetAIngen tidsbegrensede funksjoner.
2.2.2 Pause, stopp, skjulAIngen animasjon eller automatisk oppdatering.
2.3.1 Terskelverdi på tre glimtAChevron-animasjon er kort og respekterer prefers-reduced-motion; ingen blink.
2.4.1 Hoppe over blokkerASidekrav — gjelder ikke enkeltkomponenter.
2.4.2 SidetitlerASidekrav — gjelder ikke enkeltkomponenter.
2.4.5 Flere måterAASidekrav — gjelder ikke enkeltkomponenter.
2.5.1 PekerbevegelserAIngen gestbaserte interaksjoner — enkelt klikk/tap på header.
2.5.2 Avbryt pekerANative <summary> — nettleseren håndterer pekerinteraksjon.
2.5.4 BevegelsesaktiveringAIngen bevegelsesbasert interaksjon.
2.5.6 Samtidige inndatamekanismerA
2.5.7 DrabevegelserAIngen drag-and-drop.
3.1.1 Språk på sidenASidekrav — gjelder ikke enkeltkomponenter.
3.1.2 Språk på deler av innholdAAKomponenten setter ikke lang-attributt — innhold er på sidespråket.
3.2.3 Konsistent navigasjonAASidekrav — gjelder ikke enkeltkomponenter.
3.2.4 Konsistent identifikasjonAASystemkrav — gjelder konsistens på tvers av sider, ikke enkeltkomponenter.
3.2.6 Konsistent hjelpASidekrav — gjelder plassering av hjelpefunksjon på tvers av sider.
3.3.1 Identifikasjon av feilA
3.3.2 Ledetekster eller instruksjonerA
3.3.3 Forslag ved feilAA
3.3.4 Forhindring av feil (juridisk, økonomisk, data)AAFlytkrav — gjelder bekreftelse/reversering av transaksjoner, ikke enkeltfelter.
3.3.7 Redundant oppføringAFlytkrav — gjelder at brukeren ikke skal gjenta informasjon i en prosess.
3.3.8 Tilgjengelig autentisering (minimum)AAIkke en autentiseringskomponent.

Props / API

Accordion

PropTypeStandardBeskrivelse
childrenReactNodeAccordion.Item-seksjoner
classNamestringEkstra CSS-klasser på rot-elementet (<div class="ix-accordion">)

Accordion.Item

PropTypeStandardBeskrivelse
childrenReactNodeEn Accordion.Header (først) og en Accordion.Content
defaultOpenbooleanfalseStart seksjonen åpen. Speiler native <details open>
classNamestringEkstra CSS-klasser på <details>

Accordion.Header

PropTypeStandardBeskrivelse
childrenReactNodeTittel (kort og beskrivende), kan inkludere et prefiks-ikon
classNamestringEkstra CSS-klasser på <summary>

Accordion.Content

PropTypeStandardBeskrivelse
childrenReactNodeInnholdet — tekst, lister eller andre komponenter
classNamestringEkstra CSS-klasser på innholds-<div>

Tilpasning med CSS

Trenger du ix-accordion-stylingen på HTML du setter sammen selv, kan du bruke klassene direkte. Native <details>/<summary> gir semantikk og tastatur — ingen JavaScript er nødvendig.

Tilgjengelige klasser og selektorer

Element/tilstandSelektor / attributt
Rot (gruppe).ix-accordion på et container-element (f.eks. <div>)
Seksjon.ix-accordion__item<details>
Åpen seksjon[open]<details> (native)
Header.ix-accordion__header<summary> (første barn)
Innhold.ix-accordion__content<div> (etter header)

Eksempel: ren HTML

<div class="ix-accordion">
<details class="ix-accordion__item" open>
<summary class="ix-accordion__header">Første seksjon</summary>
<div class="ix-accordion__content">
<p>Innhold i første seksjon.</p>
</div>
</details>
<details class="ix-accordion__item">
<summary class="ix-accordion__header">Andre seksjon</summary>
<div class="ix-accordion__content">
<p>Innhold i andre seksjon.</p>
</div>
</details>
</div>

Seksjonene er uavhengige native <details> — flere kan stå åpne samtidig. Den myke åpne/lukke-animasjonen er en progressiv CSS-enhancement; nettlesere uten støtte hopper bare åpent/lukket.