Komponenter
Button
Button lèt brukarane utføre handlingar.
HTML
Unable to parse html
const Preview = () => { return <Button>Min knapp</Button>; }; render(<Preview />)
Bruk
Klassenavnet ds-button blir satt på <button>.
Det er tre data-attributtar du kan bruke for tilpasning:
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.
CSS variablar og data-attributtar
Størrelsar styrast med data-size og fargar med data-color. Komponenten vil arve næraste forelder med desse satt.
| Navn | Verdi |
|---|---|
| data-variant | secondary, tertiary |
| data-icon | |
| data-fullwidth |
| 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) |
Eksempel
Varianter
variant brukast for å endre utsjånad på knappen.
HTML
Unable to parse html
const Variants = () => { return ( <> <Button variant='primary'>Primary</Button> <Button variant='secondary'>Secondary</Button> <Button variant='tertiary'>Tertiary</Button> </> ); }; render(<Variants />)
Ikon
Dersom du har kun ikon i knappen kan du sette data-icon="true" for å få den firkanta. Har du anna innhald, som tekst, vil knappen automatisk få luft rundt ikonet.
HTML
Unable to parse html
const Icons = () => ( <> <Button icon aria-label='Kun ikon'> <PencilWritingIcon aria-hidden /> </Button> <Button> <PencilWritingIcon aria-hidden /> Rediger </Button> </> ); render(<Icons />)
Knappar som lastar
Dersom du skal ha ein knapp som laster, må du sjølv legge til laste-indikator.
Merk: Verken aria-busy 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.
React
I React legg me også på type="button" som standard, for å unngå uventa submit i skjema.
- 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
ReactNode- 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'
- command
- Description
Native invoker commands. Specifies actions to perform on an element specified by commandfor. Polyfilled by designsystemet-web and includes a custom --show-non-modal command. "show-modal", "close", "request-close", "show-popover", "hide-popover", "toggle-popover", "--show-non-modal"
- Type
string
- commandfor
- Description
Specifies the target element for "command". value is ID of target
- Type
string
- commandFor
- Type
string
| 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 | ReactNode | 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 |
| command | string | - | Native invoker commands. Specifies actions to perform on an element specified by commandfor. Polyfilled by designsystemet-web and includes a custom --show-non-modal command. "show-modal", "close", "request-close", "show-popover", "hide-popover", "toggle-popover", "--show-non-modal" |
| commandfor | string | - | Specifies the target element for "command". value is ID of target |
| commandFor | string | - | - |
Ekstra logikk for knappar som lastar
I React 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
Unable to parse html
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.
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 om komposisjon i Designsystemet.
HTML
Unable to parse html
const AsLink = () => ( <Button asChild> <a target='_blank' rel='noreferrer' href='https://www.designsystemet.no'> Gå til designsystemet.no </a> </Button> ); render(<AsLink />)