Komponenter
Radio
Radio er et alternativ brukeren kan velge. Bruk flere Radio for å vise en liste med alternativer. Brukerne kan bytte mellom alternativene, men kan kun velge ett.
React
const Preview = () => { return <Radio label='Radio' value='value' name='name' />; }; render(<Preview />)
Bruk
Eksempel
Gruppering
Bruk Fieldset rundt en gruppe med radioknapper for å gi en felles ledetekst(<legend>) og eventuelt en beskrivelse (description).
React
const Group = () => { return ( <Fieldset> <Fieldset.Legend>Hvordan ønsker du at vi kontakter deg?</Fieldset.Legend> <Fieldset.Description> Velg metoden som passer best for deg. Vi bruker dette kun til å sende viktig informasjon om saken din. </Fieldset.Description> <Radio label='E-post' description='Vi bruker e-postadressen du har oppgitt tidligere (navn@epost.no)' value='epost' name='kontakt' /> <Radio label='SMS' description='Vi bruker telefonnummeret du har oppgitt tidligere (99 99 99 99)' value='sms' name='kontakt' /> <Radio label='Brev' description='Levering kan ta 3-5 virkedager, avhengig av posttjenesten.' value='brev' name='kontakt' /> </Fieldset> ); }; render(<Group />)
Med feil
Her må vi bruke Fieldset, fordi den aktiverer riktig stil og sørger for at innholdet har de riktige sammenkoblingene for tilgjengelighet.
React
const WithError = () => { return ( <Fieldset> <Fieldset.Legend>Hvilken bydel bor du i?</Fieldset.Legend> <Fieldset.Description> Trondheim er delt inn i fire bydeler </Fieldset.Description> <Radio label='Østbyen' value='ostbyen' name='city' aria-invalid='true' /> <Radio label='Lerkendal' value='lerkendal' name='city' aria-invalid='true' /> <Radio label='Heimdal' value='heimdal' name='city' aria-invalid='true' /> <Radio label='Midtbyen' value='midtbyen' name='city' aria-invalid='true' /> <ValidationMessage data-color='danger'> Du må velge en bydel før du kan fortsette. </ValidationMessage> </Fieldset> ); }; render(<WithError />)
Readonly
Felter med readonly-attributtet er med i tabrekkefølgen. Brukerne kan kopiere innholdet men ikke redigere det. Informasjon blir med når skjemaet sendes inn.
readonly-felter kan være forvirrende for noen brukere. Ikke alle vil skjønne hvorfor de ikke får til å endre innholdet i feltet. Vi anbefaler derfor å unngå readonly så langt det lar seg gjøre.
React
const ReadOnly = () => { return ( <Fieldset> <Fieldset.Legend>Hvilken bydel bor du i?</Fieldset.Legend> <Fieldset.Description> Trondheim er delt inn i fire bydeler </Fieldset.Description> <Radio label='Østbyen' value='ostbyen' name='city' readOnly /> <Radio label='Lerkendal' value='lerkendal' name='city' readOnly /> <Radio label='Heimdal' value='heimdal' name='city' readOnly checked /> <Radio label='Midtbyen' value='midtbyen' name='city' readOnly /> </Fieldset> ); }; render(<ReadOnly />)
Inline
Radio kan plasseres horisontalt med flex, men skal som hovedregel plasseres vertikalt.
React
const Inline = () => { return ( <Fieldset> <Fieldset.Legend>Kontaktes på e-post?</Fieldset.Legend> <Fieldset.Description> Bekreft om du ønsker å bli kontaktet per e-post. </Fieldset.Description> <div style={{ display: 'flex', flexWrap: 'wrap', gap: 'var(--ds-size-6)' }} > <Radio name='my-inline' label='Ja' value='ja' /> <Radio name='my-inline' label='Nei' value='nei' /> </div> </Fieldset> ); }; render(<Inline />)
HTML
Radio er ein samansatt komponent, så i HTML må du bygge den opp av fleire komponentar.
Me bruker Fieldset, Label og Input for å lage ein Radio.
Koden under viser hvordan du visuelt kan bygge opp en Radio 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 flere Radio inni <fieldset>.
CSS variabler 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 | var(--ds-size-2) var(--ds-size-3) |
| --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) |
| Navn | Verdi |
|---|---|
| data-width | auto |