Skip to main content

ReadMore

ReadMore viser og skjuler én frittstående tekstblokk bak en klikkbar label. Den er nyttig for utdypende, sekundær informasjon som ikke alle trenger med en gang: brukeren ser labelen og åpner forklaringen kun ved behov. Komponenten bygger på native <details>/<summary>, så tastatur og skjermleser fungerer uten ekstra oppsett.

Egnet til

  • Utdypende forklaringer til et enkelt begrep eller spørsmål
  • Sekundær informasjon som støtter, men ikke er nødvendig for hovedinnholdet
  • Å holde tett innhold skannbart uten å skjule det helt
  • Korte «les mer»-avsnitt inne i tekstflaten

Uegnet til

  • Flere seksjoner som hører sammen — bruk heller Accordion
  • Innhold brukeren må se for å komme videre — vis det åpent
  • Navigasjon mellom sider — bruk lenker eller meny
  • Lange, strukturerte tekstmengder som bør ha egne overskrifter

Kom i gang

Result
Loading...
Kode
Live Editor
<ReadMore label="Hva regnes som helsemessige begrensninger?">
  <p>Med helsemessige begrensninger mener vi funksjonshemming, sykdom eller skade som påvirker hverdagen din over tid.</p>
</ReadMore>

Eksempler

Åpen som standard

Marker seksjonen med open (HTML) eller defaultOpen (React) om innholdet bør vises ved start.

Result
Loading...
Kode
Live Editor
<ReadMore label="Hva er inkludert?" defaultOpen>
  <p>Avtalen inkluderer nettbank, mobilbank og gratis kortbruk i Norge.</p>
</ReadMore>

Rikt innhold

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

Result
Loading...
Kode
Live Editor
<ReadMore label="Hva er inkludert?" defaultOpen>
  <p>Avtalen inkluderer blant annet:</p>
  <ListElement as="ul">
    <li>Nettbank og mobilbank</li>
    <li>Gratis kortbruk i Norge</li>
    <li>Varsling på SMS</li>
  </ListElement>
  <p>Les mer i <LinkText href="#">vilkårene</LinkText>.</p>
</ReadMore>

Retningslinjer

Innhold og formulering

  • Skriv en kort, beskrivende label som gir mening lest alene.
  • Start med det viktigste ordet — labelen skal være lett å skanne.
  • Unngå at brukeren må åpne seksjonen for å forstå hva den inneholder.

ReadMore eller Accordion?

Bruk ReadMore for én enkeltstående forklaring i tekstflaten. Har du flere seksjoner som hører sammen og bør stå i et samlet kort, bruk Accordion i stedet.

Tilpasning med CSS

Trenger du ix-read-more-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

Element/tilstandSelektor / attributt
Rot.ix-read-more på et <details>-element
Åpen[open]<details> (native)
Label<summary> (første barn — styles via .ix-read-more > summary)
Innhold.ix-read-more__content<div> (etter label)

Eksempel: ren HTML

<details class="ix-read-more">
<summary>Hva regnes som helsemessige begrensninger?</summary>
<div class="ix-read-more__content">
<p>Med helsemessige begrensninger mener vi funksjonshemming, sykdom eller skade som påvirker hverdagen din over tid.</p>
</div>
</details>

Den myke åpne/lukke-animasjonen er en progressiv CSS-enhancement; nettlesere uten støtte hopper bare åpent/lukket.

Universell utforming

Hva du selv må sørge for

  • Skriv kort og beskrivende label-tekst — labelen er klikkflaten og må gi mening alene.
  • Ikke gjem nødvendig innhold — ReadMore er for utdypende, sekundær informasjon. Innhold brukeren må se for å komme videre skal vises åpent.
  • Bruk overskriftsnivå ved behov — inngår labelen i en dokumentstruktur, kan du legge en <Heading>/<h3> inni labelen for korrekt overskriftshierarki.

Hva komponenten gjør automatisk

  • Disclosure-semantikk — labelen 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 labelen, 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å labelen (:focus-visible).
Avvik fra akseptansekriteriene: <summary> framfor <button>

En button-basert løsning (<button aria-expanded aria-controls> + panel med matchende id) er et vanlig mønster for disclosure. Vi bygger i stedet på native <details>/<summary>, som oppfyller samme intensjon — fokuserbar disclosure-knapp, Enter/Space og åpen/lukket-tilstand annonsert av skjermlesere — uten eksplisitt aria-expanded/aria-controls. Innholdet er programmessig knyttet til labelen ved å ligge inne i samme <details>, så aria-koblingen er overflødig. Dette er enklere, har bred innebygd støtte og følger samme native-tilnærming som Accordion.

Tastaturnavigasjon

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

Skjermleser

  • Labelen annonseres som en disclosure-knapp med åpen/lukket-tilstand (native <summary>) — f.eks. «Les mer, skjult/vist»
  • Å åpne seksjonen eksponerer innholdet som ligger inne i <details>; tilstanden annonseres uten at fokus flyttes
  • Å lukke seksjonen skjuler innholdet igjen; fokus blir værende på labelen brukeren aktiverte

WCAG-kriterier

Sist gjennomgått: 2026-07-20 — alle 56 WCAG 2.2-kriterier vurdert

WCAG-kriterier4 ditt ansvar · 15 håndtert · 36 ikke relevant · 0 ikke på plass
Ditt ansvar (4)
KriteriumNivåHva du må gjøre
2.4.6 Overskrifter og ledeteksterAASkriv kort og beskrivende label-tekst. Labelen er klikkflaten og skal beskrive hva som avsløres slik at den gir mening lest alene. Hold den kort. Teksten sendes inn av konsumenten (bokmål, nynorsk eller engelsk); komponenten har ingen hardkodet tekst.
1.3.1 Informasjon og relasjonerABruk overskriftsnivå i label ved behov. Hvis labelen inngår i en dokumentstruktur der den fungerer som en overskrift, kan du legge et passende overskriftselement (f.eks. en <Heading> / <h3>) inni labelen for korrekt overskriftshierarki. Knapp-semantikken kommer fra <summary>.
2.4.10 2.4.10?Bruk overskriftsnivå i label ved behov. Hvis labelen inngår i en dokumentstruktur der den fungerer som en overskrift, kan du legge et passende overskriftselement (f.eks. en <Heading> / <h3>) inni labelen for korrekt overskriftshierarki. Knapp-semantikken kommer fra <summary>.
1.3.1 Informasjon og relasjonerAIkke skjul innhold brukeren må se for å komme videre. ReadMore er for utdypende, sekundær informasjon. Innhold som er nødvendig for å forstå eller fullføre en oppgave skal vises åpent, ikke gjemmes bak en label.
Håndtert av komponenten (15)
KriteriumNivåHva komponenten gjør
1.3.1 Informasjon og relasjonerASemantisk struktur via native <details>/<summary>: labelen er en disclosure-knapp, innholdet er programmessig knyttet til den ved å ligge inne i samme <details>. Ingen ekstra ARIA er nødvendig.
1.3.2 Meningsfull rekkefølgeAInnhold følger naturlig leserekkefølge i DOM: label (summary) før innhold (content).
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)AALabel bruker --ix-color-foreground-accent-default og innhold --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å label oppfyller 3:1 kontrastkrav via --ix-outline-default.
2.1.1 TastaturALabelen 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: label før innhold.
2.4.7 Synlig fokusAATydelig fokusindikator på label (:focus-visible).
2.5.8 Målstørrelse (minimum)AALabelen har min. 44px høyde (touch-mål) via min-height + padding.
3.2.1 Ved fokusAIngen kontekstendring ved fokus. Å åpne/lukke seksjonen flytter ikke fokus og laster ikke ny kontekst.
3.2.2 Ved inndataAÅ aktivere labelen 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 — labelen er ren tekst sendt inn av konsumenten.
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- og åpne/lukke-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å label.
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

ReadMore

PropTypeStandardBeskrivelse
labelReactNodeKlikkbar label (kort og beskrivende)
childrenReactNodeInnholdet som avsløres — tekst, lister eller andre komponenter
defaultOpenbooleanfalseStart seksjonen åpen. Speiler native <details open>
classNamestringEkstra CSS-klasser på rot-<details>