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 založeny na knihovně třetí strany, Popper , 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. Popper se nepoužívá k umístění rozevíracích seznamů v navbarech, 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ů role
a 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-item
prvky 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 .btn
lze 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" 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>
A s <a>
prvky:
<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>
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-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-split
správného rozestupu kolem rozbalovací stříšky.
Tuto extra třídu používáme ke snížení horizontály padding
na 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-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-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>
Pokyny
Dropup
Spusťte rozbalovací nabídky nad prvky přidáním .dropup
do 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-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
Spusťte rozevírací nabídky napravo od prvků přidáním .dropright
do 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-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
Spusťte rozevírací nabídky nalevo od prvků přidáním .dropleft
do 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-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>
Položky menu
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" 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>
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 .active
k 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 .disabled
k 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">Disabled link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
Zarovnání nabídky
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-right
do a .dropdown-menu
zarovnat rozbalovací nabídku doprava.
<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>
Responzivní zarovnání
Pokud chcete použít responzivní zarovnání, zakažte dynamické umístění přidáním data-display="static"
atributu a použijte responzivní třídy variací.
Chcete-li rozbalovací nabídku zarovnat vpravo s daným bodem přerušení nebo větším, přidejte .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>
Chcete-li zarovnat levou rozevírací nabídku s daným nebo větším bodem přerušení, přidejte .dropdown-menu-right
a .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>
Všimněte si, že k rozevíracím tlačítkům v navbarech nemusíte přidávat data-display="static"
atribut, protože Popper se v navbarech nepoužívá.
Obsah menu
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-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>
Rozbalovací možnosti
Pomocí data-offset
nebo data-reference
změň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" 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>
Používání
Pomocí atributů dat nebo JavaScriptu rozbalovací plugin přepíná skrytý obsah (rozbalovací nabídky) přepínáním .show
třídy na nadřazeném .dropdown-menu
. 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.
$.noop
)
mouseover
k 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é
mouseover
obsluž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 type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<div class="dropdown-menu">
...
</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. Když je funkce použita k určení offsetu, je volána s objektem obsahujícím offset data jako svůj první argument. Funkce musí vrátit objekt se stejnou strukturou. Uzel DOM spouštěcího prvku je předán jako druhý argument. Další informace naleznete v Popperově ofsetové dokumentaci . |
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 najdete v Popperově flip docs . |
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 Popperových dokumentech preventOverflow . |
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 dokumentu Popper's referenceObject docs . |
Zobrazit | tětiva | 'dynamický' | Standardně pro dynamické polohování používáme Popper. Zakázat to pomocí static . |
popperConfig | null | objekt | nula | Chcete-li změnit výchozí konfiguraci Popperu Bootstrapu, viz Konfigurace Popperu |
Všimněte si, že když boundary
je nastavena na jinou hodnotu než 'scrollParent'
, styl position: static
se použije na .dropdown
kontejner.
Metody
Metoda | Popis |
---|---|
$().dropdown('toggle') |
Přepíná rozevírací nabídku daného navigačního panelu nebo navigace na kartách. |
$().dropdown('show') |
Zobrazuje rozevírací nabídku daného navigačního panelu nebo navigace na kartách. |
$().dropdown('hide') |
Skryje rozbalovací 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-menu
nadřazeného prvku 's a mají relatedTarget
vlastnost, jejíž hodnotou je přepínací prvek kotvy. hide.bs.dropdown
a hidden.bs.dropdown
události mají clickEvent
vlastnost (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...
})