Footer

Release dato: 08.05.2023

Sist oppdatert: 09.07.2026

Footer skal vÊre pÄ alle kommunens digitale flater som innbyggere mÞter. Den plasseres nederst pÄ siden og gir brukeren tilgang til viktige lenker som kontaktinformasjon, personvern og tilgjengelighet. Footeren (sammen med header) bidrar til Ä synliggjÞre Oslo kommune som avsender.

ForhÄndsvisningen er dessverre for smal til Ä vise desktop-versjonen av footer. Vi anbefaler at du Äpner forhÄndsvisningen i fullskjerm for Ä teste for stor skjerm.

Test komponenten

Relaterte komponenter

Varianter

Variant Bruk
Primary (global) Global footer for Oslo kommune som alltid skal ligge nederst pÄ siden
Secondary SekundĂŠr footer med innhold knyttet til den aktuelle lĂžsningen
Compact secondary Kompakt sekundĂŠr footer med en enkel lenkeliste
Primary (global) footer.
Primary (global) footer.
Eksampel pÄ normal og kompakt secondary footer.
Eksampel pÄ normal og kompakt secondary footer.

Retningslinjer for bruk

  • du lager lĂžsninger der Oslo kommune er avsender (i praksis skal footer alltid brukes i lĂžsninger der Oslo kommune er avsender)
  • du trenger et fast omrĂ„de for lenker til personvern, tilgjengelighet og kontaktinformasjon
  • du vil gjĂžre det tydelig at lĂžsningen tilhĂžrer Oslo kommune

I noen fÄ tilfeller, som interne verktÞy uten publikum, kan det vÊre mindre behov for global footer. Husk likevel at krav til tilgjengelighet gjelder flere lÞsninger, og det kan derfor vÊre lurt Ä ha footer uansett.

Footeren skal alltid plasseres nederst pÄ siden. Den brukes i alle tjenester der Oslo kommune er avsender.

Innholdet i den globale footeren hentes automatisk fra oslo.kommune.no sin CDN.


  • det er behov for spesifikk informasjon og navigasjon knyttet til lĂžsningen din
  • du trenger et omrĂ„de for lenker til personvern, tilgjengelighet og kontaktinformasjon spesifikt for lĂžsningen din

SekundÊr footer skal alltid brukes sammen med global footer og plasseres direkte over global footer nederst pÄ siden. SekundÊr footer skal ha en annen farge enn surface-strong-dark-blue, slik at det er tydelig at det er en egen seksjon.

Eksampel pÄ global og secondary footer sammen.
Eksampel pÄ global og secondary footer sammen.

Strukturen i den sekundÊre footeren bygger pÄ oslo.kommune.no sin standard, men du kan tilpasse tekst og lenker etter behov.

Husk:

  • Lenker i footeren skal ogsĂ„ vĂŠre tilgjengelige andre steder pĂ„ nettstedet.
  • UnngĂ„ Ă„ bruke bilder eller ikoner i footeren.
  • Ikke fyll footeren med for mange lenker.

Du bĂžr bruke den store varianten (normal) hvis du har behov for Ă„ vise flere kategoriserte lenker. Den kompakte varianten passer for lĂžsninger som kun trenger Ă„ vise en enkel liste med lenker.

Responsivitet

Footeren tilpasser seg automatisk skjermstÞrrelsen og bygger i hÞyden pÄ mindre skjermer. PÄ mobil og nettbrett vises innholdet i én kolonne for Ä sikre god lesbarhet.

Test alltid footeren i lÞsningen din pÄ ulike skjermstÞrrelser. Sjekk at alle lenker har god nok plass, og at tekst og navigasjon fortsatt fungerer godt, bÄde i stÄende og liggende visning.

Hvis du bruker footer med mange lenker, bÞr du vurdere rekkefÞlgen pÄ lenkene, slik at de viktigste vises fÞrst.

Global footer pÄ mobil
Global footer pÄ mobil

Universell utforming

Footeren mÄ fungere for alle brukere, uansett hvordan de navigerer. SÞrg for at alle lenker i footeren kan nÄs med tastatur og skjermleser.

Lenketekstene skal vÊre tydelige og beskrive hva brukeren kan forvente nÄr de klikker. Bruk eksternlenke-styling pÄ lenker som tar brukeren ut av lÞsningen, slik at det er tydelig at de Äpner en ny side.

Husk at footeren alltid inneholder viktige lenker, som personvern og tilgjengelighet. Disse mÄ vÊre lette Ä finne og bruke for alle.

Sjekk spesielt:

  • At alle lenker kan fokuseres med tastatur.
  • At lenketekstene gir mening ogsĂ„ uten kontekst.
  • At det er tilstrekkelig kontrast mellom tekst og bakgrunn (dette er ivaretatt av fargene i Punkt).

Les mer om universell utforming av lenker (i footer i dette tilfellet):

Anatomi

Element Beskrivelse
1. Bakgrunn HovedomrÄde med surface-strong-dark-blue bakgrunn og text-body-light tekst
2. Kolonnetittel 1 Tittel for fĂžrste kolonne
3. Lenker, kolonne 1 Klikkbare lenker i fĂžrste kolonne
4. Kolonnetittel 2 Tittel for andre kolonne
5. Lenker, kolonne 2 Klikkbare lenker i andre kolonne
6. Kolonnetittel 3 Tittel for tredje kolonne
7. Lenker, kolonne 3 Klikkbare lenker i tredje kolonne
8. SprÄklenke Lenke til annen sprÄklig versjon av nettstedet
9. Sosiale medier-lenker Lenker til Oslo kommunes kontoer
Anatomi av global footer

SekundĂŠr versjon med inntil tre kolonner

Element Beskrivelse
1. Bakgrunn HovedomrÄde med surface-strong-gray bakgrunn og text-body-dark tekst
2. Kolonnetittel 1 Tittel for fĂžrste kolonne
3. Tekst Beskrivende tekst eller forklaring i kolonnen
4. Lenker, kolonne 1 Klikkbare lenker i fĂžrste kolonne
5. Kolonnetittel 2 Tittel for andre kolonne
6. Lenker, kolonne 2 Klikkbare lenker i andre kolonne
7. Kolonnetittel 3 Tittel for tredje kolonne
8. Lenker, kolonne 3 Klikkbare lenker i tredje kolonne
Anatomi av global footer

Kompakt sekundĂŠr versjon

Element Beskrivelse
1. Bakgrunn HovedomrÄde med surface-strong-gray bakgrunn og text-body-dark tekst
2. Lenker Inntil fem lenker til relevante sider
Anatomi av enkel footer

Implementasjon i kode

Hvordan ta komponenten i bruk?

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-footer");

Hvordan ta komponenten i bruk?

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-footer-simple");

Footer kan brukes til Ă„ legge inn Consent-komponenten i bunnen av siden. Dette kan gjĂžres ved Ă„ sende inn includeConsent-prop’en til PktFooter og PktFooterSimple. Da vil det bli lagt til en lenke i footer som Ă„pner innstillingene for informasjonskapsler.

Se Consent for mer informasjon om hvordan du bruker denne komponenten.

Footer og FooterSimple stĂžtter alle Consent-komponentens attributter.

Content Security Policy / CSP

For Ă„ bruke footeren i din applikasjon mĂ„ du tillate https://cdn.web.oslo.kommune.no (eller https://*.oslo.kommune.no) i din Content Security Policy. Spesifikt mĂ„ connect-src tillates, og dette kommer av at den globale footeren henter innholdet sitt fra Oslo kommunes CDN — samme endepunkt som den globale headeren:

connect-src 'self' https://punkt-cdn.oslo.kommune.no/ https://cdn.web.oslo.kommune.no/;

Setter du en egen dataUrl, er det den URL-en som mĂ„ tillates i stedet. Alternativt kan du hente payloaden pĂ„ serversiden og sende den inn via data-propen – da trenger ikke nettleseren tilgang til endepunktet i det hele tatt. Kan du ikke tillate endepunktet, kan du droppe den globale footeren med skipGlobal.

Bruker du includeConsent, laster Consent-komponenten i tillegg inn script og stilark fra samme CDN, sÄ script-src og style-src mÄ ogsÄ tillates:

script-src 'self' https://cdn.web.oslo.kommune.no/;
style-src 'self' https://cdn.web.oslo.kommune.no/;

Se ellers den generelle CSP-veiledningen for oppsettet Punkt-komponentene trenger (blant annet ikoner og fonter fra punkt-cdn.oslo.kommune.no).

SpĂžr oss gjerne om du trenger hjelp til Ă„ sette opp CSP!

Endringer fra versjon 16 til versjon 17

Versjon 17 gjĂžr om footeren fullstendig: alt standardinnhold flyttes til en ny global footer (blĂ„tt bĂ„nd) som henter innhold fra Oslo kommunes felles header/footer-endepunkt — samme endepunkt som den globale headeren. Custom innhold rendres i et grĂ„tt «sekundĂŠr»-bĂ„nd som stables oppĂ„ den globale footeren. Uten custom innhold rendres kun den globale.

Nye funksjoner

Prop/Event Beskrivelse
columns Custom innhold som kolonner (tittel + valgfri tekst + lenker) i sekundÊr-bÄndet (PktFooter)
skipGlobal Dropp den globale footeren, f.eks. nÄr CSP hindrer henting fra CDN-endepunktet
data / dataUrl ForhĂ„ndshentet payload eller egendefinert endepunkt — samme mĂžnster som PktHeader type="global"
locale SprÄknÞkkel som velges fra payloaden (standard nb-NO)
onDataError Callback/event nÄr henting fra endepunktet feiler (den globale footeren skjules stille)
Web Components pkt-footer og pkt-footer-simple finnes nÄ ogsÄ i Punkt Elements

Breaking changes

Utseende og innhold

Type endring Beskrivelse
GrÄ sekundÊr footer Custom innhold fÄr grÄ bakgrunn (var mÞrk blÄ). Farger kan overstyres med --pkt-footer-bg/-fg. Ved mÞrk bakgrunn: sett ogsÄ --pkt-footer-link-hover (standard hover-farge er beregnet pÄ lys bakgrunn)
Global footer BlÄtt bÄnd med innhold fra CDN rendres automatisk under custom innhold (opt-out med skipGlobal)
«Om nettstedet» Personvern- og tilgjengelighetslenkene kommer nÄ fra payloaden i den globale footeren
Eksterne lenker Lenker ut av oslo.kommune.no i den globale footeren merkes automatisk med toppdomene i parentes i stedet for ikon. Custom lenker med external-flagget fÄr samme merking (ikke lenger pkt-link--external-stil)
Consent Payloadens #cb-trigger-lenke erstattes av Punkts Consent-dialog nÄr includeConsent er satt, ellers skjules den
CSS-klasser Klassestrukturen i .pkt-footer og .pkt-footer-simple er skrevet om — egne CSS-overstyringer mĂ„ oppdateres
data-mode="dark" Settes ikke lenger pÄ rot-elementet; den globale footeren hÄndterer dette selv

Deprecated props (kun React)

Prop Erstatning
columnOne / columnTwo Bruk columns. Mappes automatisk inntil videre
personvernOgInfoLink Kommer fra global footer. Rendres kun i sekundÊr-bÄndet hvis eksplisitt overstyrt til noe annet enn default
tilgjengelighetLink Kommer fra global footer. Rendres kun i sekundÊr-bÄndet hvis eksplisitt overstyrt til noe annet enn default
socialLinks Kommer fra global footer. Rendres i sekundÊr-bÄndet hvis satt (PktFooter)

Egenskaper

PktFooter

Props

Prop:
columns?
Type:
array
Beskrivelse:
Kolonner (1–3) som rendres i det grĂ„ sekundĂŠr-bĂ„ndet over den globale footeren. Uten kolonner rendres kun den globale footeren.
Prop:
skipGlobal?
skip-global?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Dropper den globale (blÄ) footeren, f.eks. nÄr CSP hindrer henting fra CDN-endepunktet. Kun det grÄ sekundÊr-bÄndet rendres.
Prop:
data?
Type:
object
Beskrivelse:
Hele API-responsen fra header/footer-endepunktet. Settes hvis du allerede har dataene (f.eks. nÄr header og footer deler én fetch). NÄr denne er satt, skipper komponenten nettverkskallet.
Prop:
dataUrl?
data-url?
Type:
string
Standardverdi:
"https://cdn.web.oslo.kommune.no/header-footer/header-footer.json"
Beskrivelse:
URL den globale footeren henter innhold fra. Standard er Oslo kommunes felles header/footer-endepunkt (samme som global header).
Prop:
locale?
Type:
"nb-NO" | "en-GB"
Beskrivelse:
Hvilken sprÄknÞkkel som skal velges fra payloaden. Faller tilbake til nb-NO hvis valgt sprÄk mangler.
Prop:
openLinksInNewTab?
open-links-in-new-tab?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Åpner alle custom lenker i ny fane. Gjelder kun innholdet i sekundĂŠr-bĂ„ndet.
Prop:
includeConsent?
include-consent?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Erstatter payloadens «Innstillinger for informasjonskapsler»-lenke med Punkts egen Consent-dialog. Uten denne skjules lenken helt.
Prop:
googleAnalyticsId?
google-analytics-id?
Type:
string
Beskrivelse:
Google Analytics-ID for sporing via Consent-komponenten
Prop:
hotjarId?
hotjar-id?
Type:
string
Beskrivelse:
Hotjar-ID for sporing via Consent-komponenten

Events

Event:
onDataError
data-error
Type:
—
Beskrivelse:
Henting fra endepunktet feilet — den globale footeren skjules stille
Event:
onToggleConsent
toggle-consent
Type:
—
Beskrivelse:
Bruker endrer samtykke i Consent-dialogen

IPktFooterColumn

Prop:
title
Type:
string
Beskrivelse:
Overskrift for kolonnen
Prop:
text?
Type:
string
Beskrivelse:
Valgfri tekst som vises over lenkene
Prop:
links?
Type:
array
Beskrivelse:
Lenker i kolonnen

PktFooterSimple

Props

Prop:
links?
Type:
array
Beskrivelse:
Lenker som rendres som en kompakt, sentrert rad med pil-ikoner i det grÄ sekundÊr-bÄndet over den globale footeren. Uten lenker rendres kun den globale footeren.
Prop:
skipGlobal?
skip-global?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Dropper den globale (blÄ) footeren, f.eks. nÄr CSP hindrer henting fra CDN-endepunktet. Kun det grÄ sekundÊr-bÄndet rendres.
Prop:
data?
Type:
object
Beskrivelse:
Hele API-responsen fra header/footer-endepunktet. Settes hvis du allerede har dataene (f.eks. nÄr header og footer deler én fetch). NÄr denne er satt, skipper komponenten nettverkskallet.
Prop:
dataUrl?
data-url?
Type:
string
Standardverdi:
"https://cdn.web.oslo.kommune.no/header-footer/header-footer.json"
Beskrivelse:
URL den globale footeren henter innhold fra. Standard er Oslo kommunes felles header/footer-endepunkt (samme som global header).
Prop:
locale?
Type:
"nb-NO" | "en-GB"
Beskrivelse:
Hvilken sprÄknÞkkel som skal velges fra payloaden. Faller tilbake til nb-NO hvis valgt sprÄk mangler.
Prop:
openLinksInNewTab?
open-links-in-new-tab?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Åpner alle custom lenker i ny fane. Gjelder kun innholdet i sekundĂŠr-bĂ„ndet.
Prop:
includeConsent?
include-consent?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Erstatter payloadens «Innstillinger for informasjonskapsler»-lenke med Punkts egen Consent-dialog. Uten denne skjules lenken helt.
Prop:
googleAnalyticsId?
google-analytics-id?
Type:
string
Beskrivelse:
Google Analytics-ID for sporing via Consent-komponenten
Prop:
hotjarId?
hotjar-id?
Type:
string
Beskrivelse:
Hotjar-ID for sporing via Consent-komponenten

Events

Event:
onDataError
data-error
Type:
—
Beskrivelse:
Henting fra endepunktet feilet — den globale footeren skjules stille
Event:
onToggleConsent
toggle-consent
Type:
—
Beskrivelse:
Bruker endrer samtykke i Consent-dialogen
Prop:
href
Type:
string
Beskrivelse:
URL for lenken
Prop:
text
Type:
string
Beskrivelse:
Tekst for lenken
Prop:
external?
Type:
boolean
Beskrivelse:
Merker lenken som ekstern: toppdomenet vises i parentes bak lenketeksten
Prop:
openInNewTab?
Type:
boolean
Beskrivelse:
Åpner lenken i ny fane