Skip to main content

Select

Select lar brukeren velge ett alternativ fra en nedtrekksliste. Komponenten skjuler alternativene til brukeren åpner listen, og brukes når det ikke er nødvendig å vise alle valg samtidig.

Egnet til

  • Når brukeren skal velge ett alternativ fra en liste
  • Lister med mange alternativer der det ikke er plass til å vise alle
  • Valg som er kjent eller enkle å kjenne igjen
  • Tette skjemaer der en radiogruppe tar for mye plass

Uegnet til

  • Korte lister med få alternativer (bruk RadioGroup)
  • Når brukeren må sammenligne alternativene — en lukket liste viser bare ett om gangen
  • Når alternativene er komplekse eller krever forklaring

Bruk

Laster...

Prøv å legge til flere alternativer i options-arrayen.

Eksempler

Med hjelpetekst

Laster...

Med grupperte alternativer

Bruk optgroup for å gruppere relaterte alternativer. Dette gjør lange lister lettere å navigere.

Laster...

Med feilmelding

Laster...

Prøv å tømme errorMessage. aria-invalid fjernes automatisk.

Med tooltip

Laster...

Deaktivert

Laster...

Med deaktivert alternativ

Laster...

Retningslinjer

Bruk select når listen tåler å være skjult

Select tar plassen til ett felt uansett hvor mange alternativer det er, og det er hele styrken i tette skjemaer. Prisen er at brukeren må åpne listen for å se valgene. Med tre eller fire alternativer er RadioGroup bedre: alt ligger synlig og kan sammenlignes med øyet.

Vis valgt verdi i det lukkede feltet

Feltet skal svare på "hva står det nå?" uten at listen åpnes. Bruker du et placeholder-alternativ øverst, må teksten si at ingenting er valgt ennå. "Velg land" er tydelig, et blankt felt er ikke.

Sorter listen slik brukeren leter

Alfabetisk rekkefølge er utgangspunktet i lange lister. Er noen få alternativer mye vanligere enn resten, legg dem i en egen <optgroup> øverst, så slipper brukeren å scrolle etter det opplagte svaret.

Grupper lange lister med optgroup

Fylker, kontotyper, år: deler du listen i navngitte grupper, leter brukeren i én bolk i stedet for i femti linjer. Gi hver <optgroup> en label som sier hva den samler.

Hold alternativene på én linje

Et alternativ er en kort tekst, ikke en forklaring. Trenger valgene utfyllende tekst, bruk Combobox, der hvert alternativ kan ha en beskrivelse under navnet.

Universell utforming

Hva du selv må sørge for

  • Beskrivende labeltekst: komponenten kobler label til feltet, men du skriver teksten. «Land» eller «Foretrukket kontaktmetode», ikke «Velg et alternativ»
  • Option-tekster som gir mening: skjermleseren leser teksten, ikke value. «Norge», ikke «NO»
  • optgroup når listen er lang: grupper relaterte alternativer. Skjermleseren annonserer «[gruppenavn], gruppe» før alternativene i gruppen
  • Gode feilmeldinger: komponenten viser og annonserer dem, men du skriver innholdet. «Du må velge et land», ikke «Ugyldig valg»
  • Unngå disabled: et deaktivert felt sier ikke hvorfor det er deaktivert. Se Deaktiverte tilstander for alternativene

Hva komponenten gjør automatisk

Select er et native <select>, så nettleseren eier nedtrekkslisten — på mobil åpnes plattformens egen velger. Tastaturoppførselen er derfor ikke noe vi har implementert, den er den brukeren kjenner fra alle andre select-felt. Den står i tabellen under.

Resten settes opp av <ix-field>:

  • for/id: label kobles til feltet, med generert ID hvis du ikke oppgir en
  • aria-describedby: feltet peker til description og feilmelding, i den rekkefølgen
  • aria-invalid: settes når feilmeldingen har innhold, og fjernes når den tømmes
  • aria-live="polite" på feilmeldingen, slik at en ny melding annonseres uten å avbryte brukeren
  • placeholder rendres som et disabled førstevalg med tom value, ikke som grå tekst i feltet. Brukeren kan derfor ikke velge det tilbake etter å ha valgt noe
  • 44 px høyde via min-height.ix-select (WCAG 2.5.8)
  • Fokusring:focus-visible (WCAG 2.4.7)

Skjermleseren annonserer feltet som «kombinasjonsboks». Det er den implisitte rollen native <select> har, ikke noe vi setter.

Tastaturnavigasjon

TastHandling
TabFlytter fokus til select-feltet
Shift+TabFlytter fokus til forrige fokuserbare element
Enter / SpaceÅpner nedtrekkslisten
Arrow Up/DownNavigerer mellom alternativer i listen
EnterVelger markert alternativ og lukker listen
EscapeLukker listen uten å endre valg
HomeGår til første alternativ
EndGår til siste alternativ
BokstavHopper til første alternativ som starter med bokstaven

Skjermleser

  • Ved fokus: "[label], kombinasjonsboks, [valgt verdi]"
  • Med hjelpetekst: "[label], kombinasjonsboks, [valgt verdi], [hjelpetekst]"
  • Ved feil: "[label], ugyldig, kombinasjonsboks, [valgt verdi], [feilmelding]"
  • Med optgroup: grupper annonseres med "[gruppenavn], gruppe" før alternativene i gruppen
  • Ved navigering i listen: "[alternativ], [posisjon] av [total]"
  • Disabled alternativ: "[alternativ], nedtonet"

WCAG-kriterier

Sist gjennomgått: 2026-05-18 — alle 56 WCAG 2.2-kriterier vurdert

WCAG-kriterier6 ditt ansvar · 17 håndtert · 33 ikke relevant · 0 ikke på plass
Ditt ansvar (6)
KriteriumNivåHva du må gjøre
2.4.6 Overskrifter og ledeteksterAASkriv beskrivende labeltekst. Labelen skal forklare hva brukeren skal velge — ikke handlingen. "Land" eller "Foretrukket kontaktmetode" er bedre enn "Velg et alternativ". Alle select-felter må ha en label, enten synlig eller via ariaLabel.
3.3.2 Ledetekster eller instruksjonerASkriv beskrivende labeltekst. Labelen skal forklare hva brukeren skal velge — ikke handlingen. "Land" eller "Foretrukket kontaktmetode" er bedre enn "Velg et alternativ". Alle select-felter må ha en label, enten synlig eller via ariaLabel.
3.3.1 Identifikasjon av feilASkriv gode feilmeldinger. Feilmeldingen må si hva som er galt og hva brukeren skal gjøre. "Du må velge et land" — ikke "Ugyldig valg". Komponenten viser og annonserer meldingen, men du skriver innholdet.
3.3.3 Forslag ved feilAASkriv gode feilmeldinger. Feilmeldingen må si hva som er galt og hva brukeren skal gjøre. "Du må velge et land" — ikke "Ugyldig valg". Komponenten viser og annonserer meldingen, men du skriver innholdet.
2.4.6 Overskrifter og ledeteksterAABruk meningsfulle option-tekster. Hvert alternativ skal ha en tydelig og beskrivende tekst. Unngå forkortelser eller koder som ikke gir mening for brukeren. "Norge" er bedre enn "NO".
1.3.1 Informasjon og relasjonerAGrupper relaterte alternativer med optgroup. Når listen inneholder mange alternativer, bruk optgroup for å gruppere relaterte valg. Dette gjør det lettere å navigere og forstå strukturen.
Håndtert av komponenten (17)
KriteriumNivåHva komponenten gjør
1.3.1 Informasjon og relasjonerALabel kobles til select via for/id. Hjelpetekst og feilmelding kobles via aria-describedby. Optgroup gir semantisk gruppering.
1.3.2 Meningsfull rekkefølgeALabel, select, hjelpetekst og feilmelding følger naturlig rekkefølge i DOM.
1.3.3 Sensoriske egenskaperAFeiltilstand bruker tekst, farge og aria-invalid — ikke farge alene.
1.4.1 Bruk av fargeAFeiltilstand kommuniseres med farge, rammeendring og tekstlig feilmelding.
1.4.4 Endre tekststørrelseAARelative enheter — skalerer korrekt ved 200 % zoom.
1.4.10 OmflytAAReflower korrekt ned til 320px viewport.
1.4.11 Kontrast for ikke-tekstlig innholdAARamme og fokusindikator oppfyller 3:1 kontrastkrav.
1.4.12 TekstavstandAATåler økt line-height, bokstav- og ordavstand uten tap av innhold.
1.4.13 Innhold ved hover eller fokusAAHjelpetekst er persistent — forsvinner ikke ved fokusflytt.
2.1.1 TastaturAFullt opererbart med tastatur. Native select gir Tab, Enter/Space for å åpne, piltaster for navigering, Enter for valg, Escape for å lukke.
2.1.2 Ingen tastaturfelleAFokus kan navigeres ut med Tab og Shift+Tab. Ingen tastaturfelle.
2.4.3 FokusrekkefølgeAFølger naturlig tab-rekkefølge i DOM.
2.4.7 Synlig fokusAATydelig fokusindikator med god kontrast.
2.5.8 Målstørrelse (minimum)AASelect-feltet oppfyller minimum 44px klikkflate.
3.2.1 Ved fokusAFokus trigger ingen kontekstendring.
3.2.2 Ved inndataAValg trigger ingen automatisk kontekstendring med mindre onChange eksplisitt gjør det.
4.1.2 Navn, rolle, verdiANative select med implisitt combobox-rolle. Tilgjengelig navn fra label. Tilstander (valgt alternativ, disabled) eksponeres korrekt.
Ikke relevant (33)
KriteriumNivåHvorfor ikke relevant
1.1.1 Ikke-tekstlig innholdAIngen bilder eller ikoner i komponenten.
1.2.1 Bare lyd og bare video (forhåndsinnspilt)AIngen medieelementer.
1.2.2 Teksting (forhåndsinnspilt)AIngen medieelementer.
1.2.3 Synstolking eller mediealternativ (forhåndsinnspilt)AIngen medieelementer.
1.2.4 Teksting (direkte)AAIngen medieelementer.
1.2.5 Synstolking (forhåndsinnspilt)AAIngen medieelementer.
1.3.4 VisningsretningAAIngen fast orientering — tilpasser seg visningsretning.
1.3.5 Identifiser formål med inndataAAIkke et felt for personlig informasjon — autocomplete gjelder ikke.
1.4.2 Styring av lydAIngen lydelementer.
1.4.5 Bilder av tekstAAIngen bilder av tekst.
2.1.4 TastatursnarveierAIngen egendefinerte tastatursnarveier.
2.2.1 Justerbar hastighetAIngen tidsbegrensede funksjoner.
2.2.2 Pause, stopp, skjulAIngen animasjon eller automatisk oppdatering.
2.3.1 Terskelverdi på tre glimtAIngen blinkende eller glimtende innhold.
2.4.1 Hoppe over blokkerASidekrav — gjelder ikke enkeltkomponenter.
2.4.2 SidetitlerASidekrav — gjelder ikke enkeltkomponenter.
2.4.4 Formål med lenke (i kontekst)AIngen lenker i komponenten.
2.4.5 Flere måterAASidekrav — gjelder ikke enkeltkomponenter.
2.4.11 Fokus ikke skjult (minimum)AAIngen sticky/overlappende elementer som kan skjule fokus.
2.5.1 PekerbevegelserAIngen drag-and-drop eller sveipebevegelser.
2.5.2 Avbryt pekerANative select-element — nettleseren håndterer pekerinteraksjon.
2.5.4 BevegelsesaktiveringAIngen bevegelsesbasert interaksjon.
2.5.6 Samtidige inndatamekanismerAIngen bevegelsesaktivering.
2.5.7 DrabevegelserAIngen drag-and-drop.
3.1.1 Språk på sidenASidekrav — gjelder ikke enkeltkomponenter.
3.1.2 Språk på deler av innholdAAKomponenten setter ikke lang-attributt — innhold er på sidespråket.
3.2.3 Konsistent navigasjonAASidekrav — gjelder ikke enkeltkomponenter.
3.2.4 Konsistent identifikasjonAASystemkrav — gjelder konsistens på tvers av sider, ikke enkeltkomponenter.
3.2.6 Konsistent hjelpASidekrav — gjelder plassering av hjelpefunksjon på tvers av sider.
3.3.4 Forhindring av feil (juridisk, økonomisk, data)AAFlytkrav — gjelder bekreftelse/reversering av transaksjoner, ikke enkeltfelter.
3.3.7 Redundant oppføringAFlytkrav — gjelder at brukeren ikke skal gjenta informasjon i en prosess.
3.3.8 Tilgjengelig autentisering (minimum)AAIkke en autentiseringskomponent.
4.1.3 StatusmeldingerAAFeilmeldinger håndteres via aria-live="polite". Ingen øvrige statusmeldinger.

Props / API

SelectProps

PropTypePåkrevdStandardBeskrivelse
labelstringNei*Synlig labeltekst for feltet. Anbefalt fremfor ariaLabel
ariaLabelstringNei*Skjult label for skjermlesere. Brukes kun når synlig label ikke er mulig. *Enten label eller ariaLabel må settes
descriptionstringNeiHjelpetekst som vises under label. Kobles til select via aria-describedby
errorMessagestringNeiFeilmelding som vises under select. Trigger aria-invalid når den har innhold
placeholderstringNeiPlaceholder-tekst som vises som første (disabled) alternativ
options(SelectOption | SelectOptionGroup)[]Nei[]Liste med alternativer eller grupper av alternativer
classNamestringNeiCSS-klasse på ytterste wrapper (.ix-field)
refRef<HTMLSelectElement>NeiRef videresendes til <select>-elementet

I tillegg støttes alle standard HTML select-attributter (value, defaultValue, onChange, onBlur, disabled, required, id, name osv.) som settes direkte på komponenten.

SelectOption

PropTypePåkrevdBeskrivelse
valuestringJaVerdien som sendes ved valg
labelstringJaTeksten som vises for alternativet
disabledbooleanNeiGjør alternativet utilgjengelig for valg

SelectOptionGroup

PropTypePåkrevdBeskrivelse
labelstringJaOverskriften for gruppen
optionsSelectOption[]JaAlternativene i gruppen

Tilpasning med CSS

Tilgjengelige klasser og selektorer

ElementSelektor
Select-felt.ix-select
Label.ix-label
Hjelpetekst[data-field="description"]
Feilmelding[data-field="error"]

Relatert

  • Combobox — for lange lister der brukeren bør kunne søke
  • Label — labeltekst for feltet
  • TextField — for fritekst-input
  • TextArea — for lengre fritekst