How to create a hamburger menu using JavaScript?

Mobil Navigationsmenu: Byg Din Egen

25/11/2022

Rating: 4.94 (10758 votes)

I nutidens digitale landskab er en mobilvenlig hjemmeside ikke længere et valg, men en nødvendighed. Med stadigt flere brugere, der tilgår internettet via deres smartphones og tablets, er det afgørende, at din hjemmeside tilbyder en gnidningsfri og intuitiv oplevelse på små skærme. En af de mest effektive måder at opnå dette på er gennem implementering af en mobil toggle navigationsmenu, ofte kendt som en hamburger menu. Denne artikel vil dykke ned i, hvordan du trin for trin kan konstruere en sådan menu ved hjælp af standard webteknologier: HTML, CSS og JavaScript.

How to create a mobile toggle navigation menu?

En mobil toggle navigationsmenu er et kompakt ikon, typisk repræsenteret af tre vandrette streger (deraf navnet "hamburger"), som når den klikkes, afslører en fuld menu af links. Formålet er at spare plads på mindre skærme, samtidig med at alle navigationsmuligheder forbliver lettilgængelige for brugeren. Når menuen er åben, kan brugeren vælge et link, og ved at klikke på ikonet igen (eller et lukkeikon, ofte et "X"), skjules menuen igen.

På en desktop-hjemmeside er der ofte rigelig plads til en fuld navigationslinje med mange links. På en mobilskærm er denne plads dog stærkt begrænset. En traditionel, fuld navigation ville enten optage for meget skærmplads eller kræve en alt for lille skriftstørrelse, hvilket ville forringe brugeroplevelsen markant. Hamburger menuen løser dette problem elegant ved at holde navigationen ude af syne, indtil den er nødvendig, og frigør dermed værdifuld plads til indhold. Dette forbedrer ikke kun æstetikken, men også brugervenligheden, da brugeren kan fokusere på sidens primære indhold, indtil de aktivt ønsker at navigere videre.

At bygge en robust mobil navigationsmenu kræver en kombination af de tre kerne webteknologier. Vi vil gennemgå hvert trin detaljeret, med inspiration fra anerkendte kilder som W3Schools og GeeksForGeeks.

HTML-Struktur: Skelettet af din Menu

Først skal vi definere den grundlæggende HTML-struktur for din menu. Dette inkluderer selve navigationen og det element, der skal udløse dens åbning (hamburger-ikonet).

<div id="mySidenav" class="sidenav"> <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a> <a href="#">Om os</a> <a href="#">Tjenester</a> <a href="#">Kunder</a> <a href="#">Kontakt</a> </div> <!-- Brug et hvilket som helst element til at åbne sidenavigationen --> <span style="font-size:30px;cursor:pointer" onclick="openNav()">☰</span> <!-- Indsæt alt sideindhold inde i denne div, hvis du vil have sidenavigationen til at skubbe sideindholdet til højre --> <div id="main"> <p>Dette er hovedindholdet på din side.</p> </div>

Her definerer vi en div med id="mySidenav" og class="sidenav", som vil indeholde vores navigationslinks. Inde i denne div er der også et lukkeikon (&times;) og de faktiske links. Uden for menu-div'en har vi et span-element, der fungerer som vores åbne-knap (hamburger-ikonet). id="main"-div'en repræsenterer resten af sidens indhold.

CSS-Styling: Gør Menuen Smuk og Funktionel

CSS er afgørende for at få menuen til at se rigtig ud og fungere som en skjult, men tilgængelig sidepanel. De vigtigste CSS-egenskaber inkluderer position: fixed, height: 100%, width: 0 (for at skjule den initialt) og transition for en glidende animation.

/* Side navigationsmenuen */ .sidenav { height: 100%; /* Fuld højde */ width: 0; /* 0 bredde - ændres med JavaScript */ position: fixed; /* Forbliv på plads */ z-index: 1; /* Forbliv øverst */ top: 0; /* Forbliv øverst */ left: 0; background-color: #111; /* Sort */ overflow-x: hidden; /* Deaktiver horisontal scroll */ padding-top: 60px; /* Placer indhold 60px fra toppen */ transition: 0.5s; /* 0.5 sekunds overgangseffekt til at glide menuen ind */ } /* Navigationsmenu links */ .sidenav a { padding: 8px 8px 8px 32px; text-decoration: none; font-size: 25px; color: #818181; display: block; transition: 0.3s; } /* Når musen er over navigationslinks, skift deres farve */ .sidenav a:hover { color: #f1f1f1; } /* Positioner og stil lukke-knappen (øverst til højre hjørne) */ .sidenav .closebtn { position: absolute; top: 0; right: 25px; font-size: 36px; margin-left: 50px; } /* Stil sideindhold - brug dette, hvis du vil skubbe sideindholdet til højre, når du åbner sidenavigationen */ #main { transition: margin-left .5s; padding: 20px; } /* På mindre skærme, hvor højden er mindre end 450px, ændres stilen på sidenavigationen (mindre padding og mindre skriftstørrelse) */ @media screen and (max-height: 450px) { .sidenav {padding-top: 15px;} .sidenav a {font-size: 18px;} }

CSS'en sørger for, at .sidenav starter med width: 0, hvilket gør den usynlig. position: fixed sikrer, at den forbliver på plads, uanset scroll. transition skaber den glidende effekt. Hover-effekter forbedrer brugervenligheden, og @media queries kan justere udseendet på meget små skærme.

What is W3Schools?
W3Schools is a web developer information website. It provides tutorials and references relating to web development topics such as HTML, CSS, JavaScript, PHP, SQL, and JQuery.

JavaScript-Funktionalitet: Liv i Menuen

JavaScript er hjertet i vores toggle-funktionalitet. Det er ansvarligt for at ændre menuens bredde og dermed gøre den synlig eller usynlig, samt eventuelt skubbe sidens hovedindhold.

/* Indstil bredden af sidenavigationen til 250px */ function openNav() { document.getElementById("mySidenav").style.width = "250px"; } /* Indstil bredden af sidenavigationen til 0 */ function closeNav() { document.getElementById("mySidenav").style.width = "0"; }

Disse to simple funktioner manipulere width-egenskaben for mySidenav-elementet. Når openNav() kaldes (f.eks. ved et klik på hamburger-ikonet), sættes bredden til 250px, og menuen glider ind. Når closeNav() kaldes (f.eks. ved et klik på 'X'-ikonet), sættes bredden tilbage til 0, og menuen glider ud. Det er denne JavaScript, kombineret med CSS'ens transition, der skaber den flydende animation.

Afhængigt af dit design og dine behov kan du implementere forskellige variationer af side-navigationer. Her er et par populære modeller:

1. Overlay (Overlappende) Sidenav

Denne type menu glider ind over det eksisterende sideindhold. Det er den simpleste implementering, da den ikke kræver, at hovedindholdet flyttes.

/* JavaScript for Overlay Sidenav */ function openNav() { document.getElementById("mySidenav").style.width = "250px"; } function closeNav() { document.getElementById("mySidenav").style.width = "0"; }

2. Push (Skubber Indhold) Sidenav

Med denne variant skubber menuen hovedindholdet til siden, når den åbnes, hvilket giver en fornemmelse af, at menuen er en del af siden snarere end et overlay.

/* JavaScript for Push Sidenav */ function openNav() { document.getElementById("mySidenav").style.width = "250px"; document.getElementById("main").style.marginLeft = "250px"; } function closeNav() { document.getElementById("mySidenav").style.width = "0"; document.getElementById("main").style.marginLeft = "0"; }

Bemærk, hvordan document.getElementById("main").style.marginLeft også justeres for at skabe push-effekten.

3. Fuld Bredde Sidenav

Denne menu dækker hele skærmen, når den åbnes, hvilket ofte bruges til mere komplekse navigationsstrukturer eller når man ønsker at give menuen fuld opmærksomhed.

/* JavaScript for Fuld Bredde Sidenav */ function openNav() { document.getElementById("mySidenav").style.width = "100%"; } function closeNav() { document.getElementById("mySidenav").style.width = "0%"; }

4. Sidenav Uden Animation

Hvis du foretrækker en øjeblikkelig visning frem for en glidende animation, kan du opnå dette ved at manipulere display-egenskaben i stedet for width og fjerne CSS transition.

/* CSS for Sidenav Uden Animation (fjern 'transition' fra .sidenav) */ .sidenav { /* ... andre stilarter ... */ transition: none; /* Vigtigt: Fjern denne linje eller sæt til 'none' */ } /* JavaScript for Sidenav Uden Animation */ function openNav() { document.getElementById("mySidenav").style.display = "block"; } function closeNav() { document.getElementById("mySidenav").style.display = "none"; }

5. Højre-Sidet Navigation

Hvis du ønsker, at menuen skal glide ind fra højre side af skærmen i stedet for venstre, skal du blot ændre left: 0 til right: 0 i din CSS og justere margin-right for #main i JavaScript, hvis du bruger en push-effekt.

What is W3Schools spaces?
Ever heard about W3Schools Spaces? Here you can create your website from scratch or use a template, and host it for free. Well organized and easy to understand Web building tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, Python, PHP, Bootstrap, Java, XML and more.
/* CSS for Højre-Sidet Sidenav */ .sidenav { /* ... andre stilarter ... */ left: auto; /* Fjern 'left: 0' */ right: 0; /* Sæt til højre */ }

Hamburger Menu med Bootstrap

For dem, der arbejder med front-end frameworks som Bootstrap, er oprettelsen af en hamburger menu ofte yderligere forenklet. Bootstrap leverer indbyggede komponenter og JavaScript-funktionalitet, der kan bruges til at implementere responsive navigationslinjer, herunder en sammenklappelig menu for mobile visninger. Typisk indebærer dette at bruge Boostraps navbar, navbar-toggler og collapse klasser, som automatisk håndterer meget af den CSS og JavaScript, vi har skrevet manuelt. Selvom Bootstrap forenkler processen, er det stadig essentielt at forstå de underliggende principper for HTML, CSS og JavaScript, som vi har dækket.

Vigtige Overvejelser og Tips

Når du designer og implementerer din mobile navigationsmenu, er der flere faktorer, du bør overveje for at sikre en optimal brugeroplevelse og tilgængelighed:

  • Tilgængelighed (Accessibility): Sørg for, at din menu er tilgængelig for alle brugere, herunder dem, der bruger skærmlæsere eller navigerer med tastaturet. Brug passende ARIA-attributter (f.eks. aria-expanded, aria-controls) og sørg for, at fokus kan flyttes ind og ud af menuen.
  • Brugervenlighed: Placer hamburger-ikonet et let tilgængeligt sted, typisk øverst til venstre eller højre i headeren. Gør lukke-knappen tydelig. Overvej en animeret overgang for en mere flydende følelse.
  • Ydeevne: Selvom de eksempler, vi har vist, er lette, skal du være opmærksom på ydeevnen, hvis du tilføjer mange komplekse animationer eller et stort antal links. Minimer DOM-manipulationer, hvor det er muligt.
  • Visuel Feedback: Sørg for, at brugerne får visuel feedback, når de interagerer med menuen – f.eks. ved at ændre farven på links ved hover eller ved at skifte hamburger-ikonet til et 'X' når menuen er åben.
  • Viewport Meta Tag: Sørg for, at din HTML har <meta name="viewport" content="width=device-width, initial-scale=1.0"> i <head>, så din side skalerer korrekt på mobile enheder.
Indholdsfortegnelse
  • Ofte Stillede Spørgsmål (FAQ)
  • Ofte Stillede Spørgsmål (FAQ)

    Hvad er forskellen mellem en "toggle navigation" og en "hamburger menu"?

    Termerne bruges ofte synonymt i mobil kontekst. En "toggle navigation" refererer til funktionaliteten (en menu, der kan skiftes mellem synlig og skjult), mens "hamburger menu" specifikt refererer til det ikon (tre vandrette streger), der typisk bruges til at udløse denne funktionalitet på mobile enheder.

    Hvorfor er hamburger menuen så udbredt på mobiltelefoner?

    Den er udbredt, fordi den er en effektiv løsning til at spare skærmplads på små enheder. Den tillader en renere grænseflade ved at skjule navigationslinks, indtil brugeren aktivt vælger at se dem, hvilket forbedrer den samlede brugeroplevelse og indholdets læsbarhed.

    Kan jeg lave en mobil navigationsmenu uden JavaScript?

    For en fuldt funktionel toggle-menu, der åbner og lukker baseret på brugerinteraktion, er JavaScript nødvendigt. Du kan skabe en menu, der altid er synlig (f.eks. en fixed sidebjælke), udelukkende med HTML og CSS, men den vil ikke have den dynamiske åbn/luk-funktionalitet, der kendetegner en hamburger menu.

    Er W3Schools en pålidelig kilde til at lære webudvikling?

    Ja, W3Schools er bredt anerkendt som en fremragende ressource for webudviklere, både begyndere og erfarne. De tilbyder omfattende tutorials og referencer inden for et bredt spektrum af webudviklingsemner, herunder HTML, CSS, JavaScript, PHP, SQL og jQuery. Deres eksempler er ofte klare og lette at følge.

    Hvilken type side-navigation er bedst?

    Der er ikke én "bedste" type. Valget afhænger af dit specifikke design og brugerbehov. Overlay-typen er ofte den nemmeste at implementere og passer til de fleste simple menuer. Push-typen giver en mere integreret følelse. Fuld bredde er god for meget omfattende menuer. Overvej dit indholds natur og dine brugeres forventninger.

    At mestre kunsten at skabe en responsiv mobil navigationsmenu er en fundamental færdighed for enhver webudvikler. Ved at forstå og anvende principperne for HTML-struktur, CSS-styling og JavaScript-funktionalitet, som beskrevet i denne artikel, kan du skabe en intuitiv og pladsbesparende navigationsløsning for dine mobile brugere. Uanset om du vælger en simpel overlay-menu eller en mere avanceret push-effekt, vil en velimplementeret hamburger menu markant forbedre brugeroplevelsen på din hjemmeside og sikre, at dit indhold er tilgængeligt for alle, uanset enhed.

    Hvis du vil læse andre artikler, der ligner Mobil Navigationsmenu: Byg Din Egen, kan du besøge kategorien Teknologi.

    Go up