2014-07-12 07:34:47 +02:00
---
2015-08-15 07:45:55 +02:00
layout: docs
2014-07-12 07:34:47 +02:00
title: Dropdowns
2015-08-06 02:47:45 +02:00
group: components
2014-07-12 07:34:47 +02:00
---
2015-08-25 01:32:32 +02:00
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/ )
2014-07-12 07:34:47 +02:00
2015-05-29 10:58:52 +02:00
## Contents
* Will be replaced with the ToC, excluding the "Contents" header
{:toc}
2015-03-31 03:23:35 +02:00
## Example
2014-07-12 07:34:47 +02:00
2015-08-11 01:31:28 +02:00
Wrap the dropdown's trigger and the dropdown menu within `.dropdown` , or another element that declares `position: relative;` . Then, add the menu's HTML.
2014-07-12 07:34:47 +02:00
{% example html %}
2015-08-11 01:31:28 +02:00
< div class = "dropdown open" >
2015-06-19 08:56:43 +02:00
< button class = "btn btn-secondary dropdown-toggle" type = "button" id = "dropdownMenu1" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
2014-07-12 07:34:47 +02:00
Dropdown
< / button >
2015-08-17 20:19:14 +02:00
< div class = "dropdown-menu" aria-labelledby = "dropdownMenu1" >
< 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 >
2014-07-12 07:34:47 +02:00
< / div >
{% endexample %}
2015-08-18 03:18:37 +02:00
### Button elements
2015-08-18 03:21:59 +02:00
You can optionally use `<button>` elements in your dropdowns instead of `<a>` s.
2015-08-18 03:18:37 +02:00
{% example html %}
< div class = "dropdown open" >
2015-08-25 14:37:08 +02:00
< button class = "btn btn-secondary dropdown-toggle" type = "button" id = "dropdownMenu2" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
2015-08-18 03:18:37 +02:00
Dropdown
< / button >
2015-08-25 14:37:08 +02:00
< div class = "dropdown-menu" aria-labelledby = "dropdownMenu2" >
2015-08-18 03:18:37 +02:00
< 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 >
{% endexample %}
2015-03-31 03:23:35 +02:00
## Alignment
2014-07-12 07:34:47 +02:00
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.
2015-08-11 01:31:28 +02:00
{% callout info %}
**Heads up!** Dropdowns are positioned only with CSS and may need some additional styles for exact alignment.
2015-04-17 01:56:40 +02:00
{% endcallout %}
2014-07-12 07:34:47 +02:00
2016-01-11 01:02:33 +01:00
{% example html %}
< div class = "btn-group" >
< button type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
This dropdown's menu is right-aligned
< / 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 >
2015-08-17 20:19:14 +02:00
< / div >
2016-01-11 01:02:33 +01:00
{% endexample %}
2014-07-12 07:34:47 +02:00
2015-03-31 03:23:35 +02:00
## Menu headers
2014-07-12 07:34:47 +02:00
Add a header to label sections of actions in any dropdown menu.
{% example html %}
2015-08-17 20:19:14 +02:00
< 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 >
2014-07-12 07:34:47 +02:00
{% endexample %}
2015-03-31 03:23:35 +02:00
## Menu dividers
2014-07-12 07:34:47 +02:00
Separate groups of related menu items with a divider.
{% example html %}
2015-08-17 20:19:14 +02:00
< 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 >
2014-07-12 07:34:47 +02:00
{% endexample %}
2015-03-31 03:23:35 +02:00
## Disabled menu items
2014-07-12 07:34:47 +02:00
2015-08-17 20:19:14 +02:00
Add `.disabled` to items in the dropdown to **style them as disabled** .
2014-07-12 07:34:47 +02:00
{% example html %}
2015-08-17 20:19:14 +02:00
< div class = "dropdown-menu" >
< a class = "dropdown-item" href = "#" > Regular link< / a >
< a class = "dropdown-item disabled" href = "#" > Disabled link< / a >
< a class = "dropdown-item" href = "#" > Another link< / a >
< / div >
2014-07-12 07:34:47 +02:00
{% endexample %}
2015-03-31 03:23:35 +02:00
## Usage
Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.open` class on the parent list item.
On mobile devices, opening a dropdown adds a `.dropdown-backdrop` as a tap area for closing dropdown menus when tapping outside the menu, a requirement for proper iOS support. **This means that switching from an open dropdown menu to a different dropdown menu requires an extra tap on mobile.**
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 %}
< div class = "dropdown" >
2015-06-19 08:56:43 +02:00
< button id = "dLabel" type = "button" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
2015-03-31 03:23:35 +02:00
Dropdown trigger
< / button >
2015-08-17 20:19:14 +02:00
< div class = "dropdown-menu" aria-labelledby = "dLabel" >
2015-03-31 03:23:35 +02:00
...
2015-08-17 20:19:14 +02:00
< / div >
2015-03-31 03:23:35 +02:00
< / div >
{% endhighlight %}
To keep URLs intact with link buttons, use the `data-target` attribute instead of `href="#"` .
{% highlight html %}
< div class = "dropdown" >
2015-06-19 08:56:43 +02:00
< a id = "dLabel" data-target = "#" href = "http://example.com" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
2015-03-31 03:23:35 +02:00
Dropdown trigger
< / a >
2015-08-17 20:19:14 +02:00
< div class = "dropdown-menu" aria-labelledby = "dLabel" >
2015-03-31 03:23:35 +02:00
...
2015-08-17 20:19:14 +02:00
< / div >
2015-03-31 03:23:35 +02:00
< / div >
{% endhighlight %}
### Via JavaScript
Call the dropdowns via JavaScript:
{% highlight js %}
$('.dropdown-toggle').dropdown()
{% endhighlight %}
2015-04-17 01:56:40 +02:00
{% 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 %}
2015-03-31 03:23:35 +02:00
### Options
*None.*
### Methods
2015-08-11 01:16:39 +02:00
| Method | Description |
| --- | --- |
| `$().dropdown('toggle')` | Toggles the dropdown menu of a given navbar or tabbed navigation. |
2015-03-31 03:23:35 +02:00
### 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.
2015-08-11 01:16:39 +02:00
| 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). |
2015-03-31 03:23:35 +02:00
{% highlight js %}
$('#myDropdown').on('show.bs.dropdown', function () {
// do something…
})
{% endhighlight %}