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
  • Situasjoner der det er viktig å spare plass i grensesnittet

Uegnet til

  • Korte lister med få alternativer (bruk radio-knapper)
  • Når det er viktig å sammenligne alternativer før valg
  • Når alternativene er komplekse eller krever forklaring
  • Situasjoner der brukeren bør se alle valg samtidig

Kom i gang

Result
Loading...
Kode
Live Editor
<Select
  label="Land"
  placeholder="Velg land..."
  options={[
    { value: 'no', label: 'Norge' },
    { value: 'se', label: 'Sverige' },
    { value: 'dk', label: 'Danmark' },
  ]}
/>

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

Eksempler

Med hjelpetekst

Result
Loading...
Kode
Live Editor
<Select
  label="Foretrukket kontaktmetode"
  description="Vi bruker dette for å sende deg viktig informasjon"
  placeholder="Velg..."
  options={[
    { value: 'email', label: 'E-post' },
    { value: 'sms', label: 'SMS' },
    { value: 'phone', label: 'Telefon' },
  ]}
/>

Med grupperte alternativer

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

Result
Loading...
Kode
Live Editor
<Select
  label="Velg land"
  placeholder="Velg..."
  options={[
    {
      label: 'Norden',
      options: [
        { value: 'no', label: 'Norge' },
        { value: 'se', label: 'Sverige' },
        { value: 'dk', label: 'Danmark' },
      ],
    },
    {
      label: 'Europa',
      options: [
        { value: 'de', label: 'Tyskland' },
        { value: 'fr', label: 'Frankrike' },
        { value: 'es', label: 'Spania' },
      ],
    },
  ]}
/>

Med feilmelding

Result
Loading...
Kode
Live Editor
<Select
  label="Land"
  placeholder="Velg land..."
  errorMessage="Du må velge et land for å fortsette"
  options={[
    { value: 'no', label: 'Norge' },
    { value: 'se', label: 'Sverige' },
    { value: 'dk', label: 'Danmark' },
  ]}
/>

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

Med tooltip

Result
Loading...
Kode
Live Editor
<Select
  label="Bostedsland"
  tooltip="Vi trenger denne informasjonen for å beregne skatt"
  tooltipLabel="Mer informasjon om Bostedsland"
  placeholder="Velg..."
  options={[
    { value: 'no', label: 'Norge' },
    { value: 'se', label: 'Sverige' },
    { value: 'dk', label: 'Danmark' },
  ]}
/>

Deaktivert

Result
Loading...
Kode
Live Editor
<Select
  label="Land"
  disabled
  defaultValue="no"
  options={[
    { value: 'no', label: 'Norge' },
    { value: 'se', label: 'Sverige' },
  ]}
/>

Med deaktivert alternativ

Result
Loading...
Kode
Live Editor
<Select
  label="Leveringsmetode"
  placeholder="Velg..."
  options={[
    { value: 'standard', label: 'Standard levering (3–5 dager)' },
    { value: 'express', label: 'Ekspress (ikke tilgjengelig)', disabled: true },
    { value: 'pickup', label: 'Hent i butikk' },
  ]}
/>

Retningslinjer

Tydelige labels gir forutsigbarhet

Alle select-felter skal ha en synlig og beskrivende label. Labelen skal beskrive hvilken informasjon feltet gjelder, ikke hva brukeren skal gjøre.

For eksempel bør man skrive "Land" i stedet for "Velg land". Når labelen beskriver selve dataen, blir det enklere å forstå hva som forventes.

Dette gjør skjemaet lettere å skanne og reduserer behovet for ekstra forklaring.

Bruk select når plass eller antall tilsier det

Select egner seg når det er mange alternativer, eller når det ikke er nødvendig å vise alle samtidig. Ved å skjule listen reduseres visuell støy, og grensesnittet blir mer kompakt.

For korte lister er det ofte bedre å bruke radio-knapper, siden de gir bedre oversikt og gjør det enklere å sammenligne valgene.

Valgt verdi må alltid være tydelig

Når listen er lukket, skal det være tydelig hvilket alternativ som er valgt. Brukeren skal ikke være i tvil om hva som er gjeldende verdi.

Dersom det brukes placeholder, må det være tydelig at dette ikke er et valgt alternativ.

Rekkefølge påvirker hvor lett det er å finne frem

Alternativene bør som hovedregel sorteres alfabetisk, slik at brukeren raskt kan finne det de leter etter.

I noen tilfeller kan det være mer hensiktsmessig å prioritere de mest relevante eller brukte valgene øverst, særlig i lange lister.

Gruppering gir bedre oversikt

Dersom listen inneholder mange alternativer, bør disse grupperes logisk (for eksempel med optgroup). Dette gjør det enklere å orientere seg og finne riktig valg.

Unngå komplekst innhold i alternativer

Alternativene i en select bør være korte og enkle å forstå. Lange tekster eller komplekse beskrivelser gjør det vanskeligere å skanne listen og ta et valg.

Dersom alternativene krever mer forklaring, bør man vurdere en annen komponent.

Interaksjon skal være forutsigbar

Når brukeren åpner listen og velger et alternativ, skal listen lukkes og verdien oppdateres umiddelbart.

Brukeren skal kunne navigere med tastatur og enkelt endre valget uten unødvendige steg.

Tilgjengelighet / universell utforming

Semantisk struktur og korrekt rolle

Select skal implementeres med korrekt HTML (<select>) eller med riktig ARIA-roller dersom det er en custom komponent. Dette sikrer at hjelpemidler forstår hvordan komponenten fungerer.

Alle select-felter må ha en programmessig koblet label.

Label må være tilgjengelig

Select skal alltid ha en tydelig label som beskriver hva brukeren skal velge. Skjermlesere bruker denne for å gi kontekst til feltet.

Uten en god label blir det vanskelig å forstå hva valget gjelder.

Tydelig fokus og tastaturnavigasjon

Select må være fullt opererbar med tastatur. Brukeren skal kunne navigere til feltet med Tab, åpne listen med Enter eller Space, og navigere mellom alternativer med piltaster.

Fokusindikatoren må være tydelig og ha god kontrast.

Tilstrekkelig størrelse og klikkeflate

Select-feltet må ha tilstrekkelig størrelse (minimum 44px høyde) for å være enkelt å bruke, spesielt på touch-enheter.

Vær bevisst på bruk av disabled

Bruk av disabled state frarådes. Et deaktivert felt kan være vanskelig å forstå uten forklaring.

Vurder om feltet heller bør skjules, vises som ren tekst, eller settes til readOnly.

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