Select
Release dato: 19.09.2023
Sist oppdatert: 07.07.2025
Select (nedtrekksliste) lar brukeren velge ett enkelt alternativ fra en liste. Den brukes når du har mange valg, men ikke plass eller behov for å vise alle samtidig.
Formålet med komponenten er å gjøre det enkelt å velge riktig alternativ uten at det tar unødvendig plass i et skjema eller løsning.
Live demo
Relaterte komponenter
Når brukeren kan velge flere alternativer
Når det er få valg og man kun skal velge ett
Når brukeren kan skrive for å søke etter alternativer
Varianter
Innhold
Type | Beskrivelse |
---|---|
Standard | Label, placeholder og valgliste |
Med hjelpetekst | Kort hjelpetekst under feltet |
Med ekspanderende hjelpetekst | Hjelpetekst bak “Les mer”-knapp |
Valgfritt-tag/obligatorisk tag | Viser enten “Valgfritt” eller “Må fylles ut” ved siden av label |
Select 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:
Type | 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
Bruk select når
- du skal presentere mange alternativ der bare ett kan velges
- du ønsker å unngå at lange lister med alternativer blir overveldende
- du trenger å få plass til flere alternativer på liten plass
Unngå select når
- du har få valg og god plass (bruk heller radio button)
- brukeren kan velge mer enn ett alternativ (bruk heller checkbox)
- du har strukturerte alternativer med nok plass er det bedre å liste ut alle valgene
Antall og tilgjengelighet
Select fungerer best når du har mange alternativer, men bare ett skal velges. Har du færre enn fem valg, er radioknapper ofte bedre fordi valgene blir mer synlige og enklere å sammenligne.
Lange lister kan være utfordrende for brukere med skjermleser, og det finnes kjente tilgjengelighetsproblemer med select-komponenten (les mer under “Research about this component” på gov.uk).
Vurder om du kan forenkle spørsmålet slik at det blir færre alternativer. Hvis det gir mening, bruk radio button for å gi en bedre opplevelse.
Gjør slik
Unngå
Sortering av alternativer
Det er viktig å liste ut elementene dine på en oversiktlig måte, om det så er alfabetisk, tidsbasert eller en annen logisk rekkefølge.
Gjør slik
Unngå
Bruk select til riktig formål
Select passer best til ryddige, relaterte lister. Ikke bruk den til å velge innhold som egentlig krever et annet format, som adresse eller telefonnummer.
Gjør slik
Unngå
Label, hjelpetekst og plassholder
En label skal være kort og presis, helst mellom ett og tre ord. Unngå kolon på slutten og bruk verken kun store eller kun små bokstaver.
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.
Les mer om innhold i skjemaelementer i input wrapper-dokumentasjonen og om god praksis for skjemaer.
Responsivitet
Select tilpasser seg automatisk tilgjengelig plass og bryter linjer der det er nødvendig. Test alltid på ulike skjermstørrelser og zoom-nivåer at det fortsatt er enkelt å navigere med tastatur og skjermleser.
Universell utforming
- Alle felt skal ha en tilknyttet label, også hvis den skjules visuelt (
pkt-sr-only
). - Feilmeldinger skal være kodet som tekst og knyttet til det spesifikke feltet.
- Select kan være utfordrende for skjermlesere ved veldig lange lister, vurder alternativer som radio button eller comboboxcombobox om det gir bedre opplevelse.
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 nedtrekkslisten der brukeren velger et alternativ |
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-select.js;
import { PktSelect } from '@oslokommune/punkt-react';
<script src="https://punkt-cdn.oslo.kommune.no/latest/elements/pkt-select.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-select");
Props and tokens
Prop | Type | Beskrivelse |
---|---|---|
label | string | Tekst som vises over feltet |
requiredTag | boolean | Viser en merking som indikerer at feltet er påkrevd |
requiredText | string | Tekst som vises i påkrevd-merkingen |
optionalTag | boolean | Viser en merking som indikerer at feltet er valgfritt |
optionalText | string | Tekst som vises i valgfritt-merkingen |
tagText | string | Tekst som vises i en tag ved siden av label |
hasError | boolean | Angir om feltet har feil |
errorMessage | string | Feilmelding som vises under feltet |
helptext | string | Hjelpetekst som vises over feltet |
helptextDropdown | string | Hjelpetekst som vises i en lukket boks man kan åpne |
helptextDropdownButton | string | Tekst som vises på knappen for å åpne/lukke utvidet hjelpetekst |
name | string | Navn på feltet |
id | string | Id på feltet |
value | string | Verdi på feltet |
disabled | boolean | Angir om feltet er disabled |
inline | boolean | Angir om feltet skal vises i en linje |
fullwidth | boolean | Angir om feltet skal ta full bredde |
ariaDescribedBy | string | Spesifiserer ID-en til elementet som beskriver feltet |
ariaLabelledby | string | Spesifiserer ID-en til elementet som navigerer til feltet |
Slot (children) | Beskrivelse |
---|---|
default | Option elements for select component |
Farger
Element | CSS variabel |
---|---|
Border | |
Text | |