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.

Test komponenten

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-input-wrapper");

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