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
NÄr du skal vise status, feil eller bekreftelser
Brukes for Ä vise informasjon eller beskjed pÄ en roligere mÄte
NÄr du vil gi ekstra informasjon, men bare ved behov
Varianter
Varianter
Modal kommer i to ulike visuelle varianter. Du velger selv hvilken variant som passer best i din lĂžsning.
Style | Beskrivelse |
---|---|
Simple | For enkle og nĂžytrale flater som admin-grensesnitt |
Symbol | Luftigere 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.
Er innholdet faktisk viktig nok til Ä avbryte brukeren? Og er det tydelig hva brukeren skal gjÞre? Modal er en forstyrrelse. Bruk den bare nÄr det er helt nÞdvendig, og gjÞr det tydelig hva brukeren skal gjÞre.
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
UnngÄ
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
UnngÄ
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
UnngÄ
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.
Modaler pÄ mobil fungerer best nÄr de er korte, enkle og har én klar beskjed. Alt annet bÞr vurderes lÞst pÄ en annen mÄte.
Universell utforming
Modal mÄ vÊre tilgjengelig for alle
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.
Teknisk dokumentasjon og forklaring av dialog-elementet i HTML. Attributter, metoder og bruksmĂžnstre.
Hvordan bygge en universelt utformet modal
Anatomi
Element | Beskrivelser |
---|---|
1. Tittel | Overskriften i modalen, gir brukeren kontekst |
2. Lukke-ikon | Knapp med ikon oppe til hĂžyre, skal alltid vĂŠre synlig |
3. Innhold | Tekst, skjemaelementer, instruksjoner eller annet innhold |
4. Valgfritt innhold (slot) | OmrÄde for egendefinert innhold |
5. Handlinger | En eller flere knapper nederst i modalen |
Implementasjon i kode
Hvordan ta komponenten i bruk?
import @oslokommune/punkt-elements/dist/pkt-modal.js;
import { PktModal } from '@oslokommune/punkt-react';
<script src="https://punkt-cdn.oslo.kommune.no/latest/elements/pkt-modal.js" type="module"></script>
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
Prop | Type | Beskrivelse |
---|---|---|
headingText | string | Heading tekst pÄ modalen |
hideCloseButton | boolean | Gjemmer 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Ä. |
closeOnBackdropClick | boolean | Lukk modalen nÄr bakgrunnen trykkes pÄ |
closeButtonSkin | blue yellow-filled | Stil pÄ lukkeknappen |
size | small medium large | StÞrrelsen pÄ modalen |
variant | dialog drawer | Standard dialog eller skuff |
drawerPosition | left right | Posisjonen til skuffen |
transparentBackdrop | boolean | Bakgrunnen er gjennomsiktig |
Slot (children) | Beskrivelse |
---|---|
default | Innholdet i meldingen. Her tilbyr vi stĂžtteklasser for Ă„ style 1-3 knapper i modalen. |
Event | Beskrivelse |
---|---|
background-click | Event som trigges nÄr bakgrunnen trykkes pÄ |
close | Event som trigges nÄr meldingsboksen lukkes |