Komponenter
Checkbox
Checkbox gir brukerne mulighet til å velge ett eller flere alternativer. Den kan også brukes i tilfeller der brukeren skal bekrefte noe.
React
Unable to parse html
const Preview = () => { return ( <Checkbox label='Checkbox label' description='Description' value='value' /> ); }; render(<Preview />)
- disabled
- Description
Disables element @note Avoid using if possible for accessibility purposes
- Type
boolean
- readOnly
- Description
Toggle `readOnly`
- Type
boolean
- aria-label
- Description
Optional aria-label
- Type
string
- label
- Description
Checkbox label
- Type
ReactNode
- description
- Description
Description for field
- Type
ReactNode
- value
- Description
Value of the `input` element
- Type
string | number | readonly string[]
- error
- Description
Error message for field
- Type
ReactNode
- aria-labelledby
- Type
string
| Name | Type | Default | Description |
|---|---|---|---|
| disabled | boolean | - | Disables element @note Avoid using if possible for accessibility purposes |
| readOnly | boolean | - | Toggle `readOnly` |
| aria-label | string | - | Optional aria-label |
| label | ReactNode | - | Checkbox label |
| description | ReactNode | - | Description for field |
| value | string | number | readonly string[] | - | Value of the `input` element |
| error | ReactNode | - | Error message for field |
| aria-labelledby | string | - | - |
Bruk
Eksempler
Gruppering
Bruk Fieldset og useCheckboxGroup for gruppering av flere valg.
React
Unable to parse html
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 />)
Indeterminate checkbox
Legg inn allowIndeterminate: true i getCheckboxProps for å opprette en overordnet Checkbox som kan velge eller fjerne alle alternativer.
Dette aktiverer en ekstra tilstand, indeterminate, ved siden av checked og unchecked.
Den vises med en horisontal strek når én eller flere Checkbox er markert i gruppen.
Den vises som en vanlig Checkbox dersom alle i gruppen har samme tilstand.
React
Unable to parse html
const InTable = () => { const tableData = [ { id: 1, navn: 'Lise Nordmann', epost: 'lise@nordmann.no', telefon: '68051156', }, { id: 2, navn: 'Kari Nordmann', epost: 'kari@nordmann.no', telefon: '68059679', }, { id: 3, navn: 'Ola Nordmann', epost: 'ola@nordmann.no', telefon: '68055731', }, { id: 4, navn: 'Per Nordmann', epost: 'per@nordmann.no', telefon: '68059631', }, ]; const { getCheckboxProps } = useCheckboxGroup({ name: 'checkbox-table', value: ['2', '3'], }); return ( <Table> <colgroup> {/* ensure the first column only takes up the necessary space */} <col style={{ width: '1px' }} /> <col /> <col /> </colgroup> <Table.Head> <Table.Row> <Table.HeaderCell> <Checkbox aria-label='Velg alle' {...getCheckboxProps({ allowIndeterminate: true, value: 'all', })} /> </Table.HeaderCell> <Table.HeaderCell>Navn</Table.HeaderCell> <Table.HeaderCell>E-post</Table.HeaderCell> </Table.Row> </Table.Head> <Table.Body> {tableData.map((person) => ( <Table.Row key={person.id}> <Table.Cell> <Checkbox aria-labelledby={`checkbox-${person.id}-name`} {...getCheckboxProps(person.id.toString())} /> </Table.Cell> <Table.Cell id={`checkbox-${person.id}-name`}> {person.navn} </Table.Cell> <Table.Cell>{person.epost}</Table.Cell> </Table.Row> ))} </Table.Body> </Table> ); }; render(<InTable />)
HTML
Checkbox er ein samansatt komponent, så i HTML må du bygge den opp av fleire komponentar.
Me bruker Fieldset, Label og Input for å lage ein Checkbox.
Koden under viser hvordan du visuelt kan bygge opp en Checkbox i HTML, men du må selv passe på at <input> blir koblet sammen med <label> og beskrivelse.
I Fieldset
Koden under er et eksempel på hvordan du bruker Checkbox inni <fieldset>.
Merk at vi kun viser en Checkbox her, i praksis vil dette ofte være flere.
CSS variablar og data-attributter
Checkbox er en sammensatt komponent, og derfor viser vi variabler og data-attributter fra ds-input her.
| Navn | Verdi |
|---|---|
| --dsc-input-padding-block | var(--ds-size-2) |
| --dsc-input-padding-inline | var(--ds-size-3) |
| --dsc-input-padding | var(--dsc-input-padding-block) var(--dsc-input-padding-inline) |
| --dsc-input-size--toggle | var(--ds-size-6) |
| --dsc-input-size | var(--ds-size-12) |
| --dsc-input-background--readonly | var(--ds-color-neutral-surface-tinted) |
| --dsc-input-background | var(--ds-color-neutral-surface-default) |
| --dsc-input-border-color--readonly | var(--ds-color-neutral-border-subtle) |
| --dsc-input-border-color | var(--ds-color-neutral-border-default) |
| --dsc-input-border-style | solid |
| --dsc-input-border-width--toggle | max(var(--ds-border-width-default),calc(var(--ds-size-1)/2)) |
| --dsc-input-border-width | var(--ds-border-width-default) |
| --dsc-input-outline-color--hover | var(--ds-color-neutral-border-default) |
| --dsc-input-outline-color--toggle--hover | var(--dsc-input-accent-color) |
| --dsc-input-outline-width--hover | var(--ds-border-width-default) |
| --dsc-input-outline-style--hover | solid |
| --dsc-input-color--readonly | var(--ds-color-neutral-text-default) |
| --dsc-input-color | var(--ds-color-neutral-text-default) |
| --dsc-input-stroke-color | var(--ds-color-base-contrast-default) |
| --dsc-input-stroke-color--invalid | var(--ds-color-danger-base-contrast-default) |
| --dsc-input-stroke-width | 0.05em |
| --dsc-input-accent-color | var(--ds-color-base-default) |
| --dsc-input-accent-color--invalid | var(--ds-color-danger-text-subtle) |
| --dsc-input-line-height | var(--ds-line-height-md) |
| Navn | Verdi |
|---|---|
| data-width | auto |