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.

Har du noen innspill til komponenten?Gi oss beskjed!

Test komponenten

Dette er hjelpetekst.

Kodebygger

PktTextinput

Innhold
Spesifiserer et suffiks som vises etter feltet.
Spesifiserer et prefiks som vises før feltet.
Spesifiserer navnet på ikonet som vises til høyre for feltet.
Utseende
Visuell størrelse via input-wrapper.
Tilgjengelighet
Spesifiserer ID-en til elementet som beskriver feltet.
Spesifiserer ID-en til elementet som beskriver feltet.
Teknisk
Navn som brukes i skjema ved innsending
ID-en til skjemaet feltet hører til, når feltet ligger utenfor skjemaet
Spesifiserer bredde på feltet i antall tegn.
Spesifiserer typen av feltet. Standard er 'text'.
Spesifiserer den nåværende verdien av feltet.
Spesifiserer hvordan type autocomplete feltet har. Standard er 'off'.
Spesifiserer den unike identifikatoren for feltet.
Innstillinger

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.

Enkel textinputETextinput med hjelpetekstTextinput med ekspanderende hjelpetekstTextinput med valgfritt-tag

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
Default state textinputHover state textinputFocus state textinputActive state textinputError state textinputDisabled state textinput

Størrelser

Text input kan brukes i tre ulike størrelser:

StørrelserBruk
Medium (default)Standard, og skal brukes som hovedregel
SmallFor trange flater, som tabeller og kompakte skjema
XSmallFor ekstra trange flater, som kompakte tabeller og informasjonstette fagsystemer
Eksempel på text input i forskjellige størrelser

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

Skriv tydelig og konsise labels

Unngå

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

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

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.

Textinput med valgfritt-tagTextinput med 'må fylles ut'-tag

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.

Eksempeler på prefiks og suffiks

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
Textinput 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
Anatomi for Textinput

Implementasjon i kode

Hvordan ta komponenten i bruk?

import @oslokommune/punkt-elements/dist/pkt-textinput.js;
import { PktTextinput } from '@oslokommune/punkt-react';
<script src="https://punkt-cdn.oslo.kommune.no/19/elements/pkt-textinput.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-textinput");

Egenskaper

PktTextinput

Props

Prop:
label?
Type:
string
Beskrivelse:
Tekst som vises over feltet
Prop:
name
Type:
string
Beskrivelse:
Navn som brukes i skjema ved innsending
Prop:
form?
Type:
string
Beskrivelse:
ID-en til skjemaet feltet hører til, når feltet ligger utenfor skjemaet
Prop:
placeholder?
Type:
string
Beskrivelse:
Spesifiserer en kort hint som beskriver forventet verdi av feltet.
Prop:
helptext?
Type:
string
Beskrivelse:
Hjelpetekst som vises over feltet
Prop:
helptextDropdown?
Type:
string
Beskrivelse:
Hjelpetekst som vises i en lukket boks man kan åpne
Prop:
helptextDropdownButton?
Type:
string
Standardverdi:
"Les mer"
Beskrivelse:
Tekst som vises på knappen for å åpne/lukke utvidet hjelpetekst
Prop:
size?
Type:
number
Beskrivelse:
Spesifiserer bredde på feltet i antall tegn.
Prop:
type?
Type:
"color" | "date" | "datetime-local" | "email" | "file" | "month" | "number" | "password" | "search" | "tel" | "text" | "time" | "url" | "week"
Standardverdi:
"text"
Beskrivelse:
Spesifiserer typen av feltet. Standard er 'text'.
Prop:
omitSearchIcon?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer om søkeikonet skal utelates.
Prop:
value?
Type:
string
Beskrivelse:
Spesifiserer den nåværende verdien av feltet.
Prop:
autocomplete?
Type:
string
Standardverdi:
"off"
Beskrivelse:
Spesifiserer hvordan type autocomplete feltet har. Standard er 'off'.
Prop:
suffix?
Type:
string
Beskrivelse:
Spesifiserer et suffiks som vises etter feltet.
Prop:
prefix?
Type:
string
Beskrivelse:
Spesifiserer et prefiks som vises før feltet.
Prop:
iconNameRight?
Type:
icon
Beskrivelse:
Spesifiserer navnet på ikonet som vises til høyre for feltet.
Prop:
ariaLabelledby?
Type:
string
Beskrivelse:
Spesifiserer ID-en til elementet som beskriver feltet.
Prop:
ariaDescribedby?
aria-describedby?
Type:
string
Beskrivelse:
Spesifiserer ID-en til elementet som beskriver feltet.
Prop:
required?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Er feltet påkrevd?
Prop:
requiredTag?
Type:
boolean
Beskrivelse:
Indikerer om feltet er påkrevd.
Prop:
requiredText?
Type:
string
Standardverdi:
"Må fylles ut"
Beskrivelse:
Tekst som vises i påkrevd-merkingen
Prop:
optionalTag?
Type:
boolean
Beskrivelse:
Indikerer om feltet er valgfritt.
Prop:
optionalText?
Type:
string
Standardverdi:
"Valgfritt"
Beskrivelse:
Tekst som vises i valgfritt-merkingen
Prop:
tagText?
Type:
string
Beskrivelse:
Tekst som vises i en tag ved siden av label
Prop:
hasError?
Type:
boolean
Beskrivelse:
Indikerer om feltet har en feil.
Prop:
errorMessage?
Type:
string
Beskrivelse:
Tekst som vises under datovelgeren ved feiltilstand
Prop:
disabled?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer om feltet er deaktivert.
Prop:
inline?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer om feltet skal vises inline.
Prop:
fullwidth?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Indikerer om feltet skal ta opp full bredde.
Prop:
useWrapper?
Type:
boolean
Standardverdi:
true
Beskrivelse:
Indikerer at feltet skal ha synlig label og hjelpetekst
Prop:
id
Type:
string
Beskrivelse:
Spesifiserer den unike identifikatoren for feltet.
Prop:
counter?
Type:
boolean
Beskrivelse:
Viser teller under feltet. Slås på av seg selv når det finnes en grense å telle mot; sett til false for å skru den av.
Prop:
counterMaxLength?
Type:
number
Beskrivelse:
Spesifiserer maksimal lengde for telleren.
Prop:
inputSize?
input-size?
Type:
"small" | "medium" | "xsmall"
Standardverdi:
"medium"
Beskrivelse:
Visuell størrelse via input-wrapper.
Prop:
hasFieldset?
Type:
boolean
Beskrivelse:
Bruk fieldset og legend i stedet for label.

Events

Event:
change
Type:
Event
Beskrivelse:
Returnerer verdi som streng
Event:
toggleHelpText
Type:
CustomEvent
Beskrivelse:
Returnerer event.detail { isOpen: true } eller event.detail { isOpen: false } når hjelpeteksten åpnes eller lukkes