Rullegardiner
Veksle kontekstuelle overlegg for å vise lister over lenker og mer med Bootstrap dropdown-plugin.
Oversikt
Rullegardiner er vekslebare, kontekstuelle overlegg for å vise lister over lenker og mer. De er gjort interaktive med den inkluderte Bootstrap dropdown JavaScript-plugin. De byttes ved å klikke, ikke ved å sveve; dette er en tilsiktet designbeslutning .
Dropdowns er bygget på et tredjepartsbibliotek, Popper , som gir dynamisk posisjonering og visningsportdeteksjon. Sørg for å inkludere popper.min.js før Bootstraps JavaScript eller bruk bootstrap.bundle.min.js
/ bootstrap.bundle.js
som inneholder Popper. Popper brukes ikke til å plassere rullegardinmenyene i navbarer, men da dynamisk posisjonering ikke er nødvendig.
Hvis du bygger JavaScript fra kilden, kreverutil.js
det .
tilgjengelighet
WAI ARIA - standarden definerer en faktisk role="menu"
widget , men dette er spesifikt for applikasjonslignende menyer som utløser handlinger eller funksjoner. ARIA -menyer kan bare inneholde menyelementer, avmerkingsboksmenyelementer, alternativknappmenyelementer, alternativknappgrupper og undermenyer.
Bootstraps rullegardinmenyer er på den annen side designet for å være generiske og anvendelige for en rekke situasjoner og markup-strukturer. For eksempel er det mulig å lage rullegardinmenyene som inneholder ytterligere inndata og skjemakontroller, for eksempel søkefelt eller påloggingsskjemaer. Av denne grunn forventer ikke Bootstrap (eller legger til automatisk) noen av attributtene role
og aria-
som kreves for ekte ARIA - menyer. Forfattere må inkludere disse mer spesifikke attributtene selv.
Bootstrap legger imidlertid til innebygd støtte for de fleste standard tastaturmenyinteraksjoner, for eksempel muligheten til å bevege seg gjennom individuelle .dropdown-item
elementer ved hjelp av markørtastene og lukke menyen med ESCtasten.
Eksempler
Pakk rullegardinmenyen (din knapp eller lenke) og rullegardinmenyen innenfor .dropdown
, eller et annet element som erklærer position: relative;
. Dropdowns kan utløses fra <a>
eller <button>
elementer for å passe bedre til dine potensielle behov.
Enkel knapp
Enhver enkelt .btn
kan gjøres om til en rullegardinbryter med noen markupendringer. Slik kan du få dem til å fungere med begge <button>
elementene:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
Og med <a>
elementer:
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Dropdown link
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
Det beste er at du kan gjøre dette med hvilken som helst knappvariant også:
<!-- Example single danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Action
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
Del-knapp
På samme måte kan du lage rullegardinmenyene med delte knapper med praktisk talt samme markering som rullegardinmenyene med én knapp, men med tillegg av .dropdown-toggle-split
for riktig avstand rundt rullegardinlisten.
Vi bruker denne ekstra klassen for å redusere den horisontale padding
på hver side av karet med 25 % og fjerne den margin-left
som er lagt til for vanlige knappe-rullegardinmenyene. De ekstra endringene holder feltet sentrert i delknappen og gir et mer passende størrelse treffområde ved siden av hovedknappen.
<!-- Example split danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Action</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
Dimensjonering
Nedtrekksknapper fungerer med knapper i alle størrelser, inkludert standard- og delte rullegardinknapper.
<!-- Large button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Large button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-lg" type="button">
Large split button
</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
<!-- Small button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Small button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm" type="button">
Small split button
</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
Veibeskrivelse
Dropup
Utløs rullegardinmenyer over elementer ved å legge .dropup
til det overordnede elementet.
<!-- Default dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
Dropright
Utløs rullegardinmenyer til høyre for elementene ved å legge .dropright
til det overordnede elementet.
<!-- Default dropright button -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropright
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropright button -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary">
Split dropright
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropright</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
Dropleft
Utløs rullegardinmenyer til venstre for elementene ved å legge .dropleft
til det overordnede elementet.
<!-- Default dropleft button -->
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropleft
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropleft button -->
<div class="btn-group">
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropleft</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<button type="button" class="btn btn-secondary">
Split dropleft
</button>
</div>
Menyelementer
Historisk sett måtte innholdet i rullegardinmenyen være lenker, men det er ikke lenger tilfelle med v4. Nå kan du valgfritt bruke <button>
elementer i rullegardinlistene dine i stedet for bare <a>
s.
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Du kan også opprette ikke-interaktive rullegardinelementer med .dropdown-item-text
. Stil gjerne videre med tilpassede CSS- eller tekstverktøy.
<div class="dropdown-menu">
<span class="dropdown-item-text">Dropdown item text</span>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
Aktiv
Legg .active
til elementer i rullegardinmenyen for å style dem som aktive .
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Regular link</a>
<a class="dropdown-item active" href="#">Active link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
Funksjonshemmet
Legg .disabled
til elementer i rullegardinmenyen for å stil dem som deaktivert .
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Regular link</a>
<a class="dropdown-item disabled">Disabled link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
Menyjustering
Som standard er en rullegardinmeny automatisk plassert 100 % fra toppen og langs venstre side av overordnet. Legg .dropdown-menu-right
til en .dropdown-menu
til høyre juster rullegardinmenyen.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Right-aligned menu
</button>
<div class="dropdown-menu dropdown-menu-right">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Responsiv justering
Hvis du vil bruke responsiv justering, deaktiver dynamisk posisjonering ved å legge til data-display="static"
attributtet og bruke de responsive variasjonsklassene.
For å høyrejustere rullegardinmenyen med det gitte bruddpunktet eller større, legg til .dropdown-menu{-sm|-md|-lg|-xl}-right
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Left-aligned but right aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-lg-right">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
For å justere rullegardinmenyen til venstre.dropdown-menu-right
med det gitte bruddpunktet eller større, legg til og .dropdown-menu{-sm|-md|-lg|-xl}-left
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Right-aligned but left aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-right dropdown-menu-lg-left">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Merk at du ikke trenger å legge til et data-display="static"
attributt til rullegardinknapper i navbarer, siden Popper ikke brukes i navbarer.
Menyinnhold
Overskrifter
Legg til en overskrift for å merke deler av handlinger i en rullegardinmeny.
<div class="dropdown-menu">
<h6 class="dropdown-header">Dropdown header</h6>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
</div>
Avdelere
Skill grupper av relaterte menyelementer med en skillelinje.
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
Tekst
Plasser hvilken som helst friformtekst i en rullegardinmeny med tekst og bruk mellomromsverktøy . Merk at du sannsynligvis vil trenge flere størrelsesstiler for å begrense menybredden.
<div class="dropdown-menu p-4 text-muted" style="max-width: 200px;">
<p>
Some example text that's free-flowing within the dropdown menu.
</p>
<p class="mb-0">
And this is more example text.
</p>
</div>
Skjemaer
Plasser et skjema i en rullegardinmeny, eller gjør det til en rullegardinmeny, og bruk margin- eller utfyllingsverktøy for å gi det den negative plassen du trenger.
<div class="dropdown-menu">
<form class="px-4 py-3">
<div class="form-group">
<label for="exampleDropdownFormEmail1">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword1">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
</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">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">New around here? Sign up</a>
<a class="dropdown-item" href="#">Forgot password?</a>
</div>
<form class="dropdown-menu p-4">
<div class="form-group">
<label for="exampleDropdownFormEmail2">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail2" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword2">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Password">
</div>
<div class="form-group">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck2">
<label class="form-check-label" for="dropdownCheck2">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
Alternativer for rullegardinmenyen
Bruk data-offset
eller data-reference
for å endre plasseringen av rullegardinmenyen.
<div class="d-flex">
<div class="dropdown mr-1">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false" data-offset="10,20">
Offset
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary">Reference</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false" data-reference="parent">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
</div>
Bruk
Via dataattributter eller JavaScript veksler rullegardinpluginen skjult innhold (rullegardinmenyer) ved å veksle mellom .show
klassen på den overordnede .dropdown-menu
. Attributtet er avhengig av data-toggle="dropdown"
for å lukke rullegardinmenyer på et programnivå, så det er en god idé å alltid bruke det.
$.noop
)
mouseover
behandlere ved å åpne en rullegardin til de umiddelbare underordnede av
<body>
elementet. Dette riktignok stygge hacket er nødvendig for å omgå en
finurlighet i iOS' hendelsesdelegering , som ellers ville forhindret at et trykk hvor som helst utenfor rullegardinmenyen utløser koden som lukker rullegardinmenyen. Når rullegardinmenyen er lukket,
mouseover
fjernes disse ekstra tomme behandlerne.
Via dataattributter
Legg data-toggle="dropdown"
til en lenke eller knapp for å veksle mellom en rullegardin.
<div class="dropdown">
<button type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<div class="dropdown-menu">
...
</div>
</div>
Via JavaScript
Ring rullegardinmenyene via JavaScript:
$('.dropdown-toggle').dropdown()
data-toggle="dropdown"
fortsatt nødvendig
Uansett om du kaller ned rullegardinlisten din via JavaScript eller i stedet bruker data-api, data-toggle="dropdown"
er det alltid nødvendig å være tilstede på rullegardinmenyens triggerelement.
Alternativer
Alternativer kan sendes via dataattributter eller JavaScript. For dataattributter, legg til alternativnavnet til data-
, som i data-offset=""
.
Navn | Type | Misligholde | Beskrivelse |
---|---|---|---|
offset | nummer | streng | funksjon | 0 | Forskyvning av rullegardinmenyen i forhold til målet. Når en funksjon brukes til å bestemme forskyvningen, kalles den opp med et objekt som inneholder forskyvningsdataene som det første argumentet. Funksjonen må returnere et objekt med samme struktur. Det utløsende elementet DOM-noden sendes som det andre argumentet. For mer informasjon se Poppers offset-dokumenter . |
snu | boolsk | ekte | Tillat dropdown å snu i tilfelle en overlapping på referanseelementet. For mer informasjon se Poppers flip-dokumenter . |
grense | streng | element | 'scrollParent' | Overløpsbegrensningsgrense for rullegardinmenyen. Godtar verdiene til 'viewport' , 'window' , 'scrollParent' eller en HTMLElement-referanse (kun JavaScript). For mer informasjon, se Poppers preventOverflow-dokumenter . |
referanse | streng | element | 'veksle' | Referanseelement i rullegardinmenyen. Godtar verdiene til 'toggle' , 'parent' , eller en HTMLElement-referanse. For mer informasjon se Poppers referenceObject docs . |
vise | streng | "dynamisk" | Som standard bruker vi Popper for dynamisk posisjonering. Deaktiver dette med static . |
popperConfig | null | gjenstand | null | For å endre Bootstraps standard Popper -konfigurasjon, se Poppers konfigurasjon |
Merk at når boundary
er satt til en annen verdi enn 'scrollParent'
, brukes stilen position: static
på .dropdown
beholderen.
Metoder
Metode | Beskrivelse |
---|---|
$().dropdown('toggle') |
Bytter rullegardinmenyen til en gitt navigasjonslinje eller navigering med faner. |
$().dropdown('show') |
Viser rullegardinmenyen til en gitt navigasjonslinje eller fanebasert navigasjon. |
$().dropdown('hide') |
Skjuler rullegardinmenyen til en gitt navigasjonslinje eller fanebasert navigasjon. |
$().dropdown('update') |
Oppdaterer posisjonen til et elements rullegardinmeny. |
$().dropdown('dispose') |
Ødelegger rullegardinmenyen til et element. |
arrangementer
Alle rullegardinhendelser utløses på .dropdown-menu
's overordnede element og har en relatedTarget
egenskap, hvis verdi er det vekslende ankerelementet. hide.bs.dropdown
og hidden.bs.dropdown
hendelser har en clickEvent
egenskap (bare når den opprinnelige hendelsestypen er click
) som inneholder et hendelsesobjekt for klikkhendelsen.
Begivenhet | Beskrivelse |
---|---|
show.bs.dropdown |
Denne hendelsen utløses umiddelbart når vis-instansmetoden kalles. |
shown.bs.dropdown |
Denne hendelsen utløses når rullegardinmenyen er gjort synlig for brukeren (vil vente på CSS-overganger for å fullføre). |
hide.bs.dropdown |
Denne hendelsen utløses umiddelbart når hide-forekomstmetoden har blitt kalt. |
hidden.bs.dropdown |
Denne hendelsen utløses når rullegardinmenyen er ferdig skjult for brukeren (vil vente på CSS-overganger for å fullføre). |
$('#myDropdown').on('show.bs.dropdown', function () {
// do something...
})