Komponenter
Checkbox
Checkbox gir brukerne mulighet til å velge ett eller flere alternativer. Den kan også brukes i tilfeller der brukeren skal bekrefte noe.
React
const Preview = () => { return ( <Checkbox label='Checkbox label' description='Description' value='value' /> ); }; render(<Preview />)
Bruk Checkbox når
- brukeren skal kunne velge ett eller flere alternativer innenfor samme kontekst
- brukeren skal akseptere vilkår og betingelser
Unngå Checkbox når
- brukeren kun skal velge ett alternativ, bruk heller en
Radio - brukeren må velge mellom mer enn sju alternativer, bruk heller en
SelectellerSuggestion - noe skal slåes av eller på, bruk heller en
Switch
Eksempel
Bekrefting med Checkbox
Hvis brukeren skal bekrefte noe, men ikke velge noe, kan en Checkbox stå alene. For eksempel når brukeren skal bekrefte at noe er riktig, eller samtykke til vilkår.
En Checkbox for samtykke skal alltid kreve en aktiv handling, du skal aldri forhåndsvelge boksen. Dette sikrer at samtykket er gitt frivillig.
React
const OneOption = () => ( <Fieldset> <Fieldset.Legend>Bekreft at du er over 18 år</Fieldset.Legend> <Fieldset.Description> For at vi skal kunne sende deg opplysningen du ber om, må du bekrefte at du er myndig. </Fieldset.Description> <Checkbox label='Jeg bekrefter at jeg er over 18 år' value='samtykke' /> </Fieldset> ); render(<OneOption />)
Gruppering
De aller fleste ganger brukes Checkbox i grupper, der brukeren kan velge flere alternativer. <fieldset> som er rundt gruppen burde ha en tittel som forklarer hva valgene handler om.
React
const Group = () => { const [value, setValue] = useState<string[]>(['epost']); return ( <Fieldset> <Fieldset.Legend> Hvordan vil du helst at vi skal kontakte deg? </Fieldset.Legend> <Fieldset.Description> Velg alle alternativene som er relevante for deg. </Fieldset.Description> <Checkbox label='E-post' value='epost' checked={value.includes('epost')} onChange={(e) => { if (e.target.checked) { setValue([...value, 'epost']); } else { setValue(value.filter((v) => v !== 'epost')); } }} /> <Checkbox label='Telefon' value='telefon' checked={value.includes('telefon')} onChange={(e) => { if (e.target.checked) { setValue([...value, 'telefon']); } else { setValue(value.filter((v) => v !== 'telefon')); } }} /> <Checkbox label='SMS' value='sms' checked={value.includes('sms')} onChange={(e) => { if (e.target.checked) { setValue([...value, 'sms']); } else { setValue(value.filter((v) => v !== 'sms')); } }} /> </Fieldset> ); }; render(<Group />)
Med feil
Når Checkbox brukes i grupper, skal feilmeldingen vises på Fieldset, så den blir samlet for hele gruppen.
React
const WithError = () => { const [error, setError] = useState(''); const { getCheckboxProps, validationMessageProps, value } = useCheckboxGroup({ value: ['epost'], error, }); useEffect(() => { if (value.length < 2) { setError('Du må velge minst to alternativ'); } else { setError(''); } }, [value]); return ( <Fieldset> <Fieldset.Legend> Hvordan vil du helst at vi skal kontakte deg? </Fieldset.Legend> <Fieldset.Description> Velg alle alternativene som er relevante for deg. </Fieldset.Description> <Checkbox label='E-post' {...getCheckboxProps('epost')} /> <Checkbox label='Telefon' {...getCheckboxProps('telefon')} /> <Checkbox label='SMS' {...getCheckboxProps('sms')} /> <ValidationMessage {...validationMessageProps} /> </Fieldset> ); }; render(<WithError />)
Skrivebeskyttet Checkbox
Checkbox støtter readOnly-attributtet for å gjøre feltet skrivebeskyttet, og gir en visuell indikasjon som skiller seg fra redigerbare felter. Selv om de ikke kan redigeres, er felter med readOnly-attributtet med i tabrekkefølgen, og informasjon blir med når skjemaet sendes inn.
Vi unngår readOnly så langt det lar seg gjøre, fordi slike felter kan være forvirrende for noen brukere. Ikke alle vil forstå hvorfor de ikke får til å endre innholdet i feltet.
React
const ReadOnly = () => { const { getCheckboxProps, validationMessageProps } = useCheckboxGroup({ value: ['epost'], readOnly: true, }); return ( <Fieldset> <Fieldset.Legend> Hvordan vil du helst at vi skal kontakte deg? </Fieldset.Legend> <Fieldset.Description> Velg alle alternativene som er relevante for deg. </Fieldset.Description> <Checkbox label='E-post' {...getCheckboxProps('epost')} /> <Checkbox label='Telefon' {...getCheckboxProps('telefon')} /> <Checkbox label='SMS' {...getCheckboxProps('sms')} /> <ValidationMessage {...validationMessageProps} /> </Fieldset> ); }; render(<ReadOnly />)
Disabled
Vi bør unngå at Checkbox er deaktivert (disabled) fordi det kan være vanskelig å oppfatte. Noen brukere vil ikke forstå hva valget sier eller hvorfor det ikke er klikkbart.
Hvis en Checkbox eller gruppe med Checkbox ikke er relevant, bør du helst fjerne valgene fremfor å deaktivere dem. Tilby gjerne brukeren informasjon om hvorfor valgene ikke er tilgjengelige.
Nav har en god forklaring på hvorfor deaktiverte tilstander er problematisk (nav.no) og hvilke alternativer som finnes.
React
const Disabled = () => { const { getCheckboxProps, validationMessageProps } = useCheckboxGroup({ value: ['epost'], disabled: true, }); return ( <Fieldset> <Fieldset.Legend> Hvordan vil du helst at vi skal kontakte deg? </Fieldset.Legend> <Fieldset.Description> Velg alle alternativene som er relevante for deg. </Fieldset.Description> <Checkbox label='E-post' {...getCheckboxProps('epost')} /> <Checkbox label='Telefon' {...getCheckboxProps('telefon')} /> <Checkbox label='SMS' {...getCheckboxProps('sms')} /> <ValidationMessage {...validationMessageProps} /> </Fieldset> ); }; render(<Disabled />)
Retningslinjer
Bruk Checkbox når brukeren kan velge ett eller flere alternativer.
Sorter alternativene
Sorter svaralternativene alfabetisk hvis det ikke er en god grunn til å gjøre noe annet. Vær forsiktig med å la det mest brukte svaralternativet stå først hvis det er et personlig spørsmål eller et verdispørsmål, som for eksempel legning eller partitilhørighet.
Plassering
Plasser helst svaralternativene vertikalt. Da blir det lettere å skanne listen og lese alternativene. For brukere som må forstørre teksten, er horisontale lister utfordrende.
Gjør slik
Unngå dette
Tekst
- Ledeteksten skal henge godt sammen med svaralternativene. Tenk på teksten som en samtale, og bruk du-form i ledeteksten og jeg-form i alternativene.
- Få frem at brukerne kan velge flere alternativer, og presiser det hvis de bare kan velge et begrenset antall alternativer.
- Svaralternativene skal alltid ha stor forbokstav.