ドロップダウン
Bootstrap ドロップダウン プラグインを使用して、リンクなどのリストを表示するコンテキスト オーバーレイを切り替えます。
概要
ドロップダウンは、リンクのリストなどを表示するための切り替え可能なコンテキスト オーバーレイです。それらは、含まれている Bootstrap ドロップダウン JavaScript プラグインを使用してインタラクティブに作成されます。ホバリングではなく、クリックすることで切り替えられます。これは意図的な設計上の決定です。
ドロップダウンは、動的な配置とビューポートの検出を提供するサード パーティのライブラリであるPopperに基づいて構築されています。Bootstrap の JavaScript の前に必ずpopper.min.jsを含めるか、 Popper を含むbootstrap.bundle.min.js
/bootstrap.bundle.js
を使用してください。動的な配置は必要ないため、ナビゲーションバーにドロップダウンを配置するためにポッパーは使用されません。
JavaScript をソースからビルドする場合はutil.js
、 .
アクセシビリティ
WAI ARIA標準は実際の widget を定義します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>
オプションで、sだけでなく、ドロップダウンで要素を使用できるようになりまし<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
ドロップダウンの項目に追加して、それらを 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-right
にするには、aに追加します。.dropdown-menu
<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 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>
ドロップダウン オプション
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 を介し.show
て、親のクラスを切り替えることにより、非表示のコンテンツ (ドロップダウン メニュー) を切り替えます.dropdown-menu
。このdata-toggle="dropdown"
属性は、アプリケーション レベルでドロップダウン メニューを閉じるために使用されるため、常に使用することをお勧めします。
$.noop
)
ハンドラーが追加されます。この確かに醜いハックは
、iOS のイベント デリゲーションの癖を回避するために必要です。そうしないと、ドロップダウンの外側のどこかをタップしても、ドロップダウンを閉じるコードがトリガーされなくなります。ドロップダウンが閉じられると、これらの追加の空の
ハンドラーは削除されます。
mouseover
<body>
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=""
。
名前 | タイプ | デフォルト | 説明 |
---|---|---|---|
オフセット | 数 | 文字列 | 関数 | 0 | ターゲットに対するドロップダウンのオフセット。 オフセットを決定するために関数が使用される場合、その関数はオフセット データを含むオブジェクトを最初の引数として呼び出されます。関数は、同じ構造を持つオブジェクトを返さなければなりません。トリガー要素の DOM ノードは、2 番目の引数として渡されます。 詳細については、Popper のオフセット ドキュメントを参照してください。 |
フリップ | ブール値 | 真実 | 参照要素が重なっている場合に、ドロップダウンが反転できるようにします。詳細については、Popper のフリップ ドキュメントを参照してください。 |
境界 | 文字列 | エレメント | 「スクロール親」 | ドロップダウン メニューのオーバーフロー制約境界。'viewport' 、'window' 、'scrollParent' 、または HTMLElement 参照 (JavaScript のみ)の値を受け入れます。詳細については、Popper のpreventOverflow docsを参照してください。 |
参照 | 文字列 | エレメント | 'トグル' | ドロップダウン メニューの参照要素。'toggle' 、'parent' 、または HTMLElement 参照の値を受け入れます。詳細については、Popper のreferenceObject docsを参照してください。 |
画面 | ストリング | '動的' | デフォルトでは、動的ポジショニングに 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...
})