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
Bruker input wrapper for label og feilmelding
FÄr samme struktur og hjelpetekst via input wrapper
Omsluttes av input wrapper for konsistent visning
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 |
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
UnngÄ
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
UnngÄ
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
elleremail
. 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, settautocomplete="off"
- Automatisk formatering: Dersom du formaterer data automatisk mens brukeren skriver, mÄ formateringen vÊre synlig uten Ä forstyrre
Beskriver hvordan du gjĂžr text input tilgjengelige.
Forklarer hvorfor bruk av kun placeholder tekst er ugunstig.
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 |
Implementasjon i kode
Hvordan ta komponenten i bruk?
import @oslokommune/punkt-elements/dist/pkt-input-wrapper.js;
import { PktInputWrapper } from '@oslokommune/punkt-react';
<script src="https://punkt-cdn.oslo.kommune.no/latest/elements/pkt-input-wrapper.js" type="module"></script>
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
Prop | Type | Beskrivelse |
---|---|---|
forId | string | Id-en til skjemaelementet som dette wrapper rundt |
label | string | Merkelapp for skjemaelementet |
helptext | string | Hjelpetekst for skjemaelementet |
helptextDropdown | string | Hjelpetekst som vises i ekspanderende felt |
helptextDropdownButton | string | Tekst som vises i knappen for Ă„ vise hjelpetekst i dropdown |
ariaDescribedby | string | Id-en til elementet som beskriver skjemaelementet |
counter | boolean | Teller for antall tegn i skjemaelementet |
counterCurrent | number | Tellerens nÄvÊrende verdi |
counterMaxLength | number | Maks antall tegn som kan skrives i skjemaelementet |
counterPosition | top bottom | Telleren sin plassering i forhold til elementet |
optionalTag | boolean | Viser en merking som indikerer at feltet er valgfritt |
optionalText | string | Tekst som vises i valgfritt-merkingen |
requiredTag | boolean | Viser en merking som indikerer at feltet er pÄkrevd |
requiredText | string | Tekst som vises i pÄkrevd-merkingen |
tagText | string | Tekst som vises i en tag ved siden av label |
hasError | boolean | Indikerer at skjemaelementet har en feil |
errorMessage | string | Feilmelding som vises nÄr skjemaelementet har en feil |
disabled | boolean | Indikerer at skjemaelementet er deaktivert |
inline | boolean | Indikerer at skjemaelementet skal flyte sammen med sidens innhold |
hasFieldset | boolean | Indikerer at innholdet er et fieldset |
useWrapper | boolean | Indikerer om skjemaelementet skal bruke en wrapper |
role | string | Rollen til elementet |
Slot (children) | Beskrivelse |
---|---|
default | Innholdet i input-wrapperen, som kan vĂŠre et skjemaelement eller en annen komponent |
Event | Beskrivelse |
---|---|
toggleHelpText | Event for Ă„ vise eller skjule hjelpetekst i dropdown |