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.js , 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.jssom inneholder Popper.js. Popper.js 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 roleog 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-itemelementer 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 .btnkan 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" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown button
  </button>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
    <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" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown link
  </a>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
    <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-haspopup="true" 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-splitfor riktig avstand rundt rullegardinlisten.
Vi bruker denne ekstra klassen for å redusere den horisontale paddingpå hver side av karet med 25 % og fjerne den margin-leftsom 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-haspopup="true" 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-haspopup="true" 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-haspopup="true" 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-haspopup="true" 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-haspopup="true" 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 .dropuptil det overordnede elementet.
<!-- Default dropup button -->
<div class="btn-group dropup">
  <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" 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-haspopup="true" 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 .droprighttil det overordnede elementet.
<!-- Default dropright button -->
<div class="btn-group dropright">
  <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" 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-haspopup="true" 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 .droplefttil det overordnede elementet.
<!-- Default dropleft button -->
<div class="btn-group dropleft">
  <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" 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" role="group">
    <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" 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" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown
  </button>
  <div class="dropdown-menu" aria-labelledby="dropdownMenu2">
    <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 .activetil 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 .disabledtil 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" href="#" tabindex="-1" aria-disabled="true">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-righttil en .dropdown-menutil høyre juster rullegardinmenyen.
Vær oppmerksom! Rullegardiner er plassert takket være Popper.js (bortsett fra når de er inneholdt i en navbar).
<div class="btn-group">
  <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" 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 bruk 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-haspopup="true" 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-haspopup="true" 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.js 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
Sett et skjema i en rullegardinmeny, eller gjør det til en rullegardinmeny, og bruk margin- eller polstringsverktø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-offseteller data-referencefor å endre plasseringen av rullegardinmenyen.
<div class="d-flex">
  <div class="dropdown mr-1">
    <button type="button" class="btn btn-secondary dropdown-toggle" id="dropdownMenuOffset" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="10,20">
      Offset
    </button>
    <div class="dropdown-menu" aria-labelledby="dropdownMenuOffset">
      <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" id="dropdownMenuReference" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-reference="parent">
      <span class="sr-only">Toggle Dropdown</span>
    </button>
    <div class="dropdown-menu" aria-labelledby="dropdownMenuReference">
      <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 .showklassen på det overordnede listeelementet. Attributtet er avhengig av data-toggle="dropdown"for å lukke rullegardinmenyer på et programnivå, så det er en god idé å alltid bruke det.
På berøringsaktiverte enheter legger du til tomme ( $.noop) mouseoverbehandlere 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, mouseoverfjernes disse ekstra tomme behandlerne.
Via dataattributter
Legg data-toggle="dropdown"til en lenke eller knapp for å veksle mellom en rullegardin.
<div class="dropdown">
  <button id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown trigger
  </button>
  <div class="dropdown-menu" aria-labelledby="dLabel">
    ...
  </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. For mer informasjon, se Popper.js sine offset-dokumenter . | 
| snu | boolsk | ekte | Tillat dropdown å snu i tilfelle en overlapping på referanseelementet. For mer informasjon se Popper.js sine 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 Popper.js sine preventOverflow-dokumenter . | 
| referanse | streng | element | 'veksle' | Referanseelement i rullegardinmenyen. Godtar verdiene til 'toggle','parent', eller en HTMLElement-referanse. For mer informasjon, se Popper.js sin referenceObject docs . | 
| vise | streng | "dynamisk" | Som standard bruker vi Popper.js for dynamisk posisjonering. Deaktiver dette med static. | 
Merk at når boundaryer satt til en annen verdi enn 'scrollParent', brukes stilen position: staticpå .dropdownbeholderen.
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 relatedTargetegenskap, hvis verdi er det vekslende ankerelementet. hide.bs.dropdownog hidden.bs.dropdownhendelser har en clickEventegenskap (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…
})