How do I Make my off-canvas responsive?

Off-canvas Menuer: Byg Responsiv Mobil Navigation

14/01/2026

Rating: 4.76 (3453 votes)

I en verden, hvor mobiltelefonen er blevet vores primære adgang til internettet, er en effektiv og brugervenlig mobilnavigation altafgørende for enhver hjemmeside eller webapplikation. En af de mest populære og elegante løsninger til dette formål er den såkaldte off-canvas menu. Denne navigationsmetode, der ofte ses i mobile apps, giver en renere brugerflade og en mere intuitiv brugeroplevelse, især på mindre skærme. Men hvad er en off-canvas menu egentlig, hvordan fungerer den, og hvordan implementerer man den responsivt?

Denne artikel dykker ned i off-canvas menukonceptet, forklarer dets fordele, udforsker de forskellige implementeringsmuligheder – herunder Bootstraps egen løsning og dedikerede plugins – og giver dig en trin-for-trin guide til at bygge en responsiv off-canvas menu fra bunden. Målet er at give dig en dybdegående forståelse og praktiske værktøjer til at forbedre din hjemmesides mobilnavigation og dermed give dine brugere en gnidningsfri og tiltalende oplevelse.

Can offcanvas be shown at a time?
When shown, offcanvas includes a default backdrop that can be clicked to hide the offcanvas. Similar to modals, only one offcanvas can be shown at a time. Heads up! Given how CSS handles animations, you cannot use margin or translate on an .offcanvas element. Instead, use the class as an independent wrapping element.
Indholdsfortegnelse

Hvad er en Off-canvas Mobilmenu?

En off-canvas mobilmenu er et designkoncept for navigation, der er bredt anvendt på moderne web- og mobilapplikationer. Essentielt set er det en navigationsmenu, der er placeret uden for skærmens synlige område ('off-canvas'), indtil den aktiveres af brugeren. Når den aktiveres – typisk ved at trykke på et 'hamburger-ikon' – glider den ind i syne fra siden, toppen eller bunden af skærmen, og skubber ofte det eksisterende indhold til side eller overlejrer det.

Denne tilgang adskiller sig markant fra traditionelle navigationsbjælker, der altid er synlige. Fordelen ved off-canvas er, at den sparer værdifuld skærmplads på mindre enheder, hvilket giver mere plads til indholdet. Når menuen ikke er i brug, er den gemt væk, og kun når den er nødvendig, dukker den op. Dette skaber en meget renere og mindre rodet brugerflade, hvilket bidrager til en forbedret brugeroplevelse, der minder om den, man finder i native mobilapplikationer.

Off-canvas navigation er en tværplatformsløsning, hvilket betyder, at den fungerer effektivt på tværs af forskellige enheder og operativsystemer. Den er designet til at give en elegant måde at vise og skjule din hjemmesides navigation på, hvilket gør det nemt for besøgende at navigere rundt på dit site, uanset skærmstørrelse.

Fordelene ved Off-canvas Design

Off-canvas menuer tilbyder en række fordele, der gør dem til et foretrukket valg for mobilnavigation:

  • Pladsbesparelse: Den mest indlysende fordel er, at menuen ikke optager konstant skærmplads. Dette er afgørende på små mobilskærme, hvor hver pixel tæller. Ved at skjule navigationen, når den ikke er i brug, kan du præsentere mere indhold og skabe en renere visuel oplevelse.
  • Forbedret Brugeroplevelse: Den elegante ind- og udskydningseffekt giver en dynamisk og moderne følelse. Brugere er efterhånden vant til denne type navigation fra mobilapps, hvilket gør den intuitiv og nem at forstå.
  • Fokus på Indhold: Når navigationen er skjult, er brugerens fokus udelukkende på sidens indhold. Dette kan forbedre engagementet og reducere visuel støj.
  • Organisering af Kompleks Navigation: Off-canvas menuer kan nemt håndtere flere niveauer af underkategorier (drilldown-menuer), hvilket gør dem ideelle til hjemmesider med en dyb og kompleks navigationsstruktur. Alle menupunkter kan organiseres pænt, uden at overvælde brugeren.
  • Responsivitet: De er designet fra grunden til at være responsive og tilpasse sig flydende til forskellige skærmstørrelser og retninger, hvilket sikrer en konsekvent oplevelse på tværs af alle enheder.

Mmenu vs. Bootstrap: Valg af Off-canvas Løsning

Når det kommer til implementering af off-canvas menuer, står udviklere ofte over for valget mellem at bruge et framework som Bootstrap, der tilbyder en indbygget løsning, eller at vælge en dedikeret JavaScript/jQuery plugin.

Bootstraps Indbyggede Offcanvas-komponent

Bootstrap, et populært front-end framework, inkluderer sin egen offcanvas-komponent. Denne komponent er en sidebar, der kan toggles via JavaScript til at fremkomme fra venstre, højre, top eller bund af viewporten. Den deler en del af sin JavaScript-kode og Sass-variabler med modaler, hvilket indikerer en lignende funktionalitet og opbygning. Bootstraps offcanvas er designet til at være let at implementere med få klasser og data-attributter.

Vigtige egenskaber ved Bootstraps offcanvas:

  • Den kan toggles med knapper eller ankre ved hjælp af data-bs-toggle="offcanvas" og data-bs-target eller href.
  • Den inkluderer som standard et backdrop, der kan klikkes for at skjule offcanvas-menuen.
  • Ligesom modaler kan kun én offcanvas vises ad gangen.
  • Placeringen styres via modificerende klasser som .offcanvas-start, .offcanvas-end, .offcanvas-top og .offcanvas-bottom.
  • Det er muligt at styre, om body-elementet kan scrolles, når offcanvas er åben, samt om backdrop skal vises, via data-bs-scroll og data-bs-backdrop attributter.
  • For tilgængelighed anbefales det at tilføje aria-labelledby="..." til .offcanvas-elementet, der refererer til offcanvas-titlen.

Bootstraps offcanvas er en robust og velintegreret løsning, der passer godt til projekter, der allerede bruger Bootstrap og ønsker en hurtig og konsistent implementering.

What is off-canvas Mobile Menu?
Off-canvas Mobile Menu is a cross-platform navigation design concept for modern web & mobile design. It is now widely used on web and mobile applications. The off-canvas navigation system enables the visitor to show/hide your site navigation in an elegant way, as you see on most mobile App.

Dedikerede Off-canvas Plugins

Udover Bootstraps indbyggede løsning findes der et væld af dedikerede off-canvas plugins, både til jQuery, Vanilla JavaScript og Pure CSS. Disse plugins er ofte udviklet med et specifikt fokus på avancerede funktioner, høj tilpasningsmulighed og unikke animationer. Eksempler inkluderer mmenu (en populær jQuery-plugin), HC MobileNav, og forskellige rene JavaScript/CSS-løsninger.

Hver plugin har sine egne styrker. Nogle fokuserer på minimalisme, andre på multi-level navigation, og atter andre på fuld tilgængelighed eller specifikke designæstetikker. Valget af en dedikeret plugin frem for Bootstraps indbyggede løsning afhænger ofte af projektets specifikke behov for funktionalitet, designfrihed og performance.

Kan mmenu erstatte Bootstraps standard mobilmenu?

Den information, der er stillet til rådighed, beskriver ikke specifikt, hvordan mmenu integreres med eller erstatter Bootstraps standard mobilmenu. Generelt kan man dog sige, at mange udviklere vælger at bruge en dedikeret off-canvas plugin som mmenu, hvis de har brug for specifikke funktioner eller et design, der går ud over, hvad et framework som Bootstrap tilbyder som standard. Det er teknisk muligt at erstatte Bootstraps navigationskomponenter med en tredjepartsløsning, men det kræver typisk manuel integration og deaktivering af Bootstraps egne JavaScript-komponenter for at undgå konflikter.

Implementering: Byg en Responsiv Off-canvas Menu

At bygge en responsiv off-canvas menu fra bunden involverer en kombination af HTML, CSS og JavaScript. Her er en simplificeret, men effektiv metode, baseret på principperne for off-canvas design:

HTML Markup: Grundlaget

Vores HTML-struktur vil bestå af to primære wrapper-elementer: .top-banner og .top-nav. .top-banner vil indeholde sidens primære indhold, og .top-nav vil indeholde navigationsmenuen.

<section class="top-banner"> <div class="top-banner-overlay"> <!-- Indhold her --> </div> </section> <nav class="top-nav"> <div class="menu-wrapper"> <!-- Menu indhold her --> </div> <div class="fixed-menu"> <!-- Toggle knap og andre faste elementer her --> </div> </nav>

.menu-wrapper vil være selve off-canvas menuen, der glider ind og ud, og .fixed-menu vil være den altid synlige del (f.eks. hamburger-ikonet).

CSS Styling: Visuel Præsentation

CSS'en er afgørende for at skabe off-canvas-effekten. Vi skal skjule .menu-wrapper som standard og positionere .fixed-menu. Animationer opnås via CSS-overgange.

Styling af .top-banner

.top-banner skal have en position og bredde, der tager højde for den faste menu. Den vil også fungere som en flex-container for at centrere indholdet.

Can mmenu open off-canvas menu instead of bootstrap's default Mobile Menu?
.top-banner { position: relative; left: 150px; /* Bredden af .fixed-menu */ display: flex; width: calc(100% - 150px); height: 100vh; background: url(IMAGE_PATH) no-repeat center / cover; } .top-banner-overlay { display: flex; flex-direction: column; justify-content: center; width: 350px; /* Bredden af menuen */ padding: 20px; transition: all .7s; color: var(--white); background: rgba(0, 0, 0, .7); }

Styling af .top-nav

.top-nav indeholder .menu-wrapper (den skjulte menu) og .fixed-menu (den synlige del). .menu-wrapper skjules ved at bruge transform: translateX().

.top-nav .menu-wrapper { position: fixed; top: 0; left: 0; bottom: 0; width: 350px; padding: 20px; transform: translateX(-200px); /* Skjuler menuen delvist */ transition: transform .7s; background: var(--menu-color); } .top-nav .menu-wrapper .menu { opacity: 0; transition: opacity .4s; } .top-nav .fixed-menu { position: fixed; top: 0; left: 0; bottom: 0; display: flex; flex-direction: column; width: 150px; /* Bredden af den faste menu */ padding: 20px; background: var(--fixed-menu-color); }

JavaScript: Interaktivitet og Kontrol

JavaScript håndterer toggling af menuens synlighed ved at tilføje og fjerne CSS-klasser. Det inkluderer også tastaturunderstøttelse for tilgængelighed.

const topNav = document.querySelector(".top-nav"); const menuToggle = topNav.querySelector(".menu-toggle"); const menuClose = topNav.querySelector(".menu-close"); const menuWrapper = topNav.querySelector(".menu-wrapper"); const topBannerOverlay = document.querySelector(".top-banner-overlay"); const isOpenedClass = "is-opened"; const isMovedClass = "is-moved"; menuToggle.addEventListener("click", () => { menuWrapper.classList.toggle(isOpenedClass); topBannerOverlay.classList.toggle(isMovedClass); }); menuClose.addEventListener("click", () => { menuWrapper.classList.remove(isOpenedClass); topBannerOverlay.classList.remove(isMovedClass); }); document.addEventListener("keydown", (e) => { if (e.key == 'Escape' && menuWrapper.classList.contains(isOpenedClass)) { menuClose.click(); } });

Og de tilhørende CSS-klasser, der aktiveres af JavaScript:

.top-banner-overlay.is-moved { transform: translateX(350px); /* Flytter overlayet, når menuen er åben */ } .top-banner-overlay.is-moved::before { content: ""; position: absolute; top: 0; bottom: 0; right: 100%; width: 20px; box-shadow: 3px 0 10px rgba(0, 0, 0, .75); } .top-nav .menu-wrapper.is-opened { transform: translateX(150px); /* Flytter menuen ind i syne */ } .top-nav .menu-wrapper.is-opened .menu { opacity: 1; transition-delay: .6s; }

Gør Din Menu Responsiv

For at sikre at menuen fungerer optimalt på forskellige skærmstørrelser, bruger vi medieforespørgsler. Typisk vil vi justere layoutet, når skærmbredden falder under en bestemt tærskel (f.eks. 900px).

@media (max-width: 900px) { body { font-size: 16px; overflow-x: hidden; } .top-banner { top: 50px; left: auto; width: 100%; height: calc(100vh - 50px); transform: none; align-items: center; } .top-banner-overlay { position: relative; /* Tilpasning for mobil */ left: 0; /* Tilpasning for mobil */ max-width: 100%; } .top-banner-overlay.is-moved { left: 100%; /* Flytter overlayet ud af syne på mobil */ transform: none; } .top-nav .menu-wrapper { width: 100%; transform: translateX(-100%); /* Skjuler menuen helt på mobil */ padding-top: 70px; } .top-nav .menu-wrapper.is-opened { transform: none; } .top-nav .menu-wrapper .menu-close { top: 70px; } .top-nav .fixed-menu { bottom: auto; flex-direction: row; align-items: center; width: 100%; height: 50px; /* Fast højde på mobil */ padding: 0 20px; } .top-nav .fixed-menu .menu-toggle { margin: 0; order: 3; } .top-nav .socials { display: flex; margin-left: auto; margin-right: 20px; } }

Ryd Op i Overgange ved Vinduesændring

For at undgå visuelle fejl under vinduesændringer er det en god praksis at deaktivere CSS-overgange midlertidigt under ændringsprocessen:

const body = document.body; const noTransitionClass = "no-transition"; let resize; window.addEventListener("resize", () => { body.classList.add(noTransitionClass); clearTimeout(resize); resize = setTimeout(() => { body.classList.remove(noTransitionClass); }, 500); });

Og den tilhørende CSS:

.no-transition * { transition: none !important; }

Vigtige Overvejelser og Bedste Praksisser

Når du implementerer en off-canvas menu, er der flere vigtige aspekter ud over den grundlæggende funktionalitet, der bør overvejes for at sikre en optimal brugeroplevelse.

Tilgængelighed (Accessibility)

Selvom fokus i denne guide er på funktionalitet og responsivitet, er tilgængelighed afgørende. En off-canvas menu bør være fuldt tilgængelig for brugere med skærmlæsere og tastaturnavigation. Dette indebærer brug af korrekte ARIA-attributter (f.eks. aria-expanded, aria-controls, aria-label) og at sikre, at menuen kan navigeres og lukkes udelukkende med tastaturet (f.eks. med Esc-tasten).

Brugeroplevelse (User Experience)

Overvej hvordan menuen påvirker brugeroplevelsen. Skal indholdet skubbes, eller skal menuen overlejre indholdet? Skal der være et backdrop, der blokerer interaktion med det underliggende indhold? Disse valg påvirker, hvor intuitiv og distraherende menuen er. En god off-canvas menu er diskret, når den er skjult, og let tilgængelig, når den er nødvendig.

Can mmenu open off-canvas menu instead of bootstrap's default Mobile Menu?

Ydeevne (Performance)

Brug CSS-egenskaber som transform og opacity til animationer, da disse er mere ydeevne-effektive end at animere left, margin eller width. Undgå unødvendige DOM-manipulationer, og sørg for, at JavaScript-koden er optimeret for at forhindre jank (hakken) under animationer, især på mindre kraftfulde enheder.

Sammenligningstabel: Bootstrap Offcanvas vs. Dedikerede Plugins

For at hjælpe dig med at træffe en informeret beslutning, her er en simpel sammenligning mellem Bootstraps indbyggede offcanvas og dedikerede off-canvas plugins:

FunktionBootstraps OffcanvasDedikerede Plugins (f.eks. mmenu, HC MobileNav)
ImplementeringMeget enkel, baseret på klasser og data-attributter i et eksisterende Bootstrap-projekt.Kræver typisk installation og manuel integration; mere opsætning nødvendig.
TilpasningGod, men begrænset af Bootstraps Sass-variabler og struktur.Meget høj, ofte med et væld af konfigurationsmuligheder og API'er.
FunktionalitetGrundlæggende off-canvas funktionalitet (sidebars, backdrop, scroll-kontrol).Ofte mere avancerede funktioner som multi-level drilldown, søgefelter, ikoner, etc.
AfhængighedAfhænger af Bootstrap JS og CSS.Kan være standalone Vanilla JS, jQuery-baseret eller pure CSS.
FilstørrelseDel af Bootstraps samlede pakke; relativt lille tillæg.Varierer, men kan tilføje mere til den samlede filstørrelse, hvis kun off-canvas er nødvendig.
KompleksitetLav for grundlæggende brug.Mellem til høj, afhængig af plugin og ønskede funktioner.

Ofte Stillede Spørgsmål (FAQ)

Her er svar på nogle almindelige spørgsmål vedrørende off-canvas menuer:

Kan flere off-canvas menuer vises samtidigt?

Nej, ifølge standard Bootstrap-implementering, og ligesom modals, kan kun én off-canvas menu vises ad gangen. Dette designvalg er truffet for at undgå forvirring og opretholde en ren brugeroplevelse.

Hvorfor er min off-canvas menu ikke responsiv?

En off-canvas menu bliver responsiv ved korrekt brug af CSS-medieforespørgsler (@media regler). Disse regler tillader dig at justere menuens bredde, position og opførsel baseret på skærmstørrelsen. Sørg for at teste din menu på forskellige enheder og viewport-størrelser for at identificere og rette eventuelle visuelle problemer.

Hvordan undgår jeg flimmer eller hakken under animationer?

Flimmer eller hakken (kaldet 'jank') under animationer skyldes ofte, at du animerer CSS-egenskaber, der tvinger browseren til at genberegne layoutet eller tegne elementer igen. Brug i stedet CSS-egenskaber som transform (for position og skalering) og opacity (for gennemsigtighed), da disse kan accelereres af GPU'en og giver en glattere animation.

Er off-canvas menuer gode for SEO?

Ja, off-canvas menuer kan være SEO-venlige, så længe indholdet i menuen er tilgængeligt for søgemaskiner. Sørg for, at din navigation er bygget med semantisk HTML (f.eks. <nav>, <ul>, <li>, <a>) og kan crawls, selvom den er skjult med CSS/JavaScript. Søgemaskiner er generelt gode til at forstå skjult indhold, der afsløres ved brugerinteraktion.

Konklusion

Off-canvas menuer er en fremragende løsning til at skabe en ren, intuitiv og effektiv navigationsoplevelse på mobile enheder. Uanset om du vælger at udnytte Bootstraps indbyggede offcanvas-komponent for dens enkelhed og integration eller foretrækker en dedikeret plugin for dens avancerede funktioner og tilpasningsmuligheder, er principperne for god off-canvas design de samme: pladsbesparelse, brugervenlighed og responsivitet. Ved at følge de skitserede trin og overvejelser kan du implementere en robust og moderne navigationsløsning, der vil glæde dine brugere og forbedre din hjemmesides funktionalitet på tværs af alle skærme.

Hvis du vil læse andre artikler, der ligner Off-canvas Menuer: Byg Responsiv Mobil Navigation, kan du besøge kategorien Mobil.

Go up