Does bootstrap have a navbar?

Bootstrap Rullemenuer: En Komplet Guide

15/01/2024

Rating: 4.5 (16367 votes)

I den moderne webverden er interaktive og brugervenlige navigationsmenuer afgørende for en god brugeroplevelse. En af de mest populære og effektive måder at implementere komplekse menustrukturer på, uden at overvælde brugeren, er gennem rullemenuer – også kendt som dropdowns. Bootstrap, et af de mest udbredte CSS-frameworks, tilbyder en robust og fleksibel løsning til netop dette. Denne artikel vil dykke ned i, hvordan du mestrer Bootstrap rullemenuer, fra de grundlæggende principper til avancerede tilpasninger, der kan løfte din hjemmesides funktionalitet og design.

How to create a responsive grid in Bootstrap 5?

Uanset om du er en erfaren webudvikler eller lige er begyndt, vil denne guide give dig den nødvendige viden til at implementere smukke og funktionelle rullemenuer, der forbedrer navigationen og den generelle interaktion på dit website. Vi vil udforske de forskellige typer af rullemenuer, hvordan de aktiveres, deres tilgængelighedsfunktioner, og hvordan du kan tilpasse deres udseende og opførsel.

Indholdsfortegnelse

Hvad er en Bootstrap Rullemenu?

En Bootstrap rullemenu er et togglebart, kontekstuelt overlay, der bruges til at vise lister af links, handlingsmuligheder eller andet indhold. Den er designet til at være interaktiv og aktiveres typisk ved et klik, ikke ved et hover (svævning med musen). Denne designbeslutning er bevidst for at sikre en mere forudsigelig og tilgængelig brugeroplevelse, især på touch-baserede enheder.

Rullemenuer er bygget op omkring en simpel HTML-struktur, der involverer en forældre-div med klassen .dropdown (eller et andet element med position: relative;), en trigger (typisk en knap eller et link) og selve menuindholdet (.dropdown-menu). Bootstrap’s JavaScript-plugin håndterer logikken for at vise og skjule menuen ved at tilføje og fjerne klassen .show på forældreelementet.

Sådan Aktiverer du en Rullemenu

At aktivere en Bootstrap rullemenu er ligetil og kan gøres enten via data-attributter i din HTML eller programmatisk med JavaScript. Den mest almindelige metode er at bruge data-attributter, da det ofte er den hurtigste og enkleste måde at implementere funktionaliteten på.

Aktivering via Data-attributter

For at aktivere en rullemenu skal du blot tilføje data-toggle="dropdown" attributten til det element, der skal fungere som trigger. Dette kan være en <button> eller et <a> element. Det er vigtigt at omslutte både triggeren og menuen i et element med klassen .dropdown.

Her er et eksempel med en knap:

<div class="dropdown"> <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Rullemenu Knap </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> <a class="dropdown-item" href="#">Handling 1</a> <a class="dropdown-item" href="#">Handling 2</a> <a class="dropdown-item" href="#">Noget andet her</a> </div> </div>

Og et eksempel med et link:

<div class="dropdown"> <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Rullemenu Link </a> <div class="dropdown-menu" aria-labelledby="dropdownMenuLink"> <a class="dropdown-item" href="#">Handling 1</a> <a class="dropdown-item" href="#">Handling 2</a> <a class="dropdown-item" href="#">Noget andet her</a> </div> </div>

Bemærk brugen af ARIA-attributterne aria-haspopup="true" og aria-expanded="false". Disse er vigtige for tilgængelighed, da de informerer skærmlæsere om elementets natur og dets aktuelle tilstand.

Aktivering via JavaScript

Selvom data-attributter er praktiske, kan du også initialisere rullemenuer programmatisk med JavaScript:

$(document).ready(function() { $('[data-toggle="dropdown"]').dropdown(); });

Selv når du bruger JavaScript til at initialisere, er det stadig en god praksis at inkludere data-toggle="dropdown" attributten i din HTML. Dette sikrer, at Bootstrap's indbyggede logik for at lukke rullemenuer på applikationsniveau fungerer korrekt.

Vigtigheden af Popper.js

Bootstrap rullemenuer bygger på et tredjepartsbibliotek kaldet Popper.js. Dette bibliotek er afgørende for dynamisk positionering og viewport-detektion af rullemenuerne. Det sikrer, at din rullemenu altid vises korrekt og inden for skærmens synlige område, uanset hvor på siden triggeren befinder sig.

Du skal sørge for at inkludere popper.min.jsfør Bootstrap's JavaScript-fil, eller du kan bruge bootstrap.bundle.min.js (eller bootstrap.bundle.js), som allerede indeholder Popper.js. En undtagelse er rullemenuer inden for navbars, hvor dynamisk positionering ofte ikke er nødvendig, og Popper.js derfor ikke bruges til at positionere dem.

Tilgængelighed (Accessibility)

Tilgængelighed er et nøgleelement i moderne webudvikling, og Bootstrap tager dette alvorligt, selv for rullemenuer. WAI ARIA-standarden definerer en specifik role="menu" widget, som er beregnet til applikationslignende menuer, der udløser handlinger eller funktioner. Disse ARIA-menuer kan kun indeholde specifikke menupunkter (f.eks. menuitem, menuitemcheckbox).

Bootstrap's rullemenuer er derimod designet til at være generiske og fleksible. De kan indeholde en bred vifte af indhold, herunder inputfelter og formularer. Derfor tilføjer Bootstrap ikke automatisk alle de role og aria- attributter, der kræves for ægte ARIA-menuer. Det er op til udvikleren at tilføje disse mere specifikke attributter, hvis rullemenuen skal fungere som en sand ARIA-menu.

Dog inkluderer Bootstrap indbygget support for de fleste standard tastaturinteraktioner. Dette betyder, at brugere kan navigere gennem de enkelte .dropdown-item elementer ved hjælp af piletasterne og lukke menuen med ESC-tasten. Denne funktionalitet forbedrer brugervenligheden markant for brugere, der foretrækker eller har brug for tastaturnavigation.

Typer af Rullemenuer og Deres Anvendelse

Bootstrap tilbyder forskellige måder at implementere rullemenuer på, afhængigt af dit design og dine behov. Her er de mest almindelige typer:

Enkeltknap Rullemenuer

Den mest grundlæggende form, hvor en enkelt knap (eller et link) fungerer som trigger for rullemenuen. Som vist i de tidligere eksempler, kan du bruge enhver Bootstrap knapvariant (f.eks. .btn-primary, .btn-danger osv.) som din trigger.

Splitknap Rullemenuer

Splitknap rullemenuer er ideelle, når du ønsker at give brugeren en primær handling direkte på knappen, men også tilbyde yderligere relaterede handlinger via en rullemenu. De oprettes ved at tilføje .dropdown-toggle-split til rullemenu-triggeren (caret-delen), som er adskilt fra hovedknappen.

<div class="btn-group"> <button type="button" class="btn btn-danger">Primær Handling</button> <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="sr-only">Skift Rullemenu</span> </button> <div class="dropdown-menu"> <a class="dropdown-item" href="#">Under-handling 1</a> <a class="dropdown-item" href="#">Under-handling 2</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="#">Separat Link</a> </div> </div>

.dropdown-toggle-split klassen reducerer den horisontale polstring omkring caret'en og fjerner margin-left, hvilket holder caret'en centreret i splitknappen og giver et passende stort klikområde ved siden af hovedknappen.

Størrelser på Rullemenuer

Rullemenuer fungerer problemfrit med knapper i alle størrelser. Du kan anvende standard Bootstrap knapstørrelsesklasser som .btn-lg (stor) og .btn-sm (lille) på din rullemenu-trigger, og menuen vil automatisk tilpasse sig.

<div class="btn-group"> <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Stor knap </button> <div class="dropdown-menu">...</div> </div>

Retninger for Rullemenuer

Normalt åbner en rullemenu nedad. Men Bootstrap giver dig mulighed for at ændre retningen ved at tilføje specifikke klasser til forældreelementet:

  • Dropup: Åbner menuen opad. Tilføj .dropup til forældreelementet.
  • Dropright: Åbner menuen til højre. Tilføj .dropright til forældreelementet.
  • Dropleft: Åbner menuen til venstre. Tilføj .dropleft til forældreelementet.

Disse retningsklasser giver stor fleksibilitet i designet, især når du skal placere rullemenuer tæt på skærmkanter.

Indhold i Rullemenuen – Mere end Bare Links

Med Bootstrap 4 og nyere versioner er rullemenuens indhold ikke længere begrænset til kun links. Du kan nu inkludere forskellige typer elementer for at skabe rigere og mere funktionelle menuer.

What is CSS Mobile Menu animation?
5. CSS Mobile Menu Animation Here is a handy mobile optimised navigation menu that sites at the bottom of the screen, the hamburger menu is conveniently placed in the center so it’s easily accessible by both left and right-handed users. 6. Animated Accessible Navigation

Menupunkter

Du kan bruge både <a> (links) og <button> (knapper) elementer som menupunkter. Brug .dropdown-item klassen på disse elementer.

<div class="dropdown-menu"> <button class="dropdown-item" type="button">Handling 1</button> <a class="dropdown-item" href="#">Handling 2</a> </div>

Tekstbaserede Menupunkter

For ikke-interaktive tekstblokke i menuen kan du bruge .dropdown-item-text. Dette er nyttigt for at tilføje beskrivelser eller instruktioner.

<div class="dropdown-menu"> <span class="dropdown-item-text">Dette er en tekstbesked.</span> <a class="dropdown-item" href="#">Handling 1</a> </div>

Aktive og Deaktiverede Punkter

Du kan markere et menupunkt som aktivt med klassen .active eller deaktivere det med .disabled. For deaktiverede links bør du også inkludere tabindex="-1" og aria-disabled="true" for at forbedre tilgængelighed.

Menujustering

Som standard justeres en rullemenu 100% fra toppen og langs venstre side af dens forældre. For at højrejustere menuen, tilføj .dropdown-menu-right til .dropdown-menu elementet. Dette er især nyttigt, når triggeren er placeret langt til højre på skærmen.

Responsiv Justering

For responsivt design kan du deaktivere dynamisk positionering (fra Popper.js) ved at tilføje data-display="static" til triggeren og derefter bruge responsive variationsklasser som .dropdown-menu-lg-right. Dette giver dig mulighed for at ændre menuens justering ved specifikke breakpoints.

Eksempel: Venstrejusteret som standard, men højrejusteret på store skærme:

<div class="btn-group"> <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-haspopup="true" aria-expanded="false"> Responsiv Justering </button> <div class="dropdown-menu dropdown-menu-lg-right"> <button class="dropdown-item" type="button">Handling 1</button> <button class="dropdown-item" type="button">Handling 2</button> </div> </div>

Hoveder og Delere

For at organisere dit menuindhold kan du tilføje overskrifter med .dropdown-header og visuelle delere med .dropdown-divider. Dette forbedrer læsbarheden og strukturen i komplekse menuer.

<div class="dropdown-menu"> <h6 class="dropdown-header">Mine Handlinger</h6> <a class="dropdown-item" href="#">Profil</a> <a class="dropdown-item" href="#">Indstillinger</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="#">Log ud</a> </div>

Fri Tekst og Formularer

En af de mest kraftfulde funktioner er muligheden for at placere fri tekst eller endda hele formularer inde i en rullemenu. Dette åbner op for mange muligheder, f.eks. login-formularer, søgefelt eller filtre direkte i menuen. Brug .p-* (padding) eller .m-* (margin) utilities for at give indholdet passende mellemrum.

Eksempel på en login-formular i en rullemenu:

<div class="dropdown-menu"> <form class="px-4 py-3"> <div class="form-group"> <label for="exampleDropdownFormEmail1">E-mailadresse</label> <input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="[email protected]"> </div> <div class="form-group"> <label for="exampleDropdownFormPassword1">Adgangskode</label> <input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Adgangskode"> </div> <div class="form-group"> <div class="form-check"> <input type="checkbox" class="form-check-input" id="dropdownCheck"> <label class="form-check-label" for="dropdownCheck">Husk mig</label> </div> </div> <button type="submit" class="btn btn-primary">Log ind</button> </form> <div class="dropdown-divider"></div> <a class="dropdown-item" href="#">Ny her? Tilmeld dig</a> <a class="dropdown-item" href="#">Glemt adgangskode?</a> </div>

Avancerede Indstillinger og Tilpasning

Bootstrap rullemenuer tilbyder flere avancerede indstillinger for at finjustere deres opførsel og positionering. Disse kan angives via data-attributter (f.eks. data-offset="10,20") eller som et objekt i JavaScript.

Tabel: Rullemenu Indstillinger

NavnTypeStandardBeskrivelse
offsetnumber | string | function0Forskydning af rullemenuen i forhold til dens trigger. Kan være et tal (pixel), en streng (CSS-værdi) eller en funktion.
flipbooleantrueTillader rullemenuen at 'vende' retning, hvis den overlapper referenceelementet (håndteres af Popper.js).
boundarystring | element'scrollParent'Overløbsbegrænsning for rullemenuen. Accepterer 'viewport', 'window', 'scrollParent' eller en HTML-elementreference.
referencestring | element'toggle'Referenceelement for rullemenuen. Accepterer 'toggle' (triggeren), 'parent' (forældre-.dropdown) eller en HTML-elementreference.
displaystring'dynamic'Styrer, om Popper.js bruges til dynamisk positionering ('dynamic') eller om menuen er statisk ('static').
popperConfignull | objectnullEt objekt til at overskrive Bootstrap's standard Popper.js konfiguration.

Disse indstillinger giver dig fuld kontrol over, hvordan rullemenuen positioneres og opfører sig i forskellige scenarier, hvilket er afgørende for at skabe et poleret brugerinterface.

Programmatisk Kontrol: Metoder og Begivenheder

For udviklere, der har brug for mere kontrol over rullemenuerne, tilbyder Bootstrap et sæt JavaScript-metoder og begivenheder. Disse gør det muligt at interagere med rullemenuerne programmatisk.

Metoder

Du kan kalde metoder på rullemenu-elementer via JavaScript:

  • $().dropdown('toggle'): Skifter synligheden af rullemenuen.
  • $().dropdown('show'): Viser rullemenuen.
  • $().dropdown('hide'): Skjuler rullemenuen.
  • $().dropdown('update'): Opdaterer positionen af rullemenuen (nyttigt hvis indholdet ændres).
  • $().dropdown('dispose'): Ødelægger rullemenuens funktionalitet og fjerner eventuelle event listeners.

Begivenheder

Bootstrap udløser en række begivenheder, som du kan lytte efter for at udføre brugerdefinerede handlinger, når rullemenuens tilstand ændres. Alle begivenheder udløses på .dropdown-menu's forældreelement.

BegivenhedBeskrivelse
show.bs.dropdownUdløses umiddelbart, når show metoden kaldes.
shown.bs.dropdownUdløses, når rullemenuen er blevet synlig for brugeren (venter på CSS-overgange).
hide.bs.dropdownUdløses umiddelbart, når hide metoden kaldes.
hidden.bs.dropdownUdløses, når rullemenuen er færdig med at blive skjult (venter på CSS-overgange).

Disse begivenheder er ekstremt nyttige for at tilføje brugerdefineret logik, f.eks. at logge brugerinteraktioner, indlæse indhold dynamisk eller udløse animationer.

Ofte Stillede Spørgsmål (FAQ)

Kan jeg få en Bootstrap rullemenu til at åbne ved hover i stedet for klik?

Som standard er Bootstrap rullemenuer designet til at åbne ved klik for at forbedre tilgængelighed og funktionalitet på touch-enheder. Mens det ikke er en indbygget funktion, kan det opnås med brugerdefineret JavaScript. Du skal lytte efter mouseover og mouseout begivenheder på triggeren og derefter kalde $().dropdown('toggle') metoden.

Min rullemenu vises forkert eller forsvinder uden for skærmen. Hvad er problemet?

Dette skyldes ofte et problem med positionering. Tjek følgende:

  • Sørg for, at popper.min.js er korrekt inkluderet før Bootstrap's JS.
  • Sørg for, at forælderelementet til rullemenuen har position: relative; (.dropdown klassen håndterer dette).
  • Overvej at justere boundary og reference indstillingerne for rullemenuen, især hvis den er indlejret i et unikt layout.
  • Hvis du bruger data-display="static", husk at Popper.js deaktiveres, og du skal selv håndtere responsiv justering med CSS-klasser.

Skal jeg altid bruge data-toggle="dropdown" attributten?

Ja, det anbefales kraftigt. Selvom du bruger JavaScript til at initialisere din rullemenu, er data-toggle="dropdown" attributten stadig påkrævet på trigger-elementet. Dette skyldes, at Bootstrap's overordnede JavaScript-logik til at lukke rullemenuer (f.eks. når du klikker uden for menuen) er afhængig af denne attribut.

Hvordan tilføjer jeg en login-formular eller et søgefelt i en rullemenu?

Du kan placere et <form> element direkte inde i .dropdown-menu div'en. Brug Bootstrap's formular- og spacing-utilities (f.eks. .px-4, .py-3 for padding) til at give formularen et pænt udseende og passende mellemrum. Dette giver en meget fleksibel og pladsbesparende måde at integrere interaktive elementer i din navigation.

Kan jeg ændre standard retning for alle rullemenuer på min side?

Ikke direkte via en global indstilling. Du skal anvende de specifikke retningsklasser (.dropup, .dropright, .dropleft) til hvert .dropdown forælderelement, hvor du ønsker en afvigende retning. Dette giver dig dog fuld kontrol over hver enkelt rullemenu.

Konklusion

Bootstrap rullemenuer er et utroligt alsidigt og kraftfuldt værktøj til at opbygge intuitive og effektive navigationssystemer på din hjemmeside. Med en solid forståelse af deres grundlæggende opbygning, de forskellige typer, tilgængelighedsaspekter og avancerede tilpasningsmuligheder, er du godt rustet til at skabe professionelle og brugervenlige webapplikationer.

Husk altid at tænke på brugeroplevelsen og responsivt design, når du implementerer rullemenuer. En veludført rullemenu kan markant forbedre navigationen og hjælpe dine brugere med at finde det, de leder efter, hurtigt og effektivt. Ved at følge principperne og eksemplerne i denne guide kan du udnytte det fulde potentiale af Bootstrap's rullemenuer til at skabe enestående websteder.

Hvis du vil læse andre artikler, der ligner Bootstrap Rullemenuer: En Komplet Guide, kan du besøge kategorien Teknologi.

Go up