Modal

Release dato: 26.11.2024

Sist oppdatert: 19.06.2025

Modal (også kalt dialog eller popup) er et midlertidig vindu som vises over annet innhold. Du bruker modal når du vil be brukeren ta stilling til noe viktig, vise informasjon eller gi mulighet for interaksjon, uten at de forlater den siden de er på.

Modaler bør brukes med måte. De kan oppleves forstyrrende, og må derfor ha en tydelig hensikt og være enkle å lukke.

Live demo

Relaterte komponenter

Varianter

Varianter

Modal kommer i to ulike visuelle varianter. Du velger selv hvilken variant som passer best i din løsning.

StyleBeskrivelse
SimpleFor enkle og nøytrale flater som admin-grensesnitt
SymbolLuftigere stil med lukknapp, passer for løsninger som matcher oslo.kommune.no

Retningslinjer for bruk

Bruk modal når

  • du trenger en bekreftelse på en kritisk handling (for eksempel ved sletting eller endringer som ikke kan angres)
  • du vil vise ekstra informasjon uten å forlate siden
  • du vil vise et skjema brukeren må fylle ut umiddelbart

Unngå modal når

  • innholdet er langt eller komplekst, bruk heller en ny side
  • det er flere steg i prosessen
  • informasjonen ikke er kritisk, bruk heller accordion eller lignende

Bruk modaler med omhu

Modaler er ofte forstyrrende, og regnes sjelden som god brukeropplevelse. De bryter brukerens flyt, tar over skjermen og gir inntrykk av at noe haster, selv når det ikke gjør det.

En modal kan få brukeren til å miste tråden i oppgaven de jobber med. De vet kanskje ikke hvorfor den dukker opp, hvordan den lukkes eller om de må gjøre noe. Dette gjelder særlig for brukere med konsentrasjonsvansker, nedsatt syn eller skjermleser.

I følge Nielsen Norman Group kan modaler skape usikkerhet eller frustrasjon hvis de ikke er forventet eller blokkerer viktig innhold.

Vi anbefaler at du tester modalen i bruk – helst med faktiske brukere – før du setter den i produksjon. Det er den beste måten å sikre at modalen hjelper, ikke hindrer.

Ikke åpne modal automatisk

En modal skal aldri vises uten at brukeren har gjort noe som tilsier det. Det må alltid være en tydelig trigger som gjør at brukeren forventer et avbrudd.

Gi brukeren en tydelig handling å utføre

En modal uten knapp eller neste steg skaper frustrasjon. Sørg for at det er tydelig hva brukeren skal gjøre, for eksempel lagre, sende inn, slette eller avbryte.

Gjør slik

Eksempel på riktig bruk av modal
Bruk modal når du vil gi mer informasjon, uten at det forstyrrer resten av oppgaven brukeren jobber med

Unngå

eksempel på dårlig bruk av modal
Unngå utydelige modaler der brukeren blir usikker på hva som skjer etter trykk eller interaksjon

Ikke bruk modaler til lange skjemaer eller mye interaksjon

Hvis modalen inneholder mange felt eller seksjoner, velg heller en egen side. Det gir bedre oversikt og navigasjon, særlig på små skjermer.

Ikke bruk modal til ukritisk informasjon

Modal passer ikke for små oppdateringer eller informasjon som kan vises på en roligere måte. Bruk inline-elementer eller infoseksjoner (for eksempel messagebox) i stedet.

Gjør slik

Eksempel på riktig bruk av modal
Bruk modal til kritiske handlinger og beskjeder

Unngå

eksempel på dårlig bruk av modal
Unngå modal ikke haster eller krever brukerens umiddelbare oppmerksomhet

Når du viser feilmeldinger i modal

Bruk komponenten alert for å vise feil, advarsler eller suksessmeldinger inne i modalen. Ikke endre bakgrunn eller tekstfarge på modalen for å signalisere alvor.

Gjør slik

Eksempel på riktig bruk av modal
Gå for å endre elementer i innholdet for å fremheve alvorlighetsgraden av en handling

Unngå

eksempel på dårlig bruk av modal
Unngå å endre fargen til modalen

Responsivitet

Når brukeren har mindre skjermplass, for eksempel på mobil, tar modaler ofte over hele visningen. Det kan føre til at brukeren mister oversikten, eller blir usikker på hva som skjer.

På mobil er det derfor ekstra viktig at modalen

  • oppleves som naturlig del av brukerflyten
  • har én tydelig handling og ikke flere valg som krever vurdering
  • er enkel å lukke med tydelig lukknapp og støtte for å bruke “Esc”/tilbake

Unngå å vise modaler med mye innhold, flere valg eller lange skjemaer på mobil. Det kan være krevende å navigere, spesielt med skjermtastatur oppe, og gir ofte en dårlig opplevelse.

Test alltid modal på mobilskjerm, i både stående og liggende visning. Pass på at innholdet ikke kuttes, at brukeren enkelt forstår hva som skjer, og at det er lett å gå tilbake.

Universell utforming

Modal er en dialogboks som vises over innholdet på siden. Den bruker HTML-elementet <dialog>, som automatisk setter fokus på det første fokuserbare elementet når modalen åpnes. I Punkt sin løsning er dette ofte lukknappen, og den får derfor autofocus. Vi anbefaler alltid å vise lukknappen, det gir forutsigbarhet og kontroll for brukeren.

Fokus skal styres riktig

Når modalen åpnes, skal fokus flyttes inn i modalen automatisk, helst til første interaktive element. Fokus må holdes inne i modalen så lenge den er åpen. Brukeren skal ikke kunne tabbe seg «bak» eller ut av den. Når modalen lukkes, skal fokus returneres til det elementet som åpnet den.

Gi brukeren en tydelig vei ut

Alle modaler må kunne lukkes med både “Esc” og en synlig lukknapp. Det gjør det enkelt å forstå hvordan man kommer seg videre, og er spesielt viktig for brukere med motoriske utfordringer.

Merk: “Esc” fungerer bare dersom du åpner modalen med den innebygde funksjonen showModal(). Dette vises i kodeeksemplene lenger ned.

Tastaturnavigasjon må fungere

Alle knapper og felt inne i modalen må kunne nås og brukes med tastatur. Hvis modalen inneholder et skjema, må submit-knappen være wrappet i <form method="dialog">. Da lukkes modalen automatisk når skjemaet sendes inn, uten at du trenger ekstra logikk.

Tittelen må være tydelig

Modalen skal alltid ha en tittel i en <h1>-tag. Dette hjelper skjermlesere med å tolke innholdet, og gir god kontekst for alle brukere.

Tilpass visning på små skjermer

På mobil og små skjermer skal modalen utvide seg og ta hele bredden. Modalen justerer seg automatisk når skjermen er smalere enn 576 px (36 rem). Vi anbefaler å teste dette i praksis, særlig hvis du har mye innhold i modalen.

Anatomi

ElementBeskrivelser
1. TittelOverskriften i modalen, gir brukeren kontekst
2. Lukke-ikonKnapp med ikon oppe til høyre, skal alltid være synlig
3. InnholdTekst, skjemaelementer, instruksjoner eller annet innhold
4. Valgfritt innhold (slot)Område for egendefinert innhold
5. HandlingerEn eller flere knapper nederst i modalen

Implementasjon i kode

Hvordan ta komponenten i bruk?

Testing

Elements og React: 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-modal");

Dersom du bruker verktøyene i punkt-testing-utils så kan dette bli gjort automatisk for deg.

Props og tokens

PropTypeBeskrivelse
headingTextstringHeading tekst på modalen
hideCloseButtonbooleanGjemmer lukkeknappen. Dersom denne er satt til true, vil ikke lukkeknappen vises, og dermed er det viktig at man tilbyr en annen måte som f.eks. en knapp for å lukke modalen på.
closeOnBackdropClickbooleanLukk modalen når bakgrunnen trykkes på
closeButtonSkinblue
yellow-filled
Stil på lukkeknappen
sizesmall
medium
large
Størrelsen på modalen
variantdialog
drawer
Standard dialog eller skuff
drawerPositionleft
right
Posisjonen til skuffen
transparentBackdropbooleanBakgrunnen er gjennomsiktig
Slot (children)Beskrivelse
defaultInnholdet i meldingen. Her tilbyr vi støtteklasser for å style 1-3 knapper i modalen.
EventBeskrivelse
background-clickEvent som trigges når bakgrunnen trykkes på
closeEvent som trigges når meldingsboksen lukkes

Farger

ElementCSS Variabel
Text
Background