Skip to main content

Tag

TODO — diskusjon: farget subtle-tekst per status

Etter Figma-designet skal subtle-varianten ha farget tekst per status (blå på lyseblå, grønn på lysegrønn osv.). Implementasjonen bruker i stedet mørk tekst i alle subtle-statuser: de mettede fyll-fargene (-550) gir kun 3.3–3.9:1 mot pastell-flatene og bryter WCAG 1.4.3 (4.5:1), og systemet mangler foreground-tokens for info, warning og neutral (kun success/danger finnes). En mørkere per-status foreground (~-700, 7–11:1) ville latt oss matche Figma WCAG-trygt. Avventer beslutning om å legge til de manglende tokenene — se Status-foreground i fargedokumentasjonen.

Et designsystem som gjør nettopp dette: Digdir Designsystemet — Tag bruker data-color med tonet flate og mørkere tekst i samme fargetone per status (og en outline-variant for enda roligere uttrykk).

Tag er en liten, ikke-interaktiv etikett som merker eller kategoriserer innhold — for eksempel en status, en egenskap eller et nøkkelord. Taggen bærer betydningen i teksten sin, og fargen støtter opp om hvilken type informasjon det er.

Egnet til

  • Vise status på et element (f.eks. «Utløpt», «Ny», «Til behandling»)
  • Merke eller kategorisere innhold med korte nøkkelord
  • Fremheve en egenskap eller et attributt kompakt
  • Gi et visuelt hint om alvorlighetsgrad sammen med tekst

Uegnet til

  • Handlinger brukeren kan klikke på — bruk Chip eller Button
  • Fjernbare valg eller filtre — bruk Removable chip
  • Lange tekster eller forklaringer — taggen er ment for korte etiketter
  • Å formidle status med farge alene uten forklarende tekst

Varianter

Taggen har fem semantiske statuser — neutral, info, success, warning og danger — i to visuelle profiler:

  • Emphasis (standard): mettet flate med invers (lys) tekst. Brukes når taggen skal trekke blikket.
  • Subtle: pastell-flate med mørk tekst og farget border. Roligere uttrykk som passer i tettpakket innhold.

I HTML velges status med data-status, profil med data-variant og størrelse med data-size. I React er dette henholdsvis variant-, type- og size-props.

Eksempel

Result
Loading...
Kode
Live Editor
<Tag variant="info">Ny</Tag>

Alle statuser

Hver status finnes i begge profiler. Emphasis øverst, subtle under.

Result
Loading...
Kode
Live Editor
<VStack gap="md">
  <HStack gap="sm">
    <Tag variant="neutral">Neutral</Tag>
    <Tag variant="info">Info</Tag>
    <Tag variant="success">Success</Tag>
    <Tag variant="warning">Warning</Tag>
    <Tag variant="danger">Danger</Tag>
  </HStack>
  <HStack gap="sm">
    <Tag variant="neutral" type="subtle">Neutral</Tag>
    <Tag variant="info" type="subtle">Info</Tag>
    <Tag variant="success" type="subtle">Success</Tag>
    <Tag variant="warning" type="subtle">Warning</Tag>
    <Tag variant="danger" type="subtle">Danger</Tag>
  </HStack>
</VStack>

Subtle-profil

Result
Loading...
Kode
Live Editor
<Tag variant="success" type="subtle">Godkjent</Tag>

Med ikon

Ikonet er dekorativt og skal støtte teksten, ikke erstatte den. Merk <ix-icon> med aria-hidden="true" slik at skjermleser ikke leser det.

Result
Loading...
Kode
Live Editor
<Tag variant="warning" type="subtle">
  <Icon name="home" size="sm" />
  Bolig
</Tag>

Størrelser

Result
Loading...
Kode
Live Editor
<HStack gap="sm">
  <Tag variant="info" size="sm">Liten</Tag>
  <Tag variant="info">Standard</Tag>
  <Tag variant="info" size="lg">Stor</Tag>
</HStack>

Props

Props-dokumentasjonen genereres automatisk fra Storybook.

Tilpasning med CSS

Trenger du ix-tag-stylingen på HTML du setter sammen selv — uten React-komponenten — kan du bruke klassen direkte på elementet ditt. Farge kobles via data-status, som setter status-farge-variablene (--ix-color-status-*) automatisk, på samme måte som i Message.

Tilgjengelige klasser og attributter

Element/tilstandSelektor / attributt
Tag.ix-tag
Status (farge)data-status="neutral | info | success | warning | danger"
Visuell profildata-variant="emphasis | subtle"
Størrelsedata-size="sm | lg" (utelates for standard md)
Ikon.ix-tag .ix-icon / .ix-tag ix-icon (arver tekstfarge)

Eksempel: bruk i egen HTML-struktur

<span class="ix-tag" data-status="danger" data-variant="subtle" data-size="sm">
<ix-icon name="warning" aria-hidden="true" class="ix-icon"></ix-icon>
Utløpt
</span>

Universell utforming

Hva du selv må sørge for

  • Ikke formidle status med farge alene. Skriv betydningen i teksten — «Utløpt», «Godkjent» — ikke bare en rød eller grønn tag (WCAG 1.4.1).
  • Skriv kort, meningsfull tekst på brukerens språk. Taggen har ingen hardkodet tekst, og innholdet leses som vanlig tekst uten rolle-annonsering.
  • Merk ikoner som dekorative med aria-hidden="true". Et ikon uten tekst gjør taggen meningsløs for skjermlesere.
  • Gjør du taggen interaktiv med as="a" eller as="button", er du selv ansvarlig for meningsfull lenketekst/handling og at fokus- og tastaturatferd gir mening.

Hva komponenten gjør automatisk

  • Velger tekstfarge mot bakgrunnen i hver variant slik at kontrasten når 4.5:1: emphasis bruker lys tekst mot mettet flate, subtle bruker mørk tekst mot pastell-flate.
  • Reflower korrekt ned til 320 px viewport — taggen har ingen fast bredde.
  • Kobler status-farge-variablene automatisk via data-status.

Skjermleser

  • Ikke-interaktiv tag: leses som vanlig tekst i lesekontekst — «[tekst]», uten rolle-annonsering.
  • Ikon i taggen leses ikke når det har aria-hidden="true".
  • Interaktiv tag (as="a"/"button"): annonseres med native rolle — «[tekst], lenke» eller «[tekst], knapp».

WCAG-kriterier

Sist gjennomgått: 2026-07-28 — alle 56 WCAG 2.2-kriterier vurdert

WCAG-kriterier5 ditt ansvar · 8 håndtert · 47 ikke relevant · 0 ikke på plass
Ditt ansvar (5)
KriteriumNivåHva du må gjøre
1.4.1 Bruk av fargeAIkke stol på farge alene for å formidle status. Tag-varianten (info, success, warning, danger) endrer kun farge. Fargen alene formidler ikke betydning til brukere med nedsatt fargesyn eller skjermlesere. Teksten i taggen må selv bære betydningen — skriv «Utløpt» eller «Godkjent», ikke bare en rød eller grønn tag uten forklarende tekst.
1.3.1 Informasjon og relasjonerASkriv meningsfull tekst i taggen. Taggen har ingen automatisk tilgjengelig navn utover tekstinnholdet. Innholdet leses av skjermleser som vanlig tekst, uten noen rolle-annonsering. Bruk kort, beskrivende tekst på brukerens språk (bokmål, nynorsk eller engelsk). Komponenten har ingen hardkodet tekst.
1.1.1 Ikke-tekstlig innholdAIkoner i taggen er dekorative — merk dem som skjult. Et ikon i taggen skal støtte teksten, ikke erstatte den. Sett aria-hidden="true" på <ix-icon> slik at skjermleser ikke leser ikonet. Er ikonet det eneste innholdet (ingen tekst), er taggen meningsløs for skjermlesere — legg alltid til synlig eller skjult tekst.
4.1.2 Navn, rolle, verdiASett riktig rolle/semantikk hvis taggen er interaktiv. Tag er som standard en ikke-interaktiv <span>. Gjør du taggen til en lenke eller knapp via as="a"/as="button", er du selv ansvarlig for meningsfull lenketekst, href eller onClick, og at fokus- og tastaturatferd gir mening i konteksten.
2.4.4 Formål med lenke (i kontekst)ASett riktig rolle/semantikk hvis taggen er interaktiv. Tag er som standard en ikke-interaktiv <span>. Gjør du taggen til en lenke eller knapp via as="a"/as="button", er du selv ansvarlig for meningsfull lenketekst, href eller onClick, og at fokus- og tastaturatferd gir mening i konteksten.
Håndtert av komponenten (8)
KriteriumNivåHva komponenten gjør
1.3.1 Informasjon og relasjonerATekstinnholdet følger naturlig leserekkefølge i DOM. Ingen skjult struktur som må formidles.
1.3.2 Meningsfull rekkefølgeAInnhold (ikon + tekst) følger naturlig og meningsfull sekvens i DOM.
1.4.1 Bruk av fargeAStatus kommuniseres av tekstinnhold i tillegg til farge — komponenten legger ikke opp til farge alene, men teksten er konsumentens ansvar.
1.4.3 Kontrast (minimum)AAEmphasis bruker invers (lys) tekst mot mettet flate (4.8–5.5:1). Subtle bruker mørk main-tekst mot pastell-flate i alle statuser (10.8–13.2:1); fargen bæres av flate og border. Farget tekst per status ble vurdert, men token-systemet har ingen per-status foreground mørk nok til å nå 4.5:1 på de lyse subtle-flatene (info ville falt til 1.48:1), så mørk tekst er brukt.
1.4.4 Endre tekststørrelseAAStørrelser bruker relative font-size-tokens og skalerer korrekt ved 200 % zoom.
1.4.10 OmflytAATaggen er width: fit-content uten fast bredde og reflower korrekt ned til 320 px viewport.
1.4.11 Kontrast for ikke-tekstlig innholdAAEmphasis-flaten oppfyller 3:1 komponentavgrensning mot lys sidebakgrunn (5.0–5.8:1 mot hvit). Subtle-varianten er bevisst rolig: pastell-flate (1.4–1.7:1) og border (2.2–2.5:1) når ikke 3:1 mot en lys side, men taggen er ikke-interaktiv og all betydning bæres av teksten (1.4.1) med 10.8–13.1:1 — avgrensningen er dekorativ, så 1.4.11 stiller ikke krav til den.
1.3.4 VisningsretningAAIngen fast orientering — taggen fungerer i både portrett og landskap.
Ikke relevant (47)
KriteriumNivåHvorfor ikke relevant
1.1.1 Ikke-tekstlig innholdATaggen har ikke ikke-tekstlig innhold i seg selv; ikon-barn er dekorativt og skjules av konsumenten med aria-hidden.
1.2.1 Bare lyd og bare video (forhåndsinnspilt)AIngen medieelementer.
1.2.2 Teksting (forhåndsinnspilt)AIngen medieelementer.
1.2.3 Synstolking eller mediealternativ (forhåndsinnspilt)AIngen medieelementer.
1.2.4 Teksting (direkte)AAIngen medieelementer.
1.2.5 Synstolking (forhåndsinnspilt)AAIngen medieelementer.
1.3.3 Sensoriske egenskaperATaggen formidler ikke instruksjoner.
1.3.5 Identifiser formål med inndataAAIkke et skjemafelt som ber om personlig informasjon.
1.4.2 Styring av lydAIngen lydelementer.
1.4.5 Bilder av tekstAAIngen bilder av tekst.
1.4.12 TekstavstandAA
1.4.13 Innhold ved hover eller fokusAATaggen viser ikke innhold ved hover/fokus.
2.1.1 TastaturAStandard-taggen er ikke-interaktiv. Interaktiv bruk (as="a"/"button") arver native tastaturstøtte.
2.1.2 Ingen tastaturfelleA
2.1.4 TastatursnarveierAIngen egendefinerte tastatursnarveier.
2.2.1 Justerbar hastighetAIngen tidsbegrensede funksjoner.
2.2.2 Pause, stopp, skjulAIngen animasjon eller automatisk oppdatering.
2.3.1 Terskelverdi på tre glimtAIngen blinkende eller glimtende innhold.
2.4.1 Hoppe over blokkerASidekrav — gjelder ikke enkeltkomponenter.
2.4.2 SidetitlerASidekrav — gjelder ikke enkeltkomponenter.
2.4.3 FokusrekkefølgeAIkke-interaktiv — ikke i tab-rekkefølgen.
2.4.4 Formål med lenke (i kontekst)AKun relevant hvis konsumenten gjør taggen til en lenke — da er lenketekst konsumentens ansvar.
2.4.5 Flere måterAASidekrav — gjelder ikke enkeltkomponenter.
2.4.6 Overskrifter og ledeteksterAA
2.4.7 Synlig fokusAAStandard-taggen er ikke fokuserbar. Interaktiv bruk arver native :focus-visible.
2.4.11 Fokus ikke skjult (minimum)AAIngen sticky/overlappende elementer som kan skjule fokus.
2.5.1 PekerbevegelserAIngen drag-and-drop eller sveipebevegelser.
2.5.2 Avbryt pekerA
2.5.4 BevegelsesaktiveringAIngen bevegelsesbasert interaksjon.
2.5.6 Samtidige inndatamekanismerA
2.5.7 DrabevegelserAIngen drag-and-drop.
2.5.8 Målstørrelse (minimum)AAIkke-interaktiv — intet klikkmål-krav. Interaktiv bruk må selv sikre 24×24 px.
3.1.1 Språk på sidenASidekrav — gjelder ikke enkeltkomponenter.
3.1.2 Språk på deler av innholdAAKomponenten setter ikke lang-attributt — innhold er på sidespråket.
3.2.1 Ved fokusAIkke-interaktiv — ingen kontekstendring ved fokus.
3.2.2 Ved inndataA
3.2.3 Konsistent navigasjonAASidekrav — gjelder ikke enkeltkomponenter.
3.2.4 Konsistent identifikasjonAASystemkrav — gjelder konsistens på tvers av sider, ikke enkeltkomponenter.
3.2.6 Konsistent hjelpASidekrav — gjelder plassering av hjelpefunksjon på tvers av sider.
3.3.1 Identifikasjon av feilA
3.3.2 Ledetekster eller instruksjonerA
3.3.3 Forslag ved feilAA
3.3.4 Forhindring av feil (juridisk, økonomisk, data)AAFlytkrav — gjelder bekreftelse/reversering av transaksjoner, ikke enkeltfelter.
3.3.7 Redundant oppføringAFlytkrav — gjelder at brukeren ikke skal gjenta informasjon i en prosess.
3.3.8 Tilgjengelig autentisering (minimum)AAIkke en autentiseringskomponent.
4.1.2 Navn, rolle, verdiAStandard-taggen er ren tekst uten interaktiv rolle. Interaktiv bruk (as="a"/"button") gir native rolle.
4.1.3 StatusmeldingerAATaggen genererer ingen statusmeldinger — den er statisk innhold.

Relatert

  • Chip — for interaktive valg og handlinger
  • Message — for statusmeldinger med mer innhold
  • Button — for handlinger