--- layout: docs title: Dropdowns description: Toggle contextual overlays for displaying lists of links and more with the Bootstrap dropdown plugin. group: components --- Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is [an intentional design decision.](http://markdotto.com/2012/02/27/bootstrap-explained-dropdowns/) ## Contents * Will be replaced with the ToC, excluding the "Contents" header {:toc} ## Examples Wrap the dropdown's toggle (your button or link) and the dropdown menu within `.dropdown`, or another element that declares `position: relative;`. Dropdowns can be triggered from `` or ` {% endexample %} And with `` elements: {% example html %} {% endexample %} The best part is you can do this with any button variant, too:
{% highlight html %}
{% endhighlight %} ### Split button dropdowns Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of `.dropdown-toggle-split` for proper spacing around the dropdown caret. We use this extra class to reduce the horizontal `padding` on either side of the caret by 25% and remove the `margin-left` that's added for regular button dropdowns. Those extra changes keep the caret centered in the split button and provide a more appropriately sized hit area next to the main button.
{% highlight html %}
{% endhighlight %} ## Sizing Button dropdowns work with buttons of all sizes, including default and split dropdown buttons.
{% highlight html %}
{% endhighlight %} ## Dropup variation Trigger dropdown menus above elements by adding `.dropup` to the parent element.
{% highlight html %}
{% endhighlight %} ## Menu items Historically dropdown menu contents *had* to be links, but that's no longer the case with v4. Now you can optionally use ` {% endexample %} ## Menu alignment By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. Add `.dropdown-menu-right` to a `.dropdown-menu` to right align the dropdown menu. {% callout info %} **Heads up!** Dropdowns are positioned only with CSS and may need some additional styles for exact alignment. {% endcallout %} {% example html %}
{% endexample %} ## Menu headers Add a header to label sections of actions in any dropdown menu. {% example html %}
{% endexample %} ## Menu dividers Separate groups of related menu items with a divider. {% example html %} {% endexample %} ## Disabled menu items Add `.disabled` to items in the dropdown to **style them as disabled**. {% example html %} {% endexample %} ## Usage Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.show` class on the parent list item. On touch-enabled devices, opening a dropdown adds a `.dropdown-backdrop` as a tap area for closing dropdown menus when tapping outside the menu, to work around a quirk in iOS' event delegation. **This means that once a dropdown menu is open, any tap or click (including with a mouse, on a multi-input device such as a laptop with a touchscreen) outside of the menu will be intercepted to close the menu. Opening another dropdown menu, or activating any other control or link, will therefore require an extra tap or click.** Note: The `data-toggle="dropdown"` attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it. ### Via data attributes Add `data-toggle="dropdown"` to a link or button to toggle a dropdown. {% highlight html %} {% endhighlight %} ### Via JavaScript Call the dropdowns via JavaScript: {% highlight js %} $('.dropdown-toggle').dropdown() {% endhighlight %} {% callout info %} ##### `data-toggle="dropdown"` still required Regardless of whether you call your dropdown via JavaScript or instead use the data-api, `data-toggle="dropdown"` is always required to be present on the dropdown's trigger element. {% endcallout %} ### Options *None.* ### Methods | Method | Description | | --- | --- | | `$().dropdown('toggle')` | Toggles the dropdown menu of a given navbar or tabbed navigation. | ### Events All dropdown events are fired at the `.dropdown-menu`'s parent element and have a `relatedTarget` property, whose value is the toggling anchor element. | Event | Description | | --- | --- | | `show.bs.dropdown` | This event fires immediately when the show instance method is called. | | `shown.bs.dropdown` | This event is fired when the dropdown has been made visible to the user (will wait for CSS transitions, to complete). | | `hide.bs.dropdown` | This event is fired immediately when the hide instance method has been called. | | `hidden.bs.dropdown`| This event is fired when the dropdown has finished being hidden from the user (will wait for CSS transitions, to complete). | {% highlight js %} $('#myDropdown').on('show.bs.dropdown', function () { // do something… }) {% endhighlight %}