Source

Rozbalovací seznamy

Pomocí rozbalovacího pluginu Bootstrap můžete přepínat kontextové překryvy pro zobrazení seznamů odkazů a další.

Přehled

Rozbalovací seznamy jsou přepínatelné, kontextové překryvy pro zobrazení seznamů odkazů a další. Jsou interaktivní pomocí přiloženého JavaScriptového pluginu Bootstrap. Přepínají se kliknutím, nikoli najetím; toto je záměrné rozhodnutí o návrhu.

Rozbalovací seznamy jsou postaveny na knihovně třetí strany, Popper.js , která poskytuje dynamické určování polohy a detekci výřezů. Před JavaScript Bootstrapu nezapomeňte zahrnout popper.min.js nebo použijte bootstrap.bundle.min.js/ bootstrap.bundle.js, který obsahuje Popper.js. Popper.js se nepoužívá k umístění rozevíracích seznamů v navigačních panelech, ačkoli dynamické umístění není vyžadováno.

Pokud vytváříte náš JavaScript ze zdroje, vyžadujeutil.js .

Přístupnost

Standard WAI ARIA definuje skutečný role="menu"widget , ale to je specifické pro nabídky podobné aplikacím, které spouštějí akce nebo funkce. Nabídky ARIA mohou obsahovat pouze položky nabídky, položky nabídky zaškrtávacích políček, položky nabídky přepínačů, skupiny přepínačů a podnabídky.

Na druhou stranu rozbalovací nabídky Bootstrapu jsou navrženy tak, aby byly obecné a použitelné pro různé situace a struktury značek. Je například možné vytvořit rozevírací seznamy, které obsahují další vstupy a ovládací prvky formulářů, jako jsou vyhledávací pole nebo přihlašovací formuláře. Z tohoto důvodu Bootstrap neočekává (ani automaticky nepřidává) žádné z atributů rolea požadovaných pro skutečné nabídky ARIA . Autoři budou muset tyto specifičtější atributy zahrnout sami.aria-

Bootstrap však přidává vestavěnou podporu pro většinu standardních interakcí s nabídkou klávesnice, jako je možnost procházet jednotlivými .dropdown-itemprvky pomocí kurzorových kláves a zavírat nabídku ESCklávesou.

Příklady

Zabalte přepínač rozevíracího seznamu (vaše tlačítko nebo odkaz) a rozbalovací nabídku do .dropdown, nebo jiného prvku, který deklaruje position: relative;. Rozbalovací seznamy lze spouštět z prvků <a>nebo <button>prvků, aby lépe vyhovovaly vašim potenciálním potřebám.

Jediné tlačítko

Jakýkoli singl .btnlze změnit na rozbalovací přepínač s některými změnami značek. Zde je návod, jak je můžete uvést do práce s oběma <button>prvky:

<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>

A s <a>prvky:

<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>

Nejlepší na tom je, že to můžete udělat s jakoukoli variantou tlačítka:

<!-- 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>

Rozdělit tlačítko

Podobně vytvořte rozbalovací seznamy rozdělených tlačítek s prakticky stejným označením jako rozbalovací seznamy s jedním tlačítkem, ale s přidáním .dropdown-toggle-splitsprávného rozestupu kolem rozbalovací stříšky.

Tuto extra třídu používáme ke snížení horizontály paddingna obou stranách stříšky o 25 % a odstranění toho margin-left, co je přidáno pro běžné rozbalovací nabídky tlačítek. Tyto dodatečné změny udržují stříšku uprostřed rozděleného tlačítka a poskytují vhodnější velikost zásahové oblasti vedle hlavního tlačítka.

<!-- 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>

Dimenzování

Rozbalovací seznamy tlačítek fungují s tlačítky všech velikostí, včetně výchozích a rozdělených rozbalovacích tlačítek.

<!-- 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>

Pokyny

Dropup

Spusťte rozbalovací nabídky nad prvky přidáním .dropupdo nadřazeného prvku.

<!-- 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

Spusťte rozevírací nabídky napravo od prvků přidáním .droprightdo nadřazeného prvku.

<!-- 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

Spusťte rozevírací nabídky nalevo od prvků přidáním .dropleftdo nadřazeného prvku.

<!-- 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>

Historicky obsah rozbalovací nabídky musely být odkazy, ale to již není případ verze 4. Nyní můžete volitelně použít <button>prvky v rozbalovacích seznamech namísto pouze <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>

Můžete také vytvářet neinteraktivní rozevírací položky pomocí .dropdown-item-text. Nebojte se dále stylovat pomocí vlastních CSS nebo textových nástrojů.

<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>

Aktivní

Přidat .activek položkám v rozevíracím seznamu a upravit je jako aktivní .

<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>

Zakázáno

Přidat .disabledk položkám v rozevírací nabídce, chcete-li je upravit jako zakázané .

<div class="dropdown-menu">
  <a class="dropdown-item" href="#">Regular link</a>
  <a class="dropdown-item disabled" href="#">Disabled link</a>
  <a class="dropdown-item" href="#">Another link</a>
</div>

Ve výchozím nastavení je rozbalovací nabídka automaticky umístěna 100 % shora a podél levé strany nadřazené položky. Přidat .dropdown-menu-rightdo a .dropdown-menuzarovnat rozbalovací nabídku doprava.

Hlavy vzhůru! Rozbalovací seznamy jsou umístěny díky Popper.js (kromě případů, kdy jsou obsaženy v navigační liště).

<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>

Záhlaví

Přidejte záhlaví k označení částí akcí v libovolné rozbalovací nabídce.

<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>

Děliče

Skupiny souvisejících položek nabídky oddělte oddělovačem.

<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>

Text

Umístěte libovolný volný text do rozevírací nabídky s textem a použijte nástroje pro mezery . Všimněte si, že budete pravděpodobně potřebovat další styly velikosti, abyste omezili šířku nabídky.

<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>

formuláře

Umístěte formulář do rozevírací nabídky nebo z něj vytvořte rozevírací nabídku a použijte nástroje pro okraje nebo výplň , abyste mu poskytli požadovaný negativní prostor.

<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-check">
      <input type="checkbox" class="form-check-input" id="dropdownCheck">
      <label class="form-check-label" for="dropdownCheck">
        Remember me
      </label>
    </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-check">
    <input type="checkbox" class="form-check-input" id="dropdownCheck2">
    <label class="form-check-label" for="dropdownCheck2">
      Remember me
    </label>
  </div>
  <button type="submit" class="btn btn-primary">Sign in</button>
</form>

Pomocí data-offsetnebo data-referencezměňte umístění rozevíracího seznamu.

<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>

Používání

Pomocí atributů dat nebo JavaScriptu rozbalovací plugin přepíná skrytý obsah (rozbalovací nabídky) přepínáním .showtřídy na nadřazené položce seznamu. Na data-toggle="dropdown"atribut se spoléhá při zavírání rozevíracích nabídek na úrovni aplikace, takže je dobré jej vždy používat.

Na zařízeních s dotykovým ovládáním přidá otevření rozevíracího seznamu prázdné obslužné rutiny ( $.noop) mouseoverk bezprostředním potomkům <body>prvku. Tento nepochybně ošklivý hack je nezbytný k vyřešení podivnosti v delegování událostí systému iOS , která by jinak zabránila klepnutí kdekoli mimo rozbalovací nabídku ve spuštění kódu, který rozbalovací nabídku zavře. Po zavření rozevíracího seznamu jsou tyto další prázdné mouseoverobslužné nástroje odstraněny.

Prostřednictvím datových atributů

Přidat data-toggle="dropdown"k odkazu nebo tlačítku pro přepínání rozevírací nabídky.

<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>

Prostřednictvím JavaScriptu

Vyvolejte rozevírací seznamy pomocí JavaScriptu:

$('.dropdown-toggle').dropdown()
data-toggle="dropdown"stále vyžadováno

Bez ohledu na to, zda zavoláte rozbalovací nabídku prostřednictvím JavaScriptu nebo místo toho použijete rozhraní data-api, data-toggle="dropdown"je vždy vyžadováno, aby byl přítomen na spouštěcím prvku rozbalovací nabídky.

Možnosti

Možnosti lze předávat prostřednictvím atributů dat nebo JavaScriptu. U atributů dat připojte název volby k data-, jako v data-offset="".

název Typ Výchozí Popis
offset číslo | řetězec | funkce 0 Posun rozevíracího seznamu vzhledem k jeho cíli. Další informace naleznete v dokumentech offsetu Popper.js .
převrátit booleovský skutečný V případě překrytí na referenčním prvku povolte rozbalovací nabídku převrátit. Další informace naleznete v dokumentech k převrácení Popper.js .
hranice řetězec | živel 'scrollParent' Hranice omezení přetečení rozevírací nabídky. Přijímá hodnoty 'viewport', 'window', 'scrollParent'nebo odkaz HTMLElement (pouze JavaScript). Další informace naleznete v dokumentech preventOverflow Popper.js .
odkaz řetězec | živel 'přepnout' Referenční prvek rozbalovací nabídky. Přijímá hodnoty 'toggle', 'parent', nebo odkaz HTMLElement. Další informace naleznete v dokumentech referenceObject Popper.js .
Zobrazit tětiva 'dynamický' Ve výchozím nastavení používáme pro dynamické polohování Popper.js. Zakázat to pomocí static.

Všimněte si, že když boundaryje nastavena na jinou hodnotu než 'scrollParent', styl position: staticse použije na .dropdownkontejner.

Metody

Metoda Popis
$().dropdown('toggle') Přepíná rozevírací nabídku daného navigačního panelu nebo navigace na kartách.
$().dropdown('update') Aktualizuje pozici rozevíracího seznamu prvku.
$().dropdown('dispose') Zničí rozbalovací nabídku prvku.

Události

Všechny události rozevíracího seznamu se spouštějí u .dropdown-menunadřazeného prvku 's a mají relatedTargetvlastnost, jejíž hodnotou je přepínací prvek kotvy. hide.bs.dropdowna hidden.bs.dropdownudálosti mají clickEventvlastnost (pouze v případě, že původní typ události je click), která obsahuje objekt události pro událost kliknutí.

událost Popis
show.bs.dropdown Tato událost se spustí okamžitě, když je zavolána metoda show instance.
shown.bs.dropdown Tato událost se spustí, když je rozbalovací nabídka viditelná pro uživatele (čeká na dokončení přechodů CSS).
hide.bs.dropdown Tato událost se spustí okamžitě po zavolání metody skrytí instance.
hidden.bs.dropdown Tato událost se spustí, když je rozbalovací nabídka skryta před uživatelem (čeká na dokončení přechodů CSS).
$('#myDropdown').on('show.bs.dropdown', function () {
  // do something…
})