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.
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. Zde uvedené příklady používají <ul>
tam, kde je to vhodné, sémantické prvky, ale je podporováno vlastní označení.
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-bs-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
A s <a>
prvky:
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown link
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</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-bs-toggle="dropdown" aria-expanded="false">
Action
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</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-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</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-bs-toggle="dropdown" aria-expanded="false">
Large button
</button>
<ul class="dropdown-menu">
...
</ul>
</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-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Small button
</button>
<ul class="dropdown-menu">
...
</ul>
</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-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
Tmavé rozbalovací nabídky
Aktivujte tmavší rozevírací seznamy, aby odpovídaly tmavému navigačnímu panelu nebo vlastnímu stylu přidáním .dropdown-menu-dark
do existujícího .dropdown-menu
. V rozbalovacích položkách nejsou nutné žádné změny.
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item active" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</div>
A jeho použití v navigační liště:
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDarkDropdown" aria-controls="navbarNavDarkDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDarkDropdown">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
Pokyny
RTL
Pokyny jsou zrcadleny při použití Bootstrapu v RTL, význam .dropstart
se zobrazí na pravé straně.
Na střed
Vytvořte rozevírací nabídku uprostřed pod přepínačem pomocí .dropdown-center
nadřazeného prvku.
<div class="dropdown-center">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Centered dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Action two</a></li>
<li><a class="dropdown-item" href="#">Action three</a></li>
</ul>
</div>
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-bs-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</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-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
Dropup vycentrovaný
Umístěte rozbalovací nabídku na střed nad přepínačem pomocí .dropup-center
nadřazeného prvku.
<div class="dropup-center dropup">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Centered dropup
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Action two</a></li>
<li><a class="dropdown-item" href="#">Action three</a></li>
</ul>
</div>
Droppend
Spusťte rozevírací nabídky napravo od prvků přidáním .dropend
do nadřazeného prvku.
<!-- Default dropend button -->
<div class="btn-group dropend">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropend
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
<!-- Split dropend button -->
<div class="btn-group dropend">
<button type="button" class="btn btn-secondary">
Split dropend
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropend</span>
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
Dropstart
Spusťte rozevírací nabídky nalevo od prvků přidáním .dropstart
do nadřazeného prvku.
<!-- Default dropstart button -->
<div class="btn-group dropstart">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropstart
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
<!-- Split dropstart button -->
<div class="btn-group dropstart">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropstart</span>
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
<button type="button" class="btn btn-secondary">
Split dropstart
</button>
</div>
Položky menu
Jako rozbalovací položky můžete použít prvky <a>
nebo .<button>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</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ů.
<ul class="dropdown-menu">
<li><span class="dropdown-item-text">Dropdown item text</span></li>
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
Aktivní
Přidat .active
k položkám v rozevíracím seznamu a upravit je jako aktivní . Chcete-li přenést aktivní stav na asistenční technologie, použijte aria-current
atribut — pomocí page
hodnoty pro aktuální stránku nebo true
pro aktuální položku v sadě.
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Regular link</a></li>
<li><a class="dropdown-item active" href="#" aria-current="true">Active link</a></li>
<li><a class="dropdown-item" href="#">Another link</a></li>
</ul>
Zakázáno
Přidat .disabled
k položkám v rozevírací nabídce, chcete-li je upravit jako zakázané .
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Regular link</a></li>
<li><a class="dropdown-item disabled">Disabled link</a></li>
<li><a class="dropdown-item" href="#">Another link</a></li>
</ul>
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. Můžete to změnit pomocí směrových .drop*
tříd, ale můžete je také ovládat pomocí dalších tříd modifikátorů.
Přidat .dropdown-menu-end
do a .dropdown-menu
zarovnat rozbalovací nabídku doprava. Pokyny jsou zrcadleny při použití Bootstrapu v RTL, význam .dropdown-menu-end
se objeví na levé straně.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Right-aligned menu example
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>
Responzivní zarovnání
Pokud chcete použít responzivní zarovnání, zakažte dynamické umístění přidáním data-bs-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|-xxl}-end
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Left-aligned but right aligned when large screen
</button>
<ul class="dropdown-menu dropdown-menu-lg-end">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>
Chcete-li zarovnat levou rozevírací nabídku s daným nebo větším bodem přerušení, přidejte .dropdown-menu-end
a .dropdown-menu{-sm|-md|-lg|-xl|-xxl}-start
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Right-aligned but left aligned when large screen
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>
Všimněte si, že k rozevíracím tlačítkům v navbarech nemusíte přidávat data-bs-display="static"
atribut, protože Popper se v navbarech nepoužívá.
Možnosti zarovnání
Vezmeme-li většinu z výše uvedených možností, zde je ukázka malého kuchyňského dřezu s různými možnostmi zarovnání rozevíracího seznamu na jednom místě.
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Right-aligned menu
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Left-aligned, right-aligned lg
</button>
<ul class="dropdown-menu dropdown-menu-lg-end">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Right-aligned, left-aligned lg
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group dropstart">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropstart
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group dropend">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropend
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
Obsah menu
Záhlaví
Přidejte záhlaví k označení částí akcí v libovolné rozbalovací nabídce.
<ul class="dropdown-menu">
<li><h6 class="dropdown-header">Dropdown header</h6></li>
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
</ul>
Děliče
Skupiny souvisejících položek nabídky oddělte oddělovačem.
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
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="mb-3">
<label for="exampleDropdownFormEmail1" class="form-label">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="[email protected]">
</div>
<div class="mb-3">
<label for="exampleDropdownFormPassword1" class="form-label">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
</div>
<div class="mb-3">
<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>
<div class="dropdown">
<button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-auto-close="outside">
Dropdown form
</button>
<form class="dropdown-menu p-4">
<div class="mb-3">
<label for="exampleDropdownFormEmail2" class="form-label">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail2" placeholder="[email protected]">
</div>
<div class="mb-3">
<label for="exampleDropdownFormPassword2" class="form-label">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Password">
</div>
<div class="mb-3">
<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>
</div>
Rozbalovací možnosti
Pomocí data-bs-offset
nebo data-bs-reference
změňte umístění rozevíracího seznamu.
<div class="d-flex">
<div class="dropdown me-1">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-offset="10,20">
Offset
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</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-bs-toggle="dropdown" aria-expanded="false" data-bs-reference="parent">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</div>
</div>
Chování automatického zavírání
Ve výchozím nastavení se rozbalovací nabídka zavře, když klepnete uvnitř nebo mimo rozbalovací nabídku. Pomocí této autoClose
možnosti můžete toto chování rozbalovací nabídky změnit.
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="true" aria-expanded="false">
Default dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="inside" aria-expanded="false">
Clickable outside
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
Clickable inside
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="false" aria-expanded="false">
Manual close
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
CSS
Proměnné
Přidáno ve verzi 5.2.0V rámci vyvíjejícího se přístupu Bootstrap k proměnným CSS nyní rozbalovací seznamy používají místní proměnné CSS .dropdown-menu
pro vylepšené přizpůsobení v reálném čase. Hodnoty pro proměnné CSS se nastavují prostřednictvím Sass, takže přizpůsobení Sass je stále podporováno.
--#{$prefix}dropdown-zindex: #{$zindex-dropdown};
--#{$prefix}dropdown-min-width: #{$dropdown-min-width};
--#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};
--#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};
--#{$prefix}dropdown-spacer: #{$dropdown-spacer};
@include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);
--#{$prefix}dropdown-color: #{$dropdown-color};
--#{$prefix}dropdown-bg: #{$dropdown-bg};
--#{$prefix}dropdown-border-color: #{$dropdown-border-color};
--#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};
--#{$prefix}dropdown-border-width: #{$dropdown-border-width};
--#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};
--#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};
--#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};
--#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};
--#{$prefix}dropdown-link-color: #{$dropdown-link-color};
--#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};
--#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};
--#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};
--#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};
--#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};
--#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};
--#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};
--#{$prefix}dropdown-header-color: #{$dropdown-header-color};
--#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};
--#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};
Přizpůsobení pomocí proměnných CSS lze vidět na .dropdown-menu-dark
třídě, kde přepisujeme konkrétní hodnoty bez přidávání duplicitních selektorů CSS.
--#{$prefix}dropdown-color: #{$dropdown-dark-color};
--#{$prefix}dropdown-bg: #{$dropdown-dark-bg};
--#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};
--#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};
--#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};
--#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};
--#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};
--#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};
--#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};
--#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};
--#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};
--#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};
Sass proměnné
Proměnné pro všechny rozbalovací nabídky:
$dropdown-min-width: 10rem;
$dropdown-padding-x: 0;
$dropdown-padding-y: .5rem;
$dropdown-spacer: .125rem;
$dropdown-font-size: $font-size-base;
$dropdown-color: $body-color;
$dropdown-bg: $white;
$dropdown-border-color: var(--#{$prefix}border-color-translucent);
$dropdown-border-radius: $border-radius;
$dropdown-border-width: $border-width;
$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width);
$dropdown-divider-bg: $dropdown-border-color;
$dropdown-divider-margin-y: $spacer * .5;
$dropdown-box-shadow: $box-shadow;
$dropdown-link-color: $gray-900;
$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%);
$dropdown-link-hover-bg: $gray-200;
$dropdown-link-active-color: $component-active-color;
$dropdown-link-active-bg: $component-active-bg;
$dropdown-link-disabled-color: $gray-500;
$dropdown-item-padding-y: $spacer * .25;
$dropdown-item-padding-x: $spacer;
$dropdown-header-color: $gray-600;
$dropdown-header-padding-x: $dropdown-item-padding-x;
$dropdown-header-padding-y: $dropdown-padding-y;
// fusv-disable
$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x; // Deprecated in v5.2.0
// fusv-enable
Proměnné pro tmavý rozevírací seznam :
$dropdown-dark-color: $gray-300;
$dropdown-dark-bg: $gray-800;
$dropdown-dark-border-color: $dropdown-border-color;
$dropdown-dark-divider-bg: $dropdown-divider-bg;
$dropdown-dark-box-shadow: null;
$dropdown-dark-link-color: $dropdown-dark-color;
$dropdown-dark-link-hover-color: $white;
$dropdown-dark-link-hover-bg: rgba($white, .15);
$dropdown-dark-link-active-color: $dropdown-link-active-color;
$dropdown-dark-link-active-bg: $dropdown-link-active-bg;
$dropdown-dark-link-disabled-color: $gray-500;
$dropdown-dark-header-color: $gray-500;
Proměnné pro stříšky založené na CSS, které označují interaktivitu rozbalovací nabídky:
$caret-width: .3em;
$caret-vertical-align: $caret-width * .85;
$caret-spacing: $caret-width * .85;
Mixins
Mixiny se používají ke generování stříšek založených na CSS a lze je nalézt v scss/mixins/_caret.scss
.
@mixin caret-down {
border-top: $caret-width solid;
border-right: $caret-width solid transparent;
border-bottom: 0;
border-left: $caret-width solid transparent;
}
@mixin caret-up {
border-top: 0;
border-right: $caret-width solid transparent;
border-bottom: $caret-width solid;
border-left: $caret-width solid transparent;
}
@mixin caret-end {
border-top: $caret-width solid transparent;
border-right: 0;
border-bottom: $caret-width solid transparent;
border-left: $caret-width solid;
}
@mixin caret-start {
border-top: $caret-width solid transparent;
border-right: $caret-width solid;
border-bottom: $caret-width solid transparent;
}
@mixin caret($direction: down) {
@if $enable-caret {
&::after {
display: inline-block;
margin-left: $caret-spacing;
vertical-align: $caret-vertical-align;
content: "";
@if $direction == down {
@include caret-down();
} @else if $direction == up {
@include caret-up();
} @else if $direction == end {
@include caret-end();
}
}
@if $direction == start {
&::after {
display: none;
}
&::before {
display: inline-block;
margin-right: $caret-spacing;
vertical-align: $caret-vertical-align;
content: "";
@include caret-start();
}
}
&:empty::after {
margin-left: 0;
}
}
}
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-bs-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.
mouseover
seznamu k bezprostředním potomkům
<body>
prvku prázdné obslužné nástroje. 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-bs-toggle="dropdown"
k odkazu nebo tlačítku pro přepínání rozevírací nabídky.
<div class="dropdown">
<button type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
Prostřednictvím JavaScriptu
Vyvolejte rozevírací seznamy pomocí JavaScriptu:
const dropdownElementList = document.querySelectorAll('.dropdown-toggle')
const dropdownList = [...dropdownElementList].map(dropdownToggleEl => new bootstrap.Dropdown(dropdownToggleEl))
data-bs-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-bs-toggle="dropdown"
je vždy vyžadováno, aby byl přítomen na spouštěcím prvku rozbalovací nabídky.
Možnosti
Protože volby lze předávat prostřednictvím datových atributů nebo JavaScriptu, můžete přidat název volby k data-bs-
, jako v data-bs-animation="{value}"
. Při předávání možností prostřednictvím datových atributů se ujistěte, že jste změnili typ případu názvu možnosti z „ camelCase “ na „ kebab-case “. Použijte například data-bs-custom-class="beautifier"
místo data-bs-customClass="beautifier"
.
Od Bootstrapu 5.2.0 všechny komponenty podporují experimentální atribut vyhrazených dat data-bs-config
, který může obsahovat jednoduchou konfiguraci komponenty jako řetězec JSON. Když má prvek atributy data-bs-config='{"delay":0, "title":123}'
a data-bs-title="456"
, konečná title
hodnota bude 456
a samostatné datové atributy přepíší hodnoty uvedené na data-bs-config
. Kromě toho mohou existující datové atributy obsahovat hodnoty JSON, jako je data-bs-delay='{"show":0,"hide":150}'
.
název | Typ | Výchozí | Popis |
---|---|---|---|
autoClose |
boolean, řetězec | true |
Nakonfigurujte chování automatického zavírání rozevíracího seznamu:
|
boundary |
řetězec, prvek | 'clippingParents' |
Hranice omezení přetečení rozevírací nabídky (platí pouze pro Popperův modifikátor preventOverflow). Ve výchozím nastavení je clippingParents a může přijímat referenci HTMLElement (pouze prostřednictvím JavaScriptu). Další informace naleznete v dokumentech DetectOverflow společnosti Popper . |
display |
tětiva | 'dynamic' |
Standardně pro dynamické polohování používáme Popper. Zakázat to pomocí static . |
offset |
pole, řetězec, funkce | [0, 2] |
Posun rozevíracího seznamu vzhledem k jeho cíli. V atributech dat můžete předat řetězec s hodnotami oddělenými čárkami, jako jsou: data-bs-offset="10,20" . Když je funkce použita k určení offsetu, je volána s objektem obsahujícím umístění popper, odkaz a popper rects jako svůj první argument. Uzel DOM spouštěcího prvku je předán jako druhý argument. Funkce musí vrátit pole se dvěma čísly: skidding , distance . Další informace naleznete v Popperově ofsetové dokumentaci . |
popperConfig |
null, objekt, funkce | null |
Chcete-li změnit výchozí konfiguraci Popperu Bootstrapu, viz Konfigurace Popperu . Když je funkce použita k vytvoření konfigurace Popper, je volána s objektem, který obsahuje výchozí konfiguraci Popperu Bootstrapu. Pomůže vám použít a sloučit výchozí nastavení s vaší vlastní konfigurací. Funkce musí vrátit konfigurační objekt pro Popper. |
reference |
řetězec, prvek, předmět | 'toggle' |
Referenční prvek rozbalovací nabídky. Přijímá hodnoty 'toggle' , 'parent' , odkaz HTMLElement nebo objekt poskytující getBoundingClientRect . Další informace naleznete v dokumentech Popperova konstruktoru a dokumentech virtuálních prvků . |
Použití funkce spopperConfig
const dropdown = new bootstrap.Dropdown(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metody
Metoda | Popis |
---|---|
dispose |
Zničí rozbalovací nabídku prvku. (Odstraní uložená data v prvku DOM) |
getInstance |
Statická metoda, která vám umožňuje získat instanci rozevíracího seznamu přidruženou k prvku DOM, můžete ji použít takto: bootstrap.Dropdown.getInstance(element) . |
getOrCreateInstance |
Statická metoda, která vrátí instanci rozevíracího seznamu přidruženou k prvku DOM nebo vytvoří novou v případě, že nebyla inicializována. Můžete jej použít takto: bootstrap.Dropdown.getOrCreateInstance(element) . |
hide |
Skryje rozbalovací nabídku daného navigačního panelu nebo navigace na kartách. |
show |
Zobrazuje rozevírací nabídku daného navigačního panelu nebo navigace na kartách. |
toggle |
Přepíná rozevírací nabídku daného navigačního panelu nebo navigace na kartách. |
update |
Aktualizuje pozici rozevíracího seznamu prvku. |
Události
Všechny události rozevíracího seznamu se spouštějí u přepínacího prvku a poté se rozbublávají. Takže můžete také přidat posluchače událostí do .dropdown-menu
nadřazeného prvku 's. 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í.
Typ události | Popis |
---|---|
hide.bs.dropdown |
Spustí se okamžitě, když hide byla zavolána metoda instance. |
hidden.bs.dropdown |
Spustí se, když je rozbalovací nabídka skryta před uživatelem a jsou dokončeny přechody CSS. |
show.bs.dropdown |
Spustí se okamžitě při show volání metody instance. |
shown.bs.dropdown |
Spustí se, když je rozbalovací nabídka viditelná pro uživatele a přechody CSS jsou dokončeny. |
const myDropdown = document.getElementById('myDropdown')
myDropdown.addEventListener('show.bs.dropdown', event => {
// do something...
})