Intro
ExpansionCard samler informasjon eller handlinger i en boks som utvider og trekker seg sammen basert på brukerinteraksjon.
Eksempler
Tokens lar deg lett gjøre stilendringene du trenger uten å måtte overskrive css-klasser.
Man kan manuelt legge til ikoner eller illustrasjoner vha. HStack.
Retningslinjer
Design
ExpansionCard er bygd opp av header og content. Header er den synlige delen du kan klikke på. Content er delen som vises når du åpner komponenten.
Header
Komponenten kommer med mulighet til å tilpasse innholdet i header. Du kan for eksempel ha med ikon/grafikk og beskrivelse i tillegg til tittel.
Content
Det er ikke noen sterke føringer for innholdet i content-delen, men du bør tenke over mengden.
Bruk
ExpansionCard er et godt virkemiddel for å organisere og skille ut informasjon. Det kan for eksempel brukes til informasjon som forklarer noe mer detaljert eller forklarer noe relatert til innholdet på siden.
Vurder dette når du vil bruke ExpansionCard:
Figma
I Figma er komponenten designet med slot-komponenter som gjør det mulig å legge til eget innhold samtidig som variantene og interaksjonen bevares.
Tilgjengelighet
Klikkflate
Hele header-delen av komponenten er klikkbar, noe som også vises med hover-interaksjon. Dette er løst med et psuedo-element (beskrevet her), der man ikke trenger å ha alt innholdet i en button. Dette muliggjør rikere innhold i header, men bruker vil ikke kunne kopiere/markere tekst i header.
Interaksjon med skjermleser
Komponenten er kodet med section
-element (mdn). Dette gir skjermlesere mer kontekst om at de nå er inne i et card, men krever en medfølgende unik aria-label
som beskriver seksjonen. Oftest kan label bare være tittelen, men må vurderes basert på konteksten.
Plassering av lukk/åpne-knapp
Vi har valgt å plassere knappen til høyre i header da dette er det mest standariserte utrykket for paneler med interaksjon (Jakob's Law). Dette betyr selvfølgelig ikke at standarden alltid er den mest tilgjengelige løsningen. Dette er noen av vurderingene for valget:
Relevante lenker
Props
ExpansionCard
onToggle?
- Type:
((open: boolean) => void)
- Description:
open?
- Type:
boolean
- Description:
defaultOpen?
- Type:
boolean
- Default:false
- Description:
size?
- Type:
"medium" | "small"
- Default:"medium"
className?
- Type:
string
ref?
- Type:
LegacyRef<HTMLDivElement>
- Description:
ExpansionCard.Header
className?
- Type:
string
ref?
- Type:
LegacyRef<HTMLDivElement>
- Description:
ExpansionCard.Title
as?
- Type:
React.ElementType
- Description:
size?
- Type:
"large" | "medium" | "small"
- Default:medium
- Description:
className?
- Type:
string
ref?
- Type:
LegacyRef<HTMLHeadingElement>
- Description:
ExpansionCard.Description
className?
- Type:
string
ref?
- Type:
LegacyRef<HTMLParagraphElement>
- Description:
ExpansionCard.Content
className?
- Type:
string
ref?
- Type:
LegacyRef<HTMLDivElement>
- Description:
Tokens
Vi har valgt å ikke tilby egne varianter, men oppfordrer heller til å lage egne ved hjelp av css-variablene våre. Se eksemplet "custom" for demo.
Token | Fallback |
---|---|
--ac-expansioncard-bg | --a-surface-default |
--ac-expansioncard-header-bg | --a-surface-transparent |
--ac-expansioncard-header-bg-hover | --a-surface-hover |
--ac-expansioncard-header-open-bg | --a-surface-transparent |
--ac-expansioncard-border-color | --a-border-default |
--ac-expansioncard-border-open-color | --a-border-default |
--ac-expansioncard-border-radius | --a-border-radius-large |
--ac-expansioncard-button-border-radius | --a-border-radius-medium |
--ac-expansioncard-border-hover-color | --a-border-strong |