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.

Test komponenten

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