下拉式選單
使用 Bootstrap 下拉式選單外掛程式,切換顯示連結清單等內容的情境式覆蓋層。
概觀
下拉式選單是可以切換的,用於顯示連結清單等內容的情境式覆蓋層。它們透過內含的 Bootstrap 下拉式選單 JavaScript 外掛程式,變成互動式的。它們是透過點擊切換,而不是滑鼠移入;這是 一項有意的設計決策。
下拉式選單建立在第三方函式庫 Popper 上,它提供動態定位和視窗偵測。務必在 Bootstrap 的 JavaScript 之前包含 popper.min.js,或使用包含 Popper 的 bootstrap.bundle.min.js
/ bootstrap.bundle.js
。不過,Popper 並未用於定位導覽列中的下拉式選單,因為不需要動態定位。
如果您從原始碼建置我們的 JavaScript,它需要 util.js
。
無障礙
WAI ARIA 標準定義了一個實際的 role="menu"
小工具,但這特定於應用程式類型的選單,會觸發動作或功能。 ARIA 選單只能包含選單項目、核取方塊選單項目、單選按鈕選單項目、單選按鈕群組和子選單。
另一方面,Bootstrap 的下拉式選單設計成通用,適用於各種情況和標記結構。例如,可以建立包含其他輸入和表單控制項的下拉式選單,例如搜尋欄位或登入表單。因此,Bootstrap 沒有預期(或自動新增)任何真正的 ARIA 選單所需的 role
和 aria-
屬性。作者必須自己包含這些更具體的屬性。
不過,Bootstrap 確實新增了對大多數標準鍵盤選單互動的內建支援,例如使用游標鍵瀏覽個別 .dropdown-item
元素,並使用 ESC 鍵關閉選單。
範例
將下拉式選單的切換(按鈕或連結)和下拉式選單包在 .dropdown
中,或宣告 position: relative;
的其他元素中。可以從 <a>
或 <button>
元素觸發下拉式選單,以更符合您的潛在需求。
單一按鈕
任何單一的 .btn
都可以透過一些標記變更變成下拉式選單切換。以下是使用 <button>
元素讓它們運作的方法
<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>
元素
<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>
最棒的是,您也可以對任何按鈕變體執行此操作
<!-- 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>
分割按鈕
類似地,建立分割按鈕下拉式選單,標記幾乎與單一按鈕下拉式選單相同,但新增了 .dropdown-toggle-split
以在下拉式插入符號周圍適當地間距。
我們使用這個額外的類別,將插入符號兩側的水平 padding
減少 25%,並移除為一般按鈕下拉式選單新增的 margin-left
。這些額外的變更使插入符號置中於分割按鈕,並在主按鈕旁邊提供更適當大小的點擊區域。
<!-- 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>
大小
按鈕下拉式選單適用於所有尺寸的按鈕,包括預設和分割下拉式按鈕。
<!-- 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>
方向
向上彈出
透過在父元素中新增 .dropup
來在元素上方觸發下拉式選單。
<!-- 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
來在元素右側觸發下拉式選單。
<!-- 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
來在元素左側觸發下拉式選單。
<!-- 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>
選單項目
傳統上,下拉式選單內容必須是連結,但在 v4 中已不再如此。現在,您可以在下拉式選單中選擇使用 <button>
元素,而不再僅限於 <a>
。
<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>
您也可以使用 .dropdown-item-text
建立非互動式下拉式選單項目。歡迎使用自訂 CSS 或文字工具進一步設定樣式。
<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>
作用中
在下拉式選單中新增 .active
至項目以將其樣式設定為已啟用。
<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>
停用
在下拉式選單中新增 .disabled
至項目以將其樣式設定為已停用。
<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>
選單對齊
預設情況下,下拉式選單會自動從其父元素的頂端和左側定位 100%。在 .dropdown-menu
中新增 .dropdown-menu-right
以將下拉式選單右對齊。
<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>
回應式對齊
如果您想使用回應式對齊,請透過新增 data-display="static"
屬性來停用動態定位,並使用回應式變異類別。
若要將下拉式選單與指定的斷點或較大尺寸右對齊,請新增 .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>
若要將下拉式選單與指定的斷點或較大尺寸左對齊,請新增 .dropdown-menu-right
和 .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>
請注意,您不需要在導覽列中的下拉式按鈕中新增 data-display="static"
屬性,因為導覽列中不會使用 Popper。
選單內容
標題
在任何下拉式選單中新增標頭標籤動作區段。
<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>
分隔線
使用分隔線區分相關選單項目群組。
<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 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>
表單
在下拉式選單中放置表單,或將其製成下拉式選單,並使用 邊距或內距工具 來提供您所需的負空間。
<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@example.com">
</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@example.com">
</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>
下拉式選單選項
使用 data-offset
或 data-reference
來變更下拉式選單的位置。
<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>
用法
透過資料屬性或 JavaScript,下拉式選單外掛程式會在父 .dropdown-menu
上切換 .show
類別,來切換隱藏的內容(下拉式選單)。data-toggle="dropdown"
屬性用於在應用程式層級關閉下拉式選單,因此最好總是使用它。
$.noop
) mouseover
處理常式新增到 <body>
元素的直接子元素。這種公認醜陋的技巧對於解決 iOS 事件委派中的怪癖 是必要的,否則會阻止在下拉式選單外部的任何地方輕觸,觸發關閉下拉式選單的程式碼。一旦下拉式選單關閉,這些額外的空 mouseover
處理常式就會被移除。
透過資料屬性
將 data-toggle="dropdown"
加入連結或按鈕以切換下拉選單。
<div class="dropdown">
<button type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<div class="dropdown-menu">
...
</div>
</div>
透過 JavaScript
透過 JavaScript 呼叫下拉選單
$('.dropdown-toggle').dropdown()
data-toggle="dropdown"
仍然需要
無論您透過 JavaScript 呼叫下拉選單或使用 data-api,data-toggle="dropdown"
始終需要存在於下拉選單的觸發元素中。
選項
選項可透過資料屬性或 JavaScript 傳遞。對於資料屬性,將選項名稱附加到 data-
,例如 data-offset=""
。
名稱 | 類型 | 預設值 | 說明 |
---|---|---|---|
offset | 數字 | 字串 | 函式 | 0 |
下拉選單相對於其目標的偏移量。 當使用函式來決定偏移量時,會呼叫一個物件,其中包含偏移量資料作為其第一個引數。函式必須傳回具有相同結構的物件。觸發元素 DOM 節點傳遞為第二個引數。 有關更多資訊,請參閱 Popper 的 偏移量文件。 |
flip | 布林值 | true | 允許下拉選單在與參考元素重疊的情況下翻轉。有關更多資訊,請參閱 Popper 的 翻轉文件。 |
boundary | 字串 | 元素 | 'scrollParent' | 下拉選單功能表的溢位約束邊界。接受 'viewport' 、'window' 、'scrollParent' 的值,或一個 HTMLElement 參考(僅限 JavaScript)。有關更多資訊,請參閱 Popper 的 防止溢位文件。 |
reference | 字串 | 元素 | 'toggle' | 下拉選單功能表的參考元素。接受 'toggle' 、'parent' 的值,或一個 HTMLElement 參考。有關更多資訊,請參閱 Popper 的 referenceObject 文件。 |
display | 字串 | 'dynamic' | 預設情況下,我們使用 Popper 進行動態定位。使用 static 停用此功能。 |
popperConfig | null | 物件 | null | 若要變更 Bootstrap 的預設 Popper 組態,請參閱 Popper 的組態 |
請注意,當 boundary
設定為 'scrollParent'
以外的任何值時,樣式 position: static
會套用至 .dropdown
容器。
方法
方法 | 說明 |
---|---|
$().dropdown('toggle') |
切換給定導覽列或標籤式導覽的下拉式選單。 |
$().dropdown('show') |
顯示給定導覽列或標籤式導覽的下拉式選單。 |
$().dropdown('hide') |
隱藏給定導覽列或標籤式導覽的下拉式選單。 |
$().dropdown('update') |
更新元素下拉式選單的位置。 |
$().dropdown('dispose') |
銷毀元素的下拉式選單。 |
事件
所有下拉式選單事件都觸發於 .dropdown-menu
的父元素,並具有 relatedTarget
屬性,其值為切換錨定元素。hide.bs.dropdown
和 hidden.bs.dropdown
事件具有 clickEvent
屬性(僅當原始事件類型為 click
時),其中包含點擊事件的事件物件。
事件 | 說明 |
---|---|
show.bs.dropdown |
當呼叫 show 實例方法時,此事件會立即觸發。 |
shown.bs.dropdown |
當下拉式選單對使用者可見時,此事件會觸發(會等待 CSS 轉場完成)。 |
hide.bs.dropdown |
當呼叫 hide 實例方法時,此事件會立即觸發。 |
hidden.bs.dropdown |
當下拉式選單對使用者隱藏完成時,此事件會觸發(會等待 CSS 轉場完成)。 |
$('#myDropdown').on('show.bs.dropdown', function () {
// do something...
})