Text input

Release dato: 14.08.2023

Sist oppdatert: 07.07.2025

Et text input (tekstfelt, inputfelt) lar brukeren skrive fritekst, oftest i skjemaer, men også i andre deler av en tjeneste. Bruk tekstfelt til korte verdier som får plass på én linje, for eksempel navn, e-post, telefonnummer, fødselsnummer eller beløp.

Målet er at brukeren raskt forstår hva som skal fylles inn, og får tydelig tilbakemelding hvis noe er feil.

Live demo

Relaterte komponenter

Varianter

Text input brukes vanligvis sammen med input wrapper. Under dokumentasjonen til denne finner du mer om hvordan du skriver gode labels og hjelpetekster, og om funksjonene i input wrapper.

TypeBeskrivelse
StandardLabel, placeholder og tekstfelt
Med hjelpetekstKort hjelpetekst under label
Med ekspanderende hjelpetekstHjelpetekst bak “Les mer”-knapp
Valgfritt-tag/obligatorisk tagViser enten “Valgfritt” eller “Må fylles ut” ved siden av label

Text input brukes vanligvis sammen med input wrapper, under dokumentasjonen til denne finner du mer om hvordan du skriver gode labels og hjelpetekster, og om funksjonene i input wrapper.

States

Text input har seks ulike states som gir brukeren visuell tilbakemelding i ulike situasjoner:

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

Bruk text input når

  • brukeren skal skrive kort fritekst på én linje, som navn, e-post, telefonnummer eller beløp
  • verdien er unik og ikke kan velges fra en liste

Unngå text input når

  • brukeren skal velge mellom forhåndsdefinerte alternativer (bruk heller select, radio button eller checkbox)
  • innholdet er lengre fritekst, som avsnitt eller flere setninger (bruk heller textarea)

Labels/etikett

En label skal være kort og presis, helst mellom ett og tre ord. Unngå kolon på slutten og bruk verken kun store eller små bokstaver.

Gjør slik

Gjør slik – tydelige 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

Plassholder

Plassholder skal aldri være eneste instruksjon. Den forsvinner når brukeren gjør et valg, og er ikke alltid tilgjengelig for skjermlesere. Bruk heller label og/eller hjelpetekst for å gi nødvendig veiledning.

Gjør slik

Gjør slik – bruk label over text input
Bruk label over text input

Unngå

Unngå – placeholdertekst som eneste ledetekst
Unngå å bruke plassholdertekst som eneste ledetekst

Bredde

Bredden på feltet bør passe til innholdet du forventer at brukeren fyller inn. Et telefonnummerfelt bør for eksempel ikke være bredere enn antallet tegn som skal skrives inn. Ulik bredde på feltene gjør det lettere å navigere i skjemaer med mange felt.

Text input er egnet til korte tekster og svar. Textarea er egnet til mer utfyllende og lengre svar.

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 smale felt
Unngå for brede eller for smale felt for forventet innhold

Valgfritt eller påkrevd

Velg én metode for å markere felter: enten viser du «Valgfritt» på de åpne feltene, eller «Må fylles ut» på de obligatoriske. Bland aldri begge i samme løsning.

Prefiks og suffiks

Bruk prefiks når faste tegn skal vises foran verdien, for eksempel landskode på telefonnummer. Bruk suffiks når du skal vise en enhet, et ikon eller tilby en handling som å tømme feltet eller vise/skjule passord.

Hjelpetekst og feilmeldinger

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.

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.

Les mer om innhold i skjemaelementer i input wrapper-dokumentasjonen og om god praksis for skjemaer.

Responsivitet

Text input 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

Synlig eller skjult label

Alle felt skal ha en label. Den kan være synlig, eller skjult med pkt-sr-only når den ikke skal vises visuelt. Labelen må være koblet til feltet i koden, slik at skjermlesere leser opp riktig informasjon.

Hjelpetekst og feilmelding

Hjelpetekst og feilmeldinger skal knyttes til feltet med aria-describedby. På den måten får skjermlesere lest opp riktig kontekst. Feilmeldinger må være tekst, plassert rett under feltet, og forklare både hva som er galt og hvordan det kan rettes. Ikke vis feilmeldinger før brukeren faktisk har forsøkt å fylle ut feltet.

Riktig type og autofyll

Bruk riktige type-verdier for å gi bedre tilgjengelighet og riktig tastatur på mobil, for eksempel email, tel eller password. Angi autocomplete der det er nyttig, som name eller one-time-code.

Klikkbare prefiks og suffiks

Ikoner eller tekst som fungerer som handlinger (for eksempel “vis/skjul passord”) må kunne fokuseres med tastatur og ha en tydelig beskrivelse for skjermlesere.

Unngå plassholder som instruksjon

Plassholdertekst forsvinner når brukeren skriver, og er ofte utilgjengelig for skjermlesere. Viktig veiledning må derfor alltid ligge i label eller hjelpetekst.

Inndata

For å sikre en god brukeropplevelse er det viktig å bruke en kombinasjon av riktig input-type og autocomplete-attributter. Les mer om autocomplete på MDN Webdocs.

  • Tillat variasjoner i hvordan data skrives inn, så lenge informasjonen er forståelig. For eksempel bør telefonnumre kunne inneholde mellomrom, personnumre punktum, og e-postadresser aksepteres selv om de har et mellomrom til slutt
  • Velg inputtyper som samsvarer med informasjonen du ber om, for eksempel tel, search eller email. Dette gir mobilbrukere et tilpasset tastatur, men vær oppmerksom på at enkelte inputtyper kan aktivere klientsidevalidering
  • autocomplete brukes i felter som mottar personlig informasjon. Hvis feltet skal be om personopplysninger om en annen person enn brukeren, må du sette autocomplete="off"
  • Pass på at brukerne ser inndata som formateres automatisk, men uten at det forstyrrer dem mens de fyller ut.

Mer om universell utforming av text input:

Anatomi

ElementBeskrivelse
Label (etikett)Kort og tydelig ledetekst som beskriver hva brukeren skal skrive
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-textinput");

Props og tokens

PropTypeBeskrivelse
labelstringTekst som vises over feltet
namestringNavn som sendes brukes i skjema ved innsending
placeholderstringSpesifiserer en kort hint som beskriver forventet verdi av feltet.
helptextstringHjelpetekst som vises over feltet
helptextDropdownstringHjelpetekst som vises i en lukket boks man kan åpne
helptextDropdownButtonstringTekst som vises på knappen for å åpne/lukke utvidet hjelpetekst
sizenumberSpesifiserer bredde på feltet i antall tegn.
typecolor
date
datetime-local
email
file
month
number
password
search
tel
text
time
url
week
Spesifiserer typen av feltet. Standard er 'text'.
omitSearchIconbooleanIndikerer om søkeikonet skal utelates.
valuestringSpesifiserer den nåværende verdien av feltet.
autocompletestringSpesifiserer hvordan type `autocomplete` feltet har. Standard er 'off'.
suffixstringSpesifiserer et suffiks som vises etter feltet.
prefixstringSpesifiserer et prefiks som vises før feltet.
iconNameRighticonSpesifiserer navnet på ikonet som vises til høyre for feltet.
ariaLabelledbystringSpesifiserer ID-en til elementet som beskriver feltet.
requiredbooleanEr feltet påkrevd?
requiredTagbooleanIndikerer om feltet er påkrevd.
requiredTextstringTekst som vises i påkrevd-merkingen
optionalTagbooleanIndikerer om feltet er valgfritt.
optionalTextstringTekst som vises i valgfritt-merkingen
tagTextstringTekst som vises i en tag ved siden av label
hasErrorbooleanIndikerer om feltet har en feil.
errorMessagestringTekst som vises under datovelgeren ved feiltilstand
disabledbooleanIndikerer om feltet er deaktivert.
inlinebooleanIndikerer om feltet skal vises inline.
fullwidthbooleanIndikerer om feltet skal ta opp full bredde.
useWrapperbooleanIndikerer at feltet skal ha synlig label og hjelpetekst
idstringSpesifiserer den unike identifikatoren for feltet.
counterbooleanIndikerer om en teller skal vises.
counterMaxLengthnumberSpesifiserer maksimal lengde for telleren.
EventBeskrivelse
changeReturnerer verdi som streng
toggleHelpTextReturnerer event.detail { isOpen: true } eller event.detail { isOpen: false } når hjelpeteksten åpnes eller lukkes

Farger

ElementCSS variabel
Border
Text