Gå til innholdet

Knapp (Button)

Eksempler på ulike typer

PrimærSekundærTertiær

Bruk knapp heller enn lenke når brukeren skal utføre en handling eller endrer tilstand i tjenesten. Eksempler på dette kan være: Lagre, logg inn, send inn, publiser, sidebytte (paginering).

Noen ganger kan det være konflikt mellom hva som skjer rent teknisk og hva brukeren opplever, da er det brukerens oppleve som skal følges.

Noen unntak

Ett unntak her er ved bruk av faner - her er det tillatt å bruke fane-navigering som ikke er knapper, ettersom dette er et etablert interaksjonsmønster.

I tilfeller hvor det er mange valg, eksempelvis ved endring av språk kan også gjøres med en nedtrekksmeny.

Primærknapp

Begrens bruk av primærknapp til en knapp per side som er hovedaksjonen for siden.

Vurder hva som er de viktigste aksjonene, og la disse få mest oppmerksomhet.

Oppmerksomhet

Farger i Attention farge (rød) bør primært brukes til aksjoner som er ikke brukeren kan angre handlingen sin. Eksempelvis Slett etc.

Brukes veldig sparsommelig.

Disabled

Bør unngås. Brukeren bør kunne trykke på en aktiv knapp, som løser ut en tilbakemelding til brukeren om hva som mangler før hen eksempelvis kan gå videre.

Knappetekst

Bruk tekst på knapper så langt det lar seg gjøre. Teksten skal være kort og beskrivende for aksjonen. Helst to og maks tre ord.

For etablerte konvensjoner (eks. X for å lukke), eller knapper som opptrer flere ganger i samme skjermbilde kan man bruke en knapp med kun ikon. Det samme gjelder knapperekker som er å anse som “verktøylinjer” hvor det er behov for å være plasseffektiv.

<adb-button> er en Web Component som fungerer i alle rammeverk. Internt bruker den et semantisk korrekt <button>-element, som gir tastaturnavigasjon og skjermleserstøtte gratis.

Varianter

Tre visuelle vektnivåer × to fargeroller:

Primary

AccentSlett konto

Secondary

AccentAvbryt sletting

Tertiary

Nøytral

Størrelser

LitenMediumStor

Med ikon

Bruk icon-start-sloten for ikon foran tekst, og icon-end-sloten for ikon bak tekst.

Ikon foran (icon-start)

SøkSøkSøk

Ikon bak (icon-end)

Les merLes mer
<adb-button variant="primary">
<adb-icon slot="icon-start" name="search"></adb-icon>
Søk
</adb-button>
<adb-button variant="secondary">
Les mer
<adb-icon slot="icon-end" name="open-in-new"></adb-icon>
</adb-button>

For knapper som kun inneholder et ikon (ingen tekst), bruk <adb-icon-button> i stedet.

Deaktiverte knapper

PrimarySecondaryTertiary

Deaktiverte knapper fjernes fra tab-rekkefølgen (native disabled). Bruk disabled bare når årsaken er synlig i konteksten — ellers kan brukere bli forvirret over hvorfor knappen ikke kan aktiveres.

Bruk

Vanlig handling

<adb-button variant="primary" color="accent">Lagre endringer</adb-button>
<adb-button variant="secondary" color="accent">Avbryt</adb-button>

Destruktiv handling

Bruk alltid beskrivende tekst på danger-knapper — ikke bare «Bekreft». Fargen alene er ikke tilstrekkelig (WCAG 1.4.1).

<!-- ✅ Riktig: teksten beskriver handlingen -->
<adb-button variant="primary" color="danger">Slett konto</adb-button>
<!-- ❌ Feil: teksten gir ingen kontekst -->
<adb-button variant="primary" color="danger">Bekreft</adb-button>

I skjemaer

<form>
<adb-button type="submit">Send inn</adb-button>
<adb-button type="reset" variant="tertiary">Tilbakestill</adb-button>
</form>

Disclosure / toggle (aria-controls + aria-expanded)

Bruk aria-controls og aria-expanded for knapper som åpner/lukker innhold — f.eks. dropdown-menyer, accordion-paneler eller sidepaneler.

<adb-button
aria-controls="filter-panel"
aria-expanded="false"
variant="secondary"
>Vis filtre</adb-button>
<div id="filter-panel" hidden>
<!-- Filterinnhold -->
</div>

Attributtene videresendes til det indre <button>- eller <a>-elementet, slik at skjermlesere korrekt annonserer relasjonen.

API

AttributtTypeStandardBeskrivelse
variantprimary | secondary | tertiaryprimaryVisuell vekt
coloraccent | dangeraccentFargebruk. Ignoreres av tertiary.
sizesm | md | lgmdStørrelse
disabledbooleanfalseDeaktiverer knappen og fjerner den fra tab-rekkefølgen
typebutton | submit | resetbuttonNative type-attributt. Ignoreres når href er satt.
hrefstringNår satt, rendres et <a>-element i stedet for <button>
target_self | _blank | _parent | _topLenke-mål. Kun brukt med href.
downloadstringFilnavn for nedlasting. Kun brukt med href.
relstringLenkerelasjoner. Automatisk noopener noreferrer ved target="_blank".
aria-labelstringPåkrevd når knappen kun inneholder ikon
aria-controlsstringID-en til elementet knappen styrer (f.eks. dropdown, accordion)
aria-expanded'true' | 'false'Om det kontrollerte elementet er åpent — for disclosure-mønstre

Slots

SlotBeskrivelse
(standard)Knappetext
icon-startIkon før teksten
icon-endIkon etter teksten

CSS Parts

Bruk ::part(base) for å overstyre stiler utenfra shadow DOM:

adb-button::part(base) {
letter-spacing: 0.05em;
}

Universell utforming (WCAG 2.1 AA)

Semantikk

Komponenten rendrer alltid et native <button>-element i shadow DOM. Dette betyr at:

  • Rollen button er automatisk eksponert til hjelpemidler
  • Enter og Space aktiverer knappen uten ekstra kode
  • disabled-attributtet kommuniseres til skjermlesere som «utilgjengelig» eller «deaktivert»

Tastaturnavigasjon

TastHandling
TabFlytt fokus til knappen
Shift + TabFlytt fokus tilbake
EnterAktiver knappen
SpaceAktiver knappen

Fokusindikator

Fokusringen er implementert etter WCAG 2.4.7 og 2.4.11:

  • 3 px ytre outline (#262F31 — høy kontrast)
  • 2 px offset + 5 px hvit boks-skygge for synlighet mot alle bakgrunner
  • Vises kun ved tastaturnavigasjon (focus-visible) — ikke ved museklikk
button:focus-visible {
outline: 3px solid var(--adb-focus-outer, #262F31);
outline-offset: 2px;
box-shadow: 0 0 0 5px var(--adb-focus-inner, #FFFFFF);
}

Fargekontrast

Alle varianter oppfyller WCAG 1.4.3 (tekst, AA) og 1.4.11 (UI-komponenter, AA):

VariantForgrunns­fargeBakgrunns­fargeKontrastStatus
Primary accent#FFFFFF#005A715,2:1✅ AA
Primary danger#FFFFFF#B807386,8:1✅ AA
Secondary accent (tekst)#005A71#FFFFFF5,2:1✅ AA
Secondary accent (kant)#005A71#FFFFFF5,2:1✅ AA (≥3:1)
Secondary danger (tekst)#9A0024#FFFFFF8,7:1✅ AA
Secondary danger (kant)#B80738#FFFFFF6,8:1✅ AA (≥3:1)
Tertiary#262F31#D2DDE09,9:1✅ AA

Berøringsflatestørrelse

StørrelseHøyde (ca.)WCAG 2.5.5 (AAA)Anbefaling
sm~29 px❌ Under 44 pxKun til kompakte grensesnitt
md~40 px❌ Under 44 pxStandard — tilstrekkelig i praksis
lg~52 px✅ Over 44 pxBruk på mobil og i skjemaer

Merk: WCAG 2.1 AA krever ikke 44 px (det er AAA). Men det er god praksis på mobil. Bruk lg i touch-kontekster.

Deaktiverte knapper

disabled-attributtet setter både native HTML disabled og aria-disabled="true". Dette betyr:

  • Knappen fjernes fra tab-rekkefølgen (kan ikke nås med Tab)
  • Skjermlesere annonserer den som «utilgjengelig»

Bruk disabled kun når årsaken er synlig — f.eks. et skjema med ugyldig input der valideringsfeilen er synlig. Hvis brukeren ikke forstår hvorfor knappen er deaktivert, er det bedre å la den være aktiv og gi en feilmelding ved klikk.

Fargebruk og danger

color="danger" bruker rød farge for å signalisere en destruktiv handling. Rød farge alene er ikke tilstrekkelig — det er en brudd på WCAG 1.4.1 (fargebruk). Alltid bruk beskrivende knappetext som kommuniserer handlingen, f.eks. «Slett konto» fremfor «Bekreft».

WCAG-kriterier

KriteriumNivåOppfyltMerknad
1.1.1 Ikke-tekstlig innholdAaria-label støttes for ikonknapper
1.3.1 Informasjon og relasjonerANative <button> — semantisk korrekt
1.4.1 Bruk av fargeA⚠️danger bruker farge — teksten beskrive handlingen
1.4.3 Kontrast (minimum)AAAlle varianter ≥4,5:1
1.4.11 Kontrast for ikke-tekstlig innholdAAKanter og fokusring ≥3:1
2.1.1 TastaturANative <button> — Enter og Space fungerer
2.4.7 Fokus synligAA3 px fokusring ved focus-visible
2.5.3 Etikett i navnASynlig tekst = tilgjengelig navn
4.1.2 Navn, rolle, verdiARolle: button, tilstand: aria-disabled