Card
Release dato: 03.10.2024
Sist oppdatert: 20.05.2025
Card (kort) brukes for å gruppere innhold som hører sammen, og kan inneholde tekst, bilde, ikon, knapp og lenker, eller en kombinasjon av disse. Card gjør det enklere å skanne, sammenligne og velge mellom flere elementer.
Test komponenten

Symrahagen barnehage
En barnehage i Oslo by
Dette er en tekst om barnehagen
Relaterte komponenter
Når hele cardet kun skal være en lenke uten fleksibelt innhold.
Når du skal vise strukturerte data i kolonner og rader.
Når du vil vise en fremhevet melding med ikon og tekst.
Varianter
Card finnes i to hovedvarianter. Du kan kombinere disse med ulike skins og farger.
| Layout | Bruk |
|---|---|
| Portrait | Innhold stables vertikalt, fungerer godt når du legger flere card ved siden av hverandre |
| Landscape | Når du vil bruke mer av bredden, f.eks. i desktop-visning |
| Skin | Bruk |
|---|---|
| Outlined | Når du vil ramme inn uten bakgrunn |
| Filled | Full bakgrunnsfarge |
| No padding | Fjerner marger inne i cardet |
| Bildestil | Bruk |
|---|---|
| Square | Gir et strammere uttrykk |
| Round | Mer lekent, harmonerer med Oslo-profilen |
Retningslinjer for bruk
Bruk card når
- du vil gruppere informasjon
- du trenger oversiktlige valg i grid eller liste
- du ønsker fleksibel visning med eller uten bilde, innhold eller handling
Unngå card når
- du bare viser én ting og ikke trenger visuell gruppering
- informasjonen egner seg bedre i ren tekst eller tabell
Tilpass cardet til ditt innholdsbehov
Komponenten er fleksibel, og du kan selv velge om du vil bruke:
- tekst
- tittel
- undertittel
- bilde
- tags over eller under innholdet
- lenker eller knapper
Du kan også velge om hele cardet skal være klikkbart.
Unngå å overlesse cardet. Bruk luft og visuell prioritering. Om du bruker flere card i samme løsning, kan det være lurt å designe alle like og bruke de samme elementene konsekvent.
Gjør slik
Unngå
Skriv tydelig og konsist
Innholdet i et card skal være lett å skanne. Bruk korte titler og tydelig handling. Hvis cardet er klikkbart, må det være klart hvor det leder, følg regler for god lenketekst.
Gjør slik
Unngå
Responsivitet
Card tilpasser seg automatisk til ulike skjermstørrelser. Innhold bryter linjer og grid flyter om ved behov.
Landscape-card skaleres automatisk ned til portrait på små skjermer. På mobil anbefaler vi å bruke portrait-layout som utgangspunkt, særlig dersom cardsene vises i listevisning.
Vi anbefaler at du uansett tester ulike visningsformer og antall cards i din løsning.
Universell utforming
Card skal kunne brukes og forstås av alle, også de som bruker tastatur eller skjermleser. Her er noen viktige prinsipper for å sikre tilgjengelighet:
Struktur og semantikk
Bruk riktig heading-nivå i konteksten der cardet vises, og sørg for at alle card på samme nivå i løsningen også benytter samme heading-nivå. Dette gir god struktur for skjermlesere og visuell lesing.
Interaktive og ikke-interaktive card
Et card kan enten være:
- Interaktivt: hele cardet fungerer som en lenke eller knapp
- Ikke-interaktivt: cardet inneholder klikkbare elementer som knapper eller lenker
Unngå å blande disse. Ikke legg knapper inne i et kort som allerede er klikkbart - knappen vil være umulig å nå med musepeker. Kort sagt: én handling per område.
Tastaturnavigasjon og fokus
Brukeren skal kunne bruke “Tab” for å navigere:
- I interaktive card: Hele cardet er et tab stop og aktiveres med “Enter” eller “Mellomrom”.
- I ikke-interaktive card: Bare knapper og lenker er fokuserbare
Alle fokuserbare elementer har tydelig visuell fokusindikator. Skriv tydelig lenketekst som skjermleseren forstår, les mer om gode lenketekster her.
Les mer om universell utforming av cards:
Anatomi
| Element | Beskrivelse |
|---|---|
| 1. Label | Overskrift for kortet. Bruk <h3> eller tilsvarende semantikk |
| 2. Brødtekst | Forklarende tekst som utdyper innholdet |
| 3. Bilde | Illustrasjon eller fotografi (valgfritt) |
| 4. Handling | Lenke eller knapp for navigasjon eller videre handling, brukes kun dersom ikke hele cardet er klikkbart (valgfritt) |
| 5. Container | Kortets ramme, med eller uten kantlinje og padding |
Implementasjon i kode
Hvordan ta komponenten i bruk?
import @oslokommune/punkt-elements/dist/pkt-card.js;import { PktCard } from '@oslokommune/punkt-react';<script src="https://punkt-cdn.oslo.kommune.no/19/elements/pkt-card.js" type="module"></script>Testing
Elements: Dersom du skal skrive tester med JSDOM eller liknende er det viktig at du lar komponenten bli rendret ferdig før du tester den. Dette kan gjøres ved å kjøre denne kodelinjen før testene kjøres:
await window.customElements.whenDefined("pkt-card");Egenskaper
Props
- Prop:
heading?- Type:
string- Beskrivelse:
- Tittel på card
- Prop:
headingLevel?headinglevel?- Type:
"1" | "2" | "3" | "4" | "5" | "6"- Standardverdi:
3- Beskrivelse:
- Nivået på headingen. Brukes for tilgjengelighet.
- Prop:
subheading?- Type:
string- Beskrivelse:
- Undertittel på card
- Prop:
layout?- Type:
"vertical" | "horizontal"- Standardverdi:
"vertical"- Beskrivelse:
- Horisontal eller vertikal layout. Ved horisontal layout vil bildet være plassert til venstre for teksten på desktop, og over teksten på mobil.
- Prop:
skin?- Type:
"outlined" | "outlined-beige" | "gray" | "blue" | "beige" | "green"- Standardverdi:
"outlined"- Beskrivelse:
- Fargen på card. Velg mellom outlined, outlined-beige, gray, blue, beige og green. Ved padding=none er det ikke mulighet for outlined-skin. Card med kombinasjonen av propsene padding=none + layout=vertical vil alltid være transparante.
- Prop:
padding?- Type:
"none" | "default"- Standardverdi:
"default"- Beskrivelse:
- Padding rundt card. Ved "none" strekker innholdet i card seg ut til kantene, og dette er derfor ikke mulig å kombinere med outlined skin.
- Prop:
metaLead?- Type:
string- Beskrivelse:
- Undertekst med fet skriftvekt
- Prop:
metaTrail?- Type:
string- Beskrivelse:
- Undertekst med normal skriftvekt
- Prop:
tagPosition?- Type:
"top" | "bottom"- Standardverdi:
"top"- Beskrivelse:
- Plassering av tags i card
- Prop:
clickCardLink?- Type:
string- Beskrivelse:
- Href sendes inn som streng for å gjøre card klikkbart. Ved bruk MÅ heading sendes inn da denne vil brukes som lenketekst i klikkbart card.
- Prop:
openLinkInNewTab?- Type:
boolean- Standardverdi:
false- Beskrivelse:
- Velg denne dersom du ønsker at lenken i card skal åpnes i ny fane.
- Prop:
borderOnHover?- Type:
boolean- Standardverdi:
true- Beskrivelse:
- Vi anbefaler hoverborder på klikkbart card. Kan slås av ved behov.
- Prop:
zoom?- Type:
boolean- Standardverdi:
false- Beskrivelse:
- Forstørrer bildet litt når man holder musepekeren over kortet
- Prop:
image?- Type:
ICardImage- Beskrivelse:
- Bildet på card. Tar inn et objekt av typen {src: string, alt: string}.
- Prop:
imageShape?- Type:
"square" | "round"- Standardverdi:
"square"- Beskrivelse:
- Valg for om bildet skal ha rektangulær eller rund form.
- Prop:
imageAspect?- Type:
"auto" | "1-1" | "4-3" | "3-2" | "16-9" | "19-10"- Beskrivelse:
- Overstyrer bildets sideforhold. Uten denne er det 1:1, eller 19:10 med padding «none» og stående kort.
- Prop:
restrictImageHeight?- Type:
boolean- Standardverdi:
false- Beskrivelse:
- Låser bildehøyden i stedet for sideforholdet, og trapper den opp med skjermbredden: 12.5rem, 14.375rem fra tablet og 18.125rem fra tablet-big. Bildet beskjæres sentrert.
- Prop:
tags?- Type:
array- Beskrivelse:
- Liste av tags på card. Tar inn et array med objekter med følgende stringproperties: skin, iconName, ariaLabel, text
- Prop:
ariaLabel?- Type:
string- Beskrivelse:
- Tekst til skjermleser for aria-label på card. Settes automatisk til headingen, eller subheadingen der heading ikke eksisterer. Ved bruk av klikkbart card må heading alltid sendes inn da denne brukes som lenketekst.
Slots
- Slot:
default- Beskrivelse:
- Innholdet i card
Bildet på card. Tar inn et objekt av typen {src: string, alt: string}.
- Prop:
src- Type:
string- Beskrivelse:
- Stien til bildet
- Prop:
alt?- Type:
string- Beskrivelse:
- Tekst til skjermleser. Skal kun sendes inn for bilder som ikke er dekorative
- Prop:
skin?- Type:
"blue" | "green" | "red" | "yellow"- Beskrivelse:
- Farge på tag
- Prop:
iconName?- Type:
icon- Beskrivelse:
- Id på ikonet du ønsker å bruke til tag
- Prop:
ariaLabel?- Type:
string- Beskrivelse:
- Tekst for aria-label
- Prop:
text- Type:
string- Beskrivelse:
- Tekst på tag