Can Bulma navigation bar show Burger menu on mobile?

Bulma Navigation Bar uden JavaScript

11/11/2025

Rating: 4.4 (9612 votes)
Indholdsfortegnelse

Bulma Navigation Bar uden JavaScript: En CSS-drevet Løsning

I en verden hvor design og funktionalitet går hånd i hånd, er en responsiv navigationsbar essentiel for enhver moderne hjemmeside. Bulma, et populært CSS-framework, tilbyder en elegant og fleksibel løsning til at skabe brugerdefinerede brugergrænseflader. En af de mest eftertragtede funktioner er muligheden for at vise en "burger menu" på mindre skærme, som automatisk skjuler og viser navigationslinksene ved et klik. Normalt kræver denne funktionalitet JavaScript, men hvad nu hvis du ønsker at opretholde en ren CSS-tilgang? Denne artikel guider dig trin for trin gennem processen med at implementere en Bulma navigationsbar med en burger menu, udelukkende ved hjælp af CSS.

How to set button style in Bulma?
Bulma Button style class is used to set the style of the button. There are four pre-defined button styles in Bulma: Outlined, Inverted, Outlined Inverted, and Rounded. You can set the button style with the help of three CSS classes provided by Bulma. Bulma Button Styles Classes: is-outlined: This class is used to set the button style to outlined.

Udfordringen: JavaScript-fri Burger Menu

Mange udviklere, inklusive mig selv, værdsætter princippet om at minimere eller helt undgå JavaScript for at opnå en lettere og mere vedligeholdelsesvenlig kodebase. Da jeg observerede det flotte design af navigationsbaren på Linux.com, blev jeg inspireret til at genskabe lignende funktionalitet på min egen blog. Bulmas standardimplementering for burger menuen involverer typisk JavaScript til at håndtere åbning og lukning af menuen samt til at ændre burgerikonet til et "X". Min udfordring var at opnå dette uden en eneste linje JavaScript, hvilket førte til en kreativ CSS-baseret løsning.

Den Oprindelige CSS-Løsning: En Tjekboks-tilgang

Min første tilgang var at udnytte den skjulte funktionalitet af HTML-input-elementer, specifikt en tjekboks. Ideen var at placere en skjult tjekboks i HTML-strukturen og bruge dens :checked pseudo-klasse til at styre synligheden af navigationsmenuen. Her er de grundlæggende ændringer i HTML og CSS:

HTML-struktur

Først blev en <input type="checkbox" id="menu-switch"> indsat i navigationsbaren, lige før .navbar-menu. I .navbar-brand blev den originale burger menu-<a>-tag erstattet med et <label>-tag, der er knyttet til tjekboksen via for="menu-switch". Dette <label>-tag fungerer som selve burgerknappen.

<nav class="navbar" role="navigation" aria-label="main navigation"> <div class="navbar-brand"> <a class="navbar-item" href="/">Site name</a> <label for="menu-switch" class="navbar-burger" role="button" aria-expanded="false"> <span aria-hidden="true"></span> <span aria-hidden="true"></span> <span aria-hidden="true"></span> </label> </div> <input id="menu-switch" name="menu-switch" type="checkbox" /> <div class="navbar-menu"> <div class="navbar-end"> <a href="/" class="navbar-item">Link1</a> <a href="/" class="navbar-item">Link2</a> <a href="/" class="navbar-item">Link3</a> </div> </div> </nav>

CSS-regler

CSS'en blev derefter brugt til at skjule selve tjekboksen og til at vise .navbar-menu, når tjekboksen var markeret. Ved at bruge adjacency sibling combinatoren (+) kunne vi målrette .navbar-menu, der umiddelbart fulgte efter den tjekkede input.

#menu-switch { display: none; }#menu-switch:checked + .navbar-menu { display: block; }

Denne løsning var et godt skridt, da den effektivt åbnede og lukkede menuen ved at klikke på burgerknappen (som nu var et <label>). Dog manglede den en vigtig detalje: transformationen af burgerikonet til et "X"-tegn, som normalt opnås med JavaScript og tilføjelse af en .is-active klasse.

Forbedringen: CSS-transformation af Burger Ikonet

Efter at have delt min oprindelige løsning med Jeremy Thomas, skaberen af Bulma, modtog jeg værdifuld feedback, der adresserede netop denne mangel. Ændringerne involverede en justering af HTML-strukturen og en mere avanceret brug af CSS-selektorer.

Opdateret HTML-struktur

Det første skridt var at flytte <input id="menu-switch">før.navbar-brand-div'en. Dette tillod os at bruge en mere pålidelig CSS-selektor til at målrette både burgerknappen og menupunkterne.

Can Bulma navigation bar show Burger menu on mobile?
While doing so I remembered that bulma navigation bar will collapse the menu and show burger menu on mobile when clicked it shows the menu. The proposed solution on bulma website uses javascript. I had a principle on this blog not to introduce a single line of Javascript and I want to keep it this way. So here is how I did it with only CSS.
<nav class="navbar" role="navigation" aria-label="main navigation"> <input id="menu-switch" name="menu-switch" type="checkbox" /> <div class="navbar-brand"> <a class="navbar-item" href="/">Site name</a> <label for="menu-switch" class="navbar-burger" role="button" aria-expanded="false"> <span aria-hidden="true"></span> <span aria-hidden="true"></span> <span aria-hidden="true"></span> </label> </div> <div class="navbar-menu"> <div class="navbar-end"> <a href="/" class="navbar-item">Link1</a> <a href="/" class="navbar-item">Link2</a> <a href="/" class="navbar-item">Link3</a> </div> </div> </nav>

Avanceret CSS med Transformationer

Med den nye HTML-struktur kunne vi nu bruge den generelle sibling combinator (~) til at vælge .navbar-menu, der fulgte efter den tjekkede input. Endnu vigtigere var det at kunne målrette de individuelle <span>-elementer inden i burgerknappen ved hjælp af :nth-child pseudo-klassen. Dette tillod os at anvende CSS-transformationer (rotation og translation) samt opacity-ændringer for at skabe "X"-effekten.

#menu-switch { display: none; }#menu-switch:checked + .navbar-brand .navbar-burger span:nth-child(1) { transform: translateY(5px) rotate(45deg); }#menu-switch:checked + .navbar-brand .navbar-burger span:nth-child(2) { opacity: 0; }#menu-switch:checked + .navbar-brand .navbar-burger span:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }#menu-switch:checked ~ .navbar-menu { display: block; }

Disse CSS-regler sikrer, at når tjekboksen er markeret (dvs. når brugeren klikker på burgerknappen), vil de tre linjer i burgerikonet transformere sig til et "X", og menupunkterne vil blive vist. Dette giver en komplet og visuelt tilfredsstillende oplevelse, der matcher den traditionelle JavaScript-baserede løsning, men helt uden JavaScript.

Forklaring af CSS-selektorerne

For at forstå denne løsning fuldt ud, lad os dykke ned i de anvendte CSS-selektorer:

  • #menu-switch: Vælger den specifikke tjekboks-input baseret på dens ID. Vi sætter display: none; for at skjule den fra brugerens synsfelt.
  • #menu-switch:checked: Vælger tjekboksen, når den er aktiv (markeret).
  • + .navbar-brand: Adjacency Sibling Combinator. Vælger det element med klassen .navbar-brand, der umiddelbart kommer efter den tjekkede #menu-switch. Dette er afgørende for at kunne målrette burgerknappen indeni.
  • ~ .navbar-menu: General Sibling Combinator. Vælger alle .navbar-menu-elementer, der kommer efter #menu-switch (uanset om de er umiddelbart efter eller ej). Dette bruges til at vise menuen.
  • .navbar-burger span:nth-child(n): Vælger det n'te <span>-element inden i elementet med klassen .navbar-burger. Vi bruger dette til at transformere de individuelle linjer i burgerikonet.

Fordele ved denne CSS-tilgang

  • Ingen JavaScript: Den primære fordel er fuldstændig uafhængighed af JavaScript. Dette reducerer sidens indlæsningstid, forbedrer ydeevnen og sikrer kompatibilitet på tværs af browsere og enheder, der måske har begrænset JavaScript-understøttelse.
  • Simpel Struktur: Selvom det kan virke kontraintuitivt, er den grundlæggende HTML-struktur forbliver relativt enkel. Tjekboksen og labelen fungerer som de interaktive elementer.
  • Tilgængelighed: Ved at bruge semantisk HTML som <label> og ARIA-attributter som aria-expanded, opretholder vi en god grad af tilgængelighed.
  • Performance: Uden JavaScript-kørselsomkostninger er denne løsning potentielt hurtigere og mere ressourcebesparende.

Begrænsninger og Overvejelser

Selvom denne løsning er elegant, er der et par begrænsninger at være opmærksom på:

  • Browserkompatibilitet: Selvom de anvendte CSS-funktioner er bredt understøttet, er det altid en god idé at teste på tværs af forskellige browsere, især ældre versioner.
  • Kompleksitet af CSS: For mere komplekse interaktioner kan ren CSS blive uoverskuelig. Denne løsning er specifik for burger menu-funktionaliteten.
  • Tilpasning: Hvis du har brug for mere avancerede animationer eller interaktioner end blot at vise/skjule og transformere ikonet, kan JavaScript være uundgåeligt.

Bulma Menu: En Hurtig Oversigt

Bulma tilbyder forskellige komponenter til navigation. En Bulma menu er typisk en vertikal navigationsliste, der bruges i sidebars eller dropdowns. Den er designet til at være stilren og nem at implementere. Selvom denne artikel fokuserer på den horisontale navigationsbar, er principperne for styling med CSS generelle.

CSS Styling af Knapper i Bulma

CSS (Cascading Style Sheets) er sproget, der styrer præsentationen af HTML-dokumenter. Det giver udviklere mulighed for at definere farver, skrifttyper, layout og meget mere. I Bulma er knapper (og mange andre elementer) allerede stylet med et moderne og responsivt design. Du kan tilpasse disse stilarter ved at overskrive Bulmas standard CSS eller ved at tilføje dine egne klasser. CSS fungerer ved at anvende regelsæt, som består af en selektor (der peger på et HTML-element) og en erklæringblok (der indeholder stylingegenskaber og værdier).

CSS Selektorer er afgørende for at kunne anvende styles præcist. Udover dem, vi har brugt her (ID, klasse, sibling combinators, pseudo-klasser), findes der mange andre typer, herunder attributselektorer, pseudo-elementer og mere komplekse kombinationer, der giver finmasket kontrol over styling.

Konklusion

At implementere en fuldt funktionel Bulma burger menu uden JavaScript er absolut muligt ved at udnytte kraften i HTML-tjekbokse og avancerede CSS-selektorer som :checked, ~ og nth-child. Denne metode resulterer i en hurtigere, lettere og potentielt mere robust løsning, der bevarer den æstetiske appel og brugeroplevelse, som Bulma er kendt for. Ved at følge denne guide kan du opnå en elegant og responsiv navigationsbar, der fungerer fejlfrit på alle enheder, alt imens du holder din kodebase ren og fri for unødvendig JavaScript.

What is a Bulma menu?
The Bulma menu is a vertical navigation component that comprises: Bulma is a free, open source CSS framework based on Flexbox and built with Sass. It's 100% responsive, fully modular, and available for free.

Ofte Stillede Spørgsmål (FAQ)

Hvad er en Bulma menu?

En Bulma menu er en komponent i Bulma CSS-frameworket, der bruges til at skabe vertikale navigationslister, ofte set i sidebars eller dropdown-menuer. Den er designet til at være simpel og stilfuld.

Kan jeg bruge denne løsning til andre Bulma komponenter?

Principperne bag denne løsning – især brugen af skjulte tjekbokse og :checked pseudo-klassen – kan potentielt anvendes til at skabe andre CSS-baserede interaktioner, såsom at vise/skjule indhold eller skifte mellem forskellige visninger, uden brug af JavaScript.

Hvordan ændrer jeg burgerikonet til et "X" med CSS?

Ved at bruge :checked på en forudgående input-tjekboks og derefter målrette de individuelle <span>-elementer i burgeren med :nth-child, kan du anvende CSS-transformationer (rotation, translation) og ændringer i opacity for at skabe "X"-effekten.

Hvad er fordelen ved at undgå JavaScript?

Fordelene inkluderer forbedret ydeevne, hurtigere indlæsningstider, reduceret filstørrelse, bedre kompatibilitet på tværs af ældre browsere eller enheder med begrænset JavaScript-understøttelse, og en generelt simplere og mere vedligeholdelsesvenlig kodebase.

Er denne løsning fuldt ud responsiv?

Ja, Bulma er i sig selv et responsivt framework, og denne CSS-baserede løsning fungerer ved at reagere på skærmstørrelser og interaktioner, hvilket sikrer en problemfri oplevelse på både desktop og mobile enheder.

Hvis du vil læse andre artikler, der ligner Bulma Navigation Bar uden JavaScript, kan du besøge kategorien Teknologi.

Go up