Source

ドロップダウン

Bootstrap ドロップダウン プラグインを使用して、リンクなどのリストを表示するコンテキスト オーバーレイを切り替えます。

概要

ドロップダウンは、リンクのリストなどを表示するための切り替え可能なコンテキスト オーバーレイです。それらは、含まれている Bootstrap ドロップダウン JavaScript プラグインを使用してインタラクティブに作成されます。ホバリングではなく、クリックすることで切り替えられます。これは意図的な設計上の決定です。

ドロップダウンは、動的ポジショニングとビューポート検出を提供するサードパーティ ライブラリPopper.jsに基づいて構築されています。Bootstrap の JavaScript の前に必ずpopper.min.jsを含めるか、 Popper.js を含むbootstrap.bundle.min.js/bootstrap.bundle.jsを使用してください。Popper.js は、動的な配置が必要ないため、navbars にドロップダウンを配置するために使用されません。

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" 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>要素で:

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

最良の部分は、ボタンのバリアントでもこれを実行できることです。

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

分割ボタン

同様に、単一ボタン ドロップダウンと実質的に同じマークアップを使用して分割ボタン ドロップダウンを作成しますが.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-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>

サイジング

ボタン ドロップダウンは、デフォルトのドロップダウン ボタンやスプリット ドロップダウン ボタンなど、あらゆるサイズのボタンで機能します。

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

方向

ドロップアップ

.dropup親要素に追加して、要素の上のドロップダウン メニューをトリガーします。

<!-- 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親要素に追加して、要素の右側にあるドロップダウン メニューをトリガーします。

<!-- 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親要素に追加して、要素の左側にあるドロップダウン メニューをトリガーします。

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

従来、ドロップダウン メニューのコンテンツはリンクでなければなりませんでしたが、v4 ではそうではなくなりました。<button>オプションで、sだけでなく、ドロップダウンで要素を使用できるようになりまし<a>た。

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

を使用して非インタラクティブなドロップダウン アイテムを作成することもできます.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" href="#" tabindex="-1" aria-disabled="true">Disabled link</a>
  <a class="dropdown-item" href="#">Another link</a>
</div>

デフォルトでは、ドロップダウン メニューは親の左側に沿って上から 100% の位置に自動的に配置されます。ドロップダウン メニューを右揃え.dropdown-menu-rightにするには、aに追加します。.dropdown-menu

注意喚起!ドロップダウンは、Popper.js のおかげで配置されます (ナビゲーション バーに含まれている場合を除く)。

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

レスポンシブ アライメント

レスポンシブ アライメントを使用する場合は、属性を追加して動的配置を無効にし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-haspopup="true" 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-haspopup="true" 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.js が使用されないため、ナビゲーション バーのドロップダウン ボタンに属性を追加する必要がないことに注意してください。

ヘッダー

ヘッダーを追加して、ドロップダウン メニューのアクションのセクションにラベルを付けます。

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

使用法

ドロップダウン プラグインは、データ属性または JavaScript を介し.showて、親リスト項目のクラスを切り替えることにより、非表示のコンテンツ (ドロップダウン メニュー) を切り替えます。このdata-toggle="dropdown"属性は、アプリケーション レベルでドロップダウン メニューを閉じるために使用されるため、常に使用することをお勧めします。

タッチ対応デバイスでドロップダウンを開くと、要素の直接の子に空の ( $.noop)ハンドラーが追加されます。この確かに醜いハックは、iOS のイベント デリゲーションの癖を回避するために必要です。そうしないと、ドロップダウンの外側のどこかをタップしても、ドロップダウンを閉じるコードがトリガーされなくなります。ドロップダウンが閉じられると、これらの追加の空のハンドラーは削除されます。mouseover<body>mouseover

データ属性経由

data-toggle="dropdown"リンクまたはボタンに追加して、ドロップダウンを切り替えます。

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

JavaScript 経由

JavaScript を介してドロップダウンを呼び出します。

$('.dropdown-toggle').dropdown()
data-toggle="dropdown"まだ必要

JavaScript を介してドロップダウンを呼び出すか、代わりに data-api を使用するかに関係なく、data-toggle="dropdown"常にドロップダウンのトリガー要素に存在する必要があります。

オプション

オプションは、データ属性または JavaScript を介して渡すことができます。data-データ属性の場合、オプション名をのようにに追加しますdata-offset=""

名前 タイプ デフォルト 説明
オフセット 数 | 文字列 | 関数 0 ターゲットに対するドロップダウンのオフセット。詳細については、Popper.js のオフセット ドキュメントを参照してください。
フリップ ブール値 真実 参照要素が重なっている場合に、ドロップダウンが反転できるようにします。詳細については、Popper.js のフリップ ドキュメントを参照してください。
境界 文字列 | エレメント 「スクロール親」 ドロップダウン メニューのオーバーフロー制約境界。'viewport''window''scrollParent'、または HTMLElement 参照 (JavaScript のみ)の値を受け入れます。詳細については、Popper.js のpreventOverflow docsを参照してください。
参照 文字列 | エレメント 'トグル' ドロップダウン メニューの参照要素。'toggle''parent'、または HTMLElement 参照の値を受け入れます。詳細については、Popper.js のreferenceObject docsを参照してください。
画面 ストリング '動的' デフォルトでは、動的ポジショニングに Popper.js を使用します。でこれを無効にしstaticます。

boundaryを 以外の値に設定する'scrollParent'と、スタイルがコンテナにposition: static適用されることに注意してください。.dropdown

メソッド

方法 説明
$().dropdown('toggle') 特定のナビゲーション バーまたはタブ付きナビゲーションのドロップダウン メニューを切り替えます。
$().dropdown('show') 特定のナビゲーション バーまたはタブ付きナビゲーションのドロップダウン メニューを表示します。
$().dropdown('hide') 特定のナビゲーション バーまたはタブ付きナビゲーションのドロップダウン メニューを非表示にします。
$().dropdown('update') 要素のドロップダウンの位置を更新します。
$().dropdown('dispose') 要素のドロップダウンを破棄します。

イベント

すべてのドロップダウン イベントは.dropdown-menuの親要素で発生しrelatedTarget、トグル アンカー要素を値とするプロパティがあります。イベントhide.bs.dropdownには、クリック イベントのイベント オブジェクトを含むプロパティがあります (元のイベント タイプが の場合のみ)。hidden.bs.dropdownclickEventclick

イベント 説明
show.bs.dropdown このイベントは、show インスタンス メソッドが呼び出されるとすぐに発生します。
shown.bs.dropdown このイベントは、ドロップダウンがユーザーに表示されるようになったときに発生します (CSS トランジションが完了するのを待ちます)。
hide.bs.dropdown このイベントは、hide インスタンス メソッドが呼び出されるとすぐに発生します。
hidden.bs.dropdown このイベントは、ドロップダウンがユーザーから非表示にされたときに発生します (CSS トランジションが完了するのを待ちます)。
$('#myDropdown').on('show.bs.dropdown', function () {
  // do something…
})