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:

State Beskrivelse
Default Feltet vises i normal tilstand, klar til bruk
Hover NÄr brukeren beveger musepekeren over feltet
Focus NÄr brukeren har markert feltet og er klar til Ä skrive
Active NÄr brukeren skriver i feltet
Error NÄr feltet har en feil, og en forklarende feilmelding vises
Disabled NÄr feltet ikke er tilgjengelig for interaksjon
Default-state for Input wrapperHoverstate for Input wrapperFocus-state for Input wrapperActive-state for Input wrapperError-state for Input wrapperDisabled-state for Input wrapper

StĂžrrelser

Input wrapper finnes i tre ulike stĂžrrelser som skal brukes sammen med tilsvarende input-elementer.

StĂžrrelser Bruk
Medium (default) Standard, og skal brukes sammen med input-felt i medium stĂžrrelse
Small Brukes sammen med input-felt i small stĂžrrelse
XSmall Brukes sammen med input-felt i xsmall stĂžrrelse
Eksempel pÄ input wrapper i forskjellige stÞrrelser

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

Skriv tydelig og konsise labels

UnngÄ

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

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 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.

Eksempel pÄ hjelpetekst

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.

Ekspanderende hjelpetekst

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.

Feilmeldinger og validering

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

Element Beskrivelse
Label (etikett) Kort og tydelig ledetekst som beskriver hva brukeren skal velge
Valgfritt-/obligatorisk Merker feltet som valgfritt eller obligatorisk
Hjelpetekst Kort 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
Inputfelt Selve inputfeltet der brukeren skriver inn
Plassholdertekst Midlertidig tekst i feltet som indikerer at brukeren mÄ gjÞre et valg, skal ikke erstatte label
Inputwrapper anatomi

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

Egenskaper

PktInputWrapper

Props

Prop:
forId
Type:
string
Beskrivelse:
Id-en til skjemaelementet som dette wrapper rundt
Prop:
label
Type:
string
Beskrivelse:
Merkelapp for skjemaelementet
Prop:
helptext?
Type:
string
Beskrivelse:
Hjelpetekst for skjemaelementet
Prop:
helptextDropdown?
Type:
string
Beskrivelse:
Hjelpetekst som vises i ekspanderende felt
Prop:
helptextDropdownButton?
Type:
string
Standardverdi:
"Les mer <span class='pkt-sr-only'>om feltet</span>"
Beskrivelse:
Tekst som vises i knappen for Ă„ vise hjelpetekst i dropdown
Prop:
ariaDescribedby?
Type:
string
Beskrivelse:
Id-en til elementet som beskriver skjemaelementet
Prop:
counter?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Teller for antall tegn i skjemaelementet
Prop:
counterCurrent?
Type:
number
Beskrivelse:
Tellerens nÄvÊrende verdi
Prop:
counterMaxLength?
Type:
number
Beskrivelse:
Maks antall tegn som kan skrives i skjemaelementet
Prop:
counterPosition?
Type:
"top" | "bottom"
Standardverdi:
"bottom"
Beskrivelse:
Telleren sin plassering i forhold til elementet
Prop:
optionalTag?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Viser en merking som indikerer at feltet er valgfritt
Prop:
optionalText?
Type:
string
Standardverdi:
"Valgfritt"
Beskrivelse:
Tekst som vises i valgfritt-merkingen
Prop:
requiredTag?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Viser en merking som indikerer at feltet er pÄkrevd
Prop:
requiredText?
Type:
string
Standardverdi:
"MĂ„ fylles ut"
Beskrivelse:
Tekst som vises i pÄkrevd-merkingen
Prop:
tagText?
Type:
string
Beskrivelse:
Tekst som vises i en tag ved siden av label
Prop:
hasError?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer at skjemaelementet har en feil
Prop:
errorMessage?
Type:
string
Beskrivelse:
Feilmelding som vises nÄr skjemaelementet har en feil
Prop:
disabled?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer at skjemaelementet er deaktivert
Prop:
inline?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer at skjemaelementet skal flyte sammen med sidens innhold
Prop:
hasFieldset?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer at innholdet er et fieldset
Prop:
useWrapper?
Type:
boolean
Standardverdi:
true
Beskrivelse:
Indikerer om skjemaelementet skal bruke en wrapper
Prop:
role?
Type:
string
Standardverdi:
"group"
Beskrivelse:
Rollen til elementet
Prop:
size?
input-wrapper-size?
Type:
"small" | "medium" | "xsmall"
Standardverdi:
"medium"
Beskrivelse:
Visuell stĂžrrelse. small: kompakt wrapper og felt (42px). xsmall: samme wrapper som small, felt 36px.

Slots

Slot:
default
Beskrivelse:
Innholdet i input-wrapperen, som kan vĂŠre et skjemaelement eller en annen komponent

Events

Event:
toggleHelpText
Type:
—
Beskrivelse:
Event for Ă„ vise eller skjule hjelpetekst i dropdown