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.

Har du noen innspill til komponenten?Gi oss beskjed!

Test komponenten

Symrahagen
Tag 1Tag 2

Symrahagen barnehage

En barnehage i Oslo by

Dette er en tekst om barnehagen

Kodebygger

PktCard

Innhold
Tittel på card
Undertittel på card
Undertekst med fet skriftvekt
Undertekst med normal skriftvekt
Stien til bildet
Tekst til skjermleser. Skal kun sendes inn for bilder som ikke er dekorative
Valg for om bildet skal ha rektangulær eller rund form.
Liste av tags på card. Tar inn et array med objekter med følgende stringproperties: skin, iconName, ariaLabel, text
ICardTag 1
Farge på tag
Id på ikonet du ønsker å bruke til tag
Tekst for aria-label
Tekst på tag
ICardTag 2
Farge på tag
Id på ikonet du ønsker å bruke til tag
Tekst for aria-label
Tekst på tag
Utseende
Horisontal eller vertikal layout. Ved horisontal layout vil bildet være plassert til venstre for teksten på desktop, og over teksten på mobil.
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.
Padding rundt card. Ved "none" strekker innholdet i card seg ut til kantene, og dette er derfor ikke mulig å kombinere med outlined skin.
Plassering av tags i card
Overstyrer bildets sideforhold. Uten denne er det 1:1, eller 19:10 med padding «none» og stående kort.
Tilgjengelighet
Nivået på headingen. Brukes for tilgjengelighet.
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.
Teknisk

Relaterte komponenter

Varianter

Card finnes i to hovedvarianter. Du kan kombinere disse med ulike skins og farger.

LayoutBruk
PortraitInnhold stables vertikalt, fungerer godt når du legger flere card ved siden av hverandre
LandscapeNår du vil bruke mer av bredden, f.eks. i desktop-visning
Eksempler på horisontal layout av cardEksempler på vertikal layout av card
SkinBruk
OutlinedNår du vil ramme inn uten bakgrunn
FilledFull bakgrunnsfarge
No paddingFjerner marger inne i cardet
Card med default outlineBlått cardGrått card
BildestilBruk
SquareGir et strammere uttrykk
RoundMer lekent, harmonerer med Oslo-profilen
Card med square bildestilCard med rundt bilde

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

Hold innholdet ryddig, tydelig og konkret

Unngå

Unngå å overlesse cardet med innhold

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

Skriv lettlest innhold og tydelig lenketekst

Unngå

Unngå uklart innhold og utydelig lenketekst

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.

Card på mobil

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

ElementBeskrivelse
1. LabelOverskrift for kortet. Bruk <h3> eller tilsvarende semantikk
2. BrødtekstForklarende tekst som utdyper innholdet
3. BildeIllustrasjon eller fotografi (valgfritt)
4. HandlingLenke eller knapp for navigasjon eller videre handling, brukes kun dersom ikke hele cardet er klikkbart (valgfritt)
5. ContainerKortets ramme, med eller uten kantlinje og padding
Elementene i anatomien til card.

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

PktCard

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

ICardImage

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

ICardTag

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