Komponenter
Button
Button lèt brukarane utføre handlingar.
React
const Preview = () => { return <Button>Min knapp</Button>; }; render(<Preview />)
- variant
- Description
Specify which variant to use
- Type
"primary" | "secondary" | "tertiary"- Default
primary
- icon
- Description
Toggle icon only styling, pass icon as children When combined with loading, the loading-icon will be shown instead of the icon.
- Type
boolean- Default
false
- loading
- Description
Toggle loading state. Pass an element if you want to display a custom loader.
- Type
any- Default
false
- asChild
- Description
Change the default rendered element for the one passed as a child, merging their props and behavior.
- Type
boolean- Default
false
- type
- Description
Specify the type of button. Unset when `asChild` is true
- Type
"button" | "submit" | "reset"- Default
'button'
| Name | Type | Default | Description |
|---|---|---|---|
| variant | "primary" | "secondary" | "tertiary" | primary | Specify which variant to use |
| icon | boolean | false | Toggle icon only styling, pass icon as children When combined with loading, the loading-icon will be shown instead of the icon. |
| loading | any | false | Toggle loading state. Pass an element if you want to display a custom loader. |
| asChild | boolean | false | Change the default rendered element for the one passed as a child, merging their props and behavior. |
| type | "button" | "submit" | "reset" | 'button' | Specify the type of button. Unset when `asChild` is true |
Bruk
Eksempel
Varianter
variant brukast for å endre utsjånad på knappen.
React
const Variants = () => { return ( <> <Button variant='primary'>Primary</Button> <Button variant='secondary'>Secondary</Button> <Button variant='tertiary'>Tertiary</Button> </> ); }; render(<Variants />)
Fargar
Enten sett du data-color direkte på Button, eller så arvar den frå næraste overordna element med data-color.
React
const ColorVariants = () => { const colorVariants = [ 'accent', 'brand1', 'brand2', 'brand3', 'neutral', 'danger', ]; return ( <> {colorVariants.map((color) => ( <Button key={color} data-color={color as ButtonProps['data-color']} variant='primary' > {color} </Button> ))} </> ); }; render(<ColorVariants />)
Ikon
Dersom du har kun ikon i knappen kan du sette icon={true} for å få den firkanta. Har du anna innhald, som tekst, vil knappen automatisk få luft rundt ikonet.
React
const Icons = () => ( <> <Button icon aria-label='Kun ikon'> <PencilWritingIcon aria-hidden /> </Button> <Button> <PencilWritingIcon aria-hidden /> Rediger </Button> </> ); render(<Icons />)
Knapp som lenkje
Lenker kan få utsjånad som ein knapp, men vurder først om det er betre å bruke Link-komponenten. For å endre knappen til ei lenkje brukast asChild. Les meir kom komposisjon i Designsystemet.
React
const AsLink = () => ( <Button asChild> <a target='_blank' rel='noreferrer' href='https://www.designsystemet.no'> Gå til designsystemet.no </a> </Button> ); render(<AsLink />)
Knappar som lastar
Under brukar me loading={true} for å vise at knappen lastar noko. Her kan du også sende inn din eigen loading-komponent dersom vår Spinner ikkje passar.
React
const Loading = () => ( <> <Button variant='primary' loading> Laster… </Button> <Button variant='secondary' loading> Laster… </Button> <Button variant='tertiary' loading> Laster… </Button> </> ); render(<Loading />)
I eksempelet over blir aria-disabled sett automatisk når loading={true}. Dette er den anbefalte måten å vise at ein knapp er deaktivert på. Då kan knappen framleis få fokus når brukaren navigerer med tastatur. Slik blir skjermlesarar og andre hjelpemiddel informerte om at knappen finst, men at han ikkje er aktiv.
Merk: Verken loading="true" eller aria-disabled hindrar automatisk at knappen utløyser onClick. Du må sjølv sørgje for at callback-funksjonen ikkje køyrer når knappen er deaktivert.
HTML
Klassenavnet ds-button blir satt på <button>.
I React legg me også på type="button" som standard, for å unngå uventa submit i skjema.
Det er tre data-attributtar du kan bruke for tilspasning:
data-icon - legg på dersom knappen kun har ikon.
data-variant - set variant på knappen (primary, secondary, tertiary).
data-fullWidth - legg på dersom knappen skal vere full bredde.
Dersom du skal ha ein knapp som laster, må du sjølv legge til laste-indikator.
CSS variablar og data-attributtar
| Navn | Verdi |
|---|---|
| --dsc-button-background--active | var(--ds-color-base-active) |
| --dsc-button-background--hover | var(--ds-color-base-hover) |
| --dsc-button-background | var(--ds-color-base-default) |
| --dsc-button-color | var(--ds-color-base-contrast-default) |
| --dsc-button-color--hover | var(--ds-color-base-contrast-default) |
| --dsc-button-border-width | var(--ds-border-width-default) |
| --dsc-button-border-style | solid |
| --dsc-button-border-color | transparent |
| --dsc-button-gap | var(--ds-size-2) |
| --dsc-button-padding | var(--ds-size-2) var(--ds-size-4) |
| --dsc-button-size | var(--ds-size-12) |
| Navn | Verdi |
|---|---|
| data-variant | secondary, tertiary |
| data-icon | |
| data-fullwidth |