Input wrapper

Release dato: 15.08.2023

Sist oppdatert: 07.07.2025

Input wrapper legger til en standardpakke med elementer rundt et inputfelt. Den brukes i alle inputfeltene i Punkt, og sikrer at etikett, hjelpetekst og feilmeldinger alltid vises på en konsekvent måte.

Live demo

Relaterte komponenter

Varianter

States

Input wrapper støtter de samme states som feltene den omslutter:

StateBeskrivelse
DefaultFeltet vises i normal tilstand, klar til bruk
HoverNår brukeren beveger musepekeren over feltet
FocusNår brukeren har markert feltet og er klar til å skrive
ActiveNår brukeren skriver i feltet
ErrorNår feltet har en feil, og en forklarende feilmelding vises
DisabledNår feltet ikke er tilgjengelig for interaksjon

Retningslinjer for bruk

Labels/etikett

Labels bør være korte, tydelige og plassert slik at de er enkle å oppfatte. Brukeren skal umiddelbart forstå hva som skal fylles ut. Vi anbefaler at du holder deg til 1 til 3 ord i label, unngå kolon og bruk labels konsekvent på tvers av løsningen.

Dersom du må skjule en label visuelt, for eksempel i tabeller, må den fremdeles være programmert inn slik at skjermlesere kan lese den. Det er også viktig å teste at brukeren forstår hva de skal fylle inn i et slikt tilfelle.

Ikke bruk plassholder som eneste instruksjon. Den forsvinner når brukeren skriver, og er ikke alltid tilgjengelig for skjermlesere. Gi heller nødvendig veiledning med en label og/eller hjelpetekst.

Gjør slik

Gjør slik – Skriv tydelig og konsise labels
Skriv tydelig og konsise labels

Unngå

Unngå – Unødvendig innhold og kolon på slutten av label
Unngå unødvendig innhold og kolon på slutten av label

Merking av valgfrie eller obligatoriske felt

I Punkt bruker vi kun merkingen “Valgfritt” og “Må fylles ut”. Vi anbefaler alltid å unngå stjerne (*) som markering, fordi den kan være uklar for brukerne og vanskelig å oppfatte med hjelpemidler.

Som hovedregel bør du unngå valgfrie felter og bare be om informasjon du faktisk trenger. Når du likevel må ha en kombinasjon, bør feltene merkes konsekvent:

  • Hvis alle felter på en side er obligatoriske, kan du utelate merkingen og heller skrive det i hjelpeteksten eller over skjemaet
  • Hvis alle felter er valgfrie, markerer du feltene med “Valgfritt”
  • Hvis du har en blanding av obligatoriske og valgfrie felter, markerer du hvert felt individuelt med “Må fylles ut” eller “Valgfritt”.

Gjør slik

Gjør slik – Bredde som indikerer forventet innhold
Bredden til inputfeltet bør gi brukeren en indikasjon på hva som forventes at de fyller inn

Unngå

Unngå – For brede eller for smale felt
Unngå for brede eller for smale felt for forventet innhold

Hjelpetekst

Hjelpetekst skal alltid bidra til å avklare, ikke gjenta. Den skal forklare hvordan brukeren skal fylle ut feltet, for eksempel hvilket format som gjelder, eller hvor de finner informasjonen. Hjelpetekst bør plasseres tett ved feltet og være lett å oppdage, ellers blir den oversett. Skriv alltid i setningsstil, og bruk hele setninger når det er mulig. Hjelpeteksten bør plasseres over feltet slik at den ikke kolliderer med feilmeldinger.

Ekspanderende hjelpetekst

Dersom du trenger mer plass, kan du bruke ekspanderende hjelpetekst. Dette gjør det mulig å gi utfyllende forklaringer eller legge inn lenker uten å skape for mye støy for brukeren. Husk at utvidet hjelpetekst skal være et supplement, det viktigste må alltid stå tilgjengelig uten ekstra klikk.

Feilmeldinger og validering

Feilmeldinger skal være konkrete og hjelpe brukeren videre. De bør forklare hva som er galt, og så langt som mulig foreslå hvordan det kan rettes opp.

Feilmeldinger i Punkt kombinerer rød ramme, ikon og tekst. Teksten skal inneholde essensen av hjelpeteksten, slik at brukeren får all nødvendig informasjon samlet.

For å fungere godt må feilmeldinger oppfylle følgende prinsipper:

1. Spesifikk og hjelpsom

Gi klar informasjon om problemet, og foreslå løsning dersom det er mulig, for eksempel riktig format eller korrigering ved feilstavinger.

2. Ikke for tidlig

Unngå å vise feilmeldinger før brukeren har begynt å fylle ut feltet, eller mens hen fortsatt skriver. Vent til brukeren har forlatt feltet eller prøvd å sende inn skjemaet.

3. Feiloppsummering

I skjemaer med flere felter bør feil presenteres både i nærheten av hvert enkelt felt og samlet i en feiloppsummering øverst på siden. Bruk gjerne messagebox i rød variant til dette.

4. Behold gyldig data

All informasjon som er skrevet inn riktig må bli stående. Det er svært frustrerende å måtte fylle ut hele skjemaet på nytt etter en feil.

Responsivitet

Input wrapper tilpasser seg tilgjengelig plass og bryter linjer ved behov.

Test at:

  • hjelpetekst og feilmeldinger holder seg nær feltet
  • prefiks/suffiks ikke skyver ut viktig innhold
  • klikkbare ikoner er store nok på mobil

Universell utforming

Alle felt skal ha label

Alle skjemaelementer må ha en label. Den kan være synlig, eller skjult med pkt-sr-only dersom layouten krever det. Selv når label skjules visuelt, må den være til stede i koden slik at skjermlesere kan lese den opp.

Korrekt kobling i koden

Labels må alltid være koblet til det riktige inputfeltet i koden. Dette gjør at skjermlesere kan presentere informasjonen på en forståelig måte, og gir brukeren riktig kontekst når de fyller ut skjemaet.

Feilmeldinger skal være tilgjengelige

Feilmeldinger må være kodet som tekst, plassert tett på feltet der feilen har oppstått. Bruk en ARIA live region (aria-live="assertive" eller role="alert") for å informere når feil oppstår. Denne må være en del av DOM-en fra starten for å fungere. Punkt sine skjemakomponenter har dette innebygget.

Unngå unødvendige deaktiverte felt

Ikke bruk deaktivert tilstand (disabled) hvis det ikke er helt nødvendig. Felt som ikke kan fylles ut skaper ofte forvirring. Bruk heller ren tekst eller readonly for å informere brukeren uten å hindre interaksjon.

Unngå kun plassholder

Plassholdertekst er ofte utilgjengelig for skjermlesere og forsvinner ved innskriving.

Inndata

For å sikre en god brukeropplevelse er det viktig å velge riktig input-type og bruke autocomplete der det er relevant. Dette gjør skjemaet enklere å fylle ut og mer tilgjengelig.

  • Tillat variasjoner: Brukerne skriver inn informasjon på ulike måter. Tillat variasjoner så lenge innholdet er forståelig (telefonnummer med mellomrom, personnumre med punktum, e-post med mellomrom til slutt)
  • Velg riktig input-type: Bruk inputtyper som passer til informasjonen du ber om, for eksempel tel, search eller email. Dette gir mobilbrukere et tilpasset tastatur (merk at noen typer kan aktivere klientsidevalidering)
  • Bruk av autocomplete: autocomplete skal brukes i felter som mottar personlig informasjon. Hvis feltet ber om opplysninger om en annen person enn brukeren, sett autocomplete="off"
  • Automatisk formatering: Dersom du formaterer data automatisk mens brukeren skriver, må formateringen være synlig uten å forstyrre

Anatomi

ElementBeskrivelse
Label (etikett)Kort og tydelig ledetekst som beskriver hva brukeren skal velge
Valgfritt-/obligatoriskMerker feltet som valgfritt eller obligatorisk
HjelpetekstKort forklaring under label som hjelper brukeren å forstå hvordan de skal fylle ut feltet
Ekspanderende hjelpetekst“Les mer”-knapp som viser mer utfyllende informasjon når brukeren trenger ekstra forklaring
InputfeltSelve inputfeltet der brukeren skriver inn
PlassholdertekstMidlertidig tekst i feltet som indikerer at brukeren må gjøre et valg, skal ikke erstatte label

Implementasjon i kode

Hvordan ta komponenten i bruk?

Testing

Elements: 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-inputwrapper");

Props og tokens

PropTypeBeskrivelse
forIdstringId-en til skjemaelementet som dette wrapper rundt
labelstringMerkelapp for skjemaelementet
helptextstringHjelpetekst for skjemaelementet
helptextDropdownstringHjelpetekst som vises i ekspanderende felt
helptextDropdownButtonstringTekst som vises i knappen for å vise hjelpetekst i dropdown
ariaDescribedbystringId-en til elementet som beskriver skjemaelementet
counterbooleanTeller for antall tegn i skjemaelementet
counterCurrentnumberTellerens nåværende verdi
counterMaxLengthnumberMaks antall tegn som kan skrives i skjemaelementet
counterPositiontop
bottom
Telleren sin plassering i forhold til elementet
optionalTagbooleanViser en merking som indikerer at feltet er valgfritt
optionalTextstringTekst som vises i valgfritt-merkingen
requiredTagbooleanViser en merking som indikerer at feltet er påkrevd
requiredTextstringTekst som vises i påkrevd-merkingen
tagTextstringTekst som vises i en tag ved siden av label
hasErrorbooleanIndikerer at skjemaelementet har en feil
errorMessagestringFeilmelding som vises når skjemaelementet har en feil
disabledbooleanIndikerer at skjemaelementet er deaktivert
inlinebooleanIndikerer at skjemaelementet skal flyte sammen med sidens innhold
hasFieldsetbooleanIndikerer at innholdet er et fieldset
useWrapperbooleanIndikerer om skjemaelementet skal bruke en wrapper
rolestringRollen til elementet
Slot (children)Beskrivelse
defaultInnholdet i input-wrapperen, som kan være et skjemaelement eller en annen komponent
EventBeskrivelse
toggleHelpTextEvent for å vise eller skjule hjelpetekst i dropdown