Gå til innholdet

Lenke (Link)

Lenkestilene er et rent CSS-verktøy som importeres separat fra @artsdatabanken/tokens. De er opt-in — ingen lenker styles automatisk. Du velger selv hvilke lenker som skal få stilen, enten enkeltvis med klassen .adb-link eller i bulk med containerklassen .adb-link-area.

Hvorfor ikke en Web Component?

Lenker (<a>) har rik nativ oppførsel — høyreklikkmeny, :visited, dra-og-slipp, tilgjengelighetstre. Å pakke dem i Shadow DOM ville bryte dette. En CSS-klasse gir full kontroll uten ulemper.

Installasjon

/* Importer lenkestiler (krever at tokens allerede er importert) */
@import '@artsdatabanken/tokens/link';

Legg til klassen .adb-link på enkelt-<a>-elementer:

Standard lenke

Artsdatabanken

Lenke i løpende tekst

Les mer om Rødlista for arter 2021 og hvordan den brukes i forvaltningen.

<a href="/om-oss" class="adb-link">Om oss</a>
<p>Les mer om <a href="/rodlista" class="adb-link">Rødlista</a> og hvordan den brukes.</p>

Legg til .adb-link-area på en container for å style alle <a>-elementer inni:

Alle lenker i containeren styles automatisk

<div class="adb-link-area">
<p>
Artsdatabanken forvalter <a href="/rodlista">Rødlista</a>,
<a href="/fremmedartslista">Fremmedartslista</a> og
<a href="/naturtyper">Naturtyper i Norge (NiN)</a>.
</p>
</div>

Dette erstatter lange selektorkjeder som .node__content p a, .properties a, … med én enkel klasse på containeren.

Legg til .adb-link--external for å vise et ikon som indikerer at lenken åpner et eksternt nettsted:

I et lenkeområde

<!-- Enkeltlenke -->
<a href="https://gbif.org" class="adb-link adb-link--external"
target="_blank" rel="noopener noreferrer">GBIF</a>
<!-- I et lenkeområde -->
<div class="adb-link-area">
<a href="https://gbif.org" class="adb-link--external"
target="_blank" rel="noopener noreferrer">GBIF</a>
</div>

I stedet for å legge til .adb-link--external manuelt på hver lenke, kan du bruke markExternalLinks() fra @artsdatabanken/components. Funksjonen skanner en container, oppdager eksterne lenker automatisk, og legger til klassen og skjermlesertekst.

import { markExternalLinks } from '@artsdatabanken/components/utils';
markExternalLinks(document, {
whitelistedHosts: ['artsdatabanken.no', 'lister.artsdatabanken.no'],
});

Funksjonen gjør tre ting:

  1. Finner alle <a>-elementer med href som starter med http
  2. Sammenligner hostname mot en whitelist (nåværende host er alltid inkludert)
  3. Legger til .adb-link--external og en <span class="adb-sr-only">(ekstern lenke)</span> på eksterne lenker
ParameterTypeStandardBeskrivelse
containerHTMLElement | DocumentdocumentElementet som skannes
options.whitelistedHostsstring[][]Ekstra vertsnavn som regnes som interne
options.srTextstring'(ekstern lenke)'Skjermlesertekst som legges til
options.srOnlyClassstring'adb-sr-only'CSS-klassen for skjult tekst

Bruk i ulike rammeverk

Drupal + Vite:

// I JavaScript entry-filen
import { markExternalLinks } from '@artsdatabanken/components/utils';
document.addEventListener('DOMContentLoaded', () => {
markExternalLinks(document, {
whitelistedHosts: ['artsdatabanken.no', 'lister.artsdatabanken.no'],
});
});

Angular:

import { markExternalLinks } from '@artsdatabanken/components/utils';
@Component({ ... })
export class AppComponent implements AfterViewInit {
ngAfterViewInit() {
markExternalLinks(document, {
whitelistedHosts: ['artsdatabanken.no'],
});
}
}

Migrasjon fra eksisterende SCSS

Erstatter @include styled-link() med CSS-klasser:

Før (SCSS)Etter (designsystemet)
@include styled-link() på enkeltselektor.adb-link<a>
.node__content p a, .properties a, ….adb-link-area på containeren
.styled-link.adb-link
.is-external + @include external-decoration().adb-link--external

API — CSS-klasser

KlasseBrukes påBeskrivelse
.adb-link<a>Styler en enkelt lenke
.adb-link-areaContainer (<div>, <section>, etc.)Styler alle <a> inne i containeren
.adb-link--external<a>Legger til eksternt-lenke-ikon etter lenketeksten
.adb-sr-onlyVilkårlig elementSkjuler visuelt, synlig for skjermlesere

Design-tokens brukt

TokenBruk
--adb-text-accentStandard lenkefarge
--adb-text-hoverLenkefarge ved hover
--adb-text-visitedLenkefarge etter besøk
--adb-surface-subtleBakgrunn ved aktiv-klikk
--adb-focus-outerFokusringens farge
--adb-spacing-2xsmAvstand mellom lenketekst og eksternt ikon

Universell utforming (WCAG 2.1 AA)

Understreking

Lenker er alltid understreket (2 px ::before-strek), som oppfyller WCAG 1.4.1 — lenker identifiseres ikke kun ved farge. Understreken øker til 4 px ved hover for tydelig visuell tilbakemelding.

Fargekontrast

TilstandFargeMot bakgrunnKontrastStatus
Standard#005A71#FFFCF75,3 : 1✅ AA
Hover#004557#FFFCF77,2 : 1✅ AA
Visited#616B6D#FFFCF74,5 : 1✅ AA

Fokusindikator

Fokusringen bruker samme mønster som knapper og trekkspill:

  • 4 px ytre outline (--adb-focus-outer / #262F31)
  • 4 px offset fra elementkanten
  • Vises kun ved tastaturnavigasjon (:focus-visible)

Ekstern-lenke-ikon

Ikonet er et visuelt hint (CSS ::after). For fullstendig tilgjengelighet:

  1. Legg til skjult tekst for skjermlesere: <span class="sr-only">(åpner i nytt vindu)</span>
  2. Bruk alltid rel="noopener noreferrer" med target="_blank" for sikkerhet

WCAG-kriterier

KriteriumNivåOppfyltMerknad
1.3.1 Informasjon og relasjonerANativt <a>-element — semantisk korrekt
1.4.1 Bruk av fargeAUnderstreking skiller lenker fra vanlig tekst
1.4.3 Kontrast (minimum)AAAlle tilstander ≥ 4,5 : 1
1.4.11 Kontrast for ikke-tekstlig innholdAAUnderstreking og ikon har tilstrekkelig kontrast
2.1.1 TastaturANative <a> — fungerer med Enter
2.4.7 Fokus synligAA4 px fokusring ved :focus-visible