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
Footer Simple
Relaterte komponenter
Gir tilgang til hovednavigasjon Þverst pÄ siden
Samler navigasjonslenker i en meny i toppen
Viser hvor brukeren befinner seg i sidens struktur
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 |
Retningslinjer for bruk
Global footer
Bruk global footer nÄr
- 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.
Plassering av global footer
Footeren skal alltid plasseres nederst pÄ siden. Den brukes i alle tjenester der Oslo kommune er avsender.
Innhold i global footer
Innholdet i den globale footeren hentes automatisk fra oslo.kommune.no sin CDN.
SekundĂŠr footer
Bruk sekundÊr footer i tillegg til global footer nÄr
- 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
Plassering av sekundĂŠr footer
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.
Innhold i footer
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.
NÄr skal du bruke vanlig sekundÊr footer og nÄr skal man bruke den kompakte varianten?
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.
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):
Semantikk, lesbarhet og teknisk tilrettelegging i lenker og knapper.
Anatomi
Global versjon (standard footer med tre kolonner)
| 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 |
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 |
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 |
Implementasjon i kode
Hvordan ta komponenten i bruk?
import @oslokommune/punkt-elements/dist/pkt-footer.js; import { PktFooter } from '@oslokommune/punkt-react'; <script src="https://punkt-cdn.oslo.kommune.no/17/elements/pkt-footer.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-footer"); Hvordan ta komponenten i bruk?
import @oslokommune/punkt-elements/dist/pkt-footer-simple.js; import { PktFooterSimple } from '@oslokommune/punkt-react'; <script src="https://punkt-cdn.oslo.kommune.no/17/elements/pkt-footer-simple.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-footer-simple"); Innstillinger for informasjonskapsler / Consent
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
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:
-
onDataErrordata-error - Type:
- â
- Beskrivelse:
- Henting fra endepunktet feilet â den globale footeren skjules stille
- Event:
-
onToggleConsenttoggle-consent - Type:
- â
- Beskrivelse:
- Bruker endrer samtykke i Consent-dialogen
- 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
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:
-
onDataErrordata-error - Type:
- â
- Beskrivelse:
- Henting fra endepunktet feilet â den globale footeren skjules stille
- Event:
-
onToggleConsenttoggle-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