Dropdowns are toggleable, contextual overlays for displaying lists of
links and more. Like overlays, Dropdowns are built using a third-party
library Popper.js, which provides
dynamic positioning and viewport detection.
The WAI ARIA standard
defines a role="menu" widget, but it's very specific to a certain kind of menu. ARIA menus, must
only contain role="menuitem", role="menuitemcheckbox", or role="menuitemradio".
On the other hand, Bootstrap's dropdowns are designed to more generic
and application in a variety of situations. For this reason we don't
automatically add the menu roles to the markup. We do implement some
basic keyboard navigation, and if you do provide the "menu" role,
react-bootstrap will do its best to ensure the focus management is
compliant with the ARIA authoring guidelines for menus.
The basic Dropdown is composed of a wrapping Dropdown and
inner <DropdownMenu>, and <DropdownToggle>. By
default the <DropdownToggle> will render a
Button component and accepts all the same props.
Since the above is such a common configuration react-bootstrap provides
the <DropdownButton> component to help reduce typing. Provide
a title prop and some <DropdownItem>s and you're
ready to go.
Opt into darker dropdowns to match a dark navbar or custom style by adding
variant="dark" onto an existing DropdownMenu. Alternatively, use
menuVariant="dark" when using the DropdownButton component.
Historically dropdown menu contents had to be links, but that’s no
longer the case with v4. Now you can optionally use
<button> elements in your dropdowns instead of just <a>s.
You can also create non-interactive dropdown items with <Dropdown.ItemText>.
Feel free to style further with custom CSS or text utilities.
If you want to use responsive menu alignment, pass an object containing a breakpoint to the
align prop on the <DropdownMenu>, <DropdownButton>, or <SplitButton>.
You can specify start or end for the various breakpoints.
By default, the dropdown menu is closed when selecting a menu item or clicking outside of the
dropdown menu. This behaviour can be changed by using the autoClose property.
By default, autoClose is set to the default value true and behaves like expected. By choosing false, the dropdown
menu can only be toggled by clicking on the dropdown button. inside makes the dropdown disappear only
by choosing a menu item and outside closes the dropdown menu only by clicking outside.
Notice how the dropdown is toggled in each scenario by clicking on the button.
If the default handling of the dropdown menu and toggle components
aren't to your liking, you can customize them, by using the more basic
<Dropdown> Component to explicitly specify the Toggle and
Menu components
For those that want to customize everything, you can forgo the included
Toggle and Menu components, and create your own. By providing custom
components to the as prop, you can control how each
component behaves. Custom toggle and menu components must be able to accept refs.
import React,{ useState }from'react';
import Dropdown from'react-bootstrap/Dropdown';
import Form from'react-bootstrap/Form';
// The forwardRef is important!!
// Dropdown needs access to the DOM node in order to position the Menu
import DropdownButton from 'react-bootstrap/DropdownButton'Copy import code for the DropdownButton component
A convenience component for simple or general use dropdowns. Renders a Button toggle and all children
are passed directly to the default Dropdown.Menu. This component accepts all of
Dropdown's props.
All unknown props are passed through to the Dropdown component. Only
the Button variant, size and bsPrefix props are passed to the toggle,
along with menu-related props are passed to the Dropdown.Menu
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.
import SplitButton from 'react-bootstrap/SplitButton'Copy import code for the SplitButton component
A convenience component for simple or general use split button dropdowns. Renders a
ButtonGroup containing a Button and a Button toggle for the Dropdown. All children
are passed directly to the default Dropdown.Menu. This component accepts all of Dropdown's
props.
All unknown props are passed through to the Dropdown component.
The Button variant, size and bsPrefix props are passed to the button and toggle,
and menu-related props are passed to the Dropdown.Menu
Accessible label for the toggle; the value of title if not specified.
type
string
'button'
A type passed to the non-toggle Button
variant
string
Component visual or contextual style variants.
bsPrefix
string
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.
Aligns the dropdown menu to the specified side of the Dropdown toggle. You can
also align the menu responsively for breakpoints starting at sm and up.
The alignment direction will affect the specified breakpoint or larger.
Note: Using responsive alignment will disable Popper usage for positioning.
as
elementType
You can use a custom element type for this component.
autoClose
true | 'outside' | 'inside' | false
true
Controls the auto close behaviour of the dropdown when clicking outside of
the button or the list.
Determines the direction and location of the Menu in relation to it's Toggle.
focusFirstItemOnShow
false | true | 'keyboard'
Controls the focus behavior for when the Dropdown is opened. Set to
true to always focus the first menu item, keyboard to focus only when
navigating via the keyboard, or false to disable completely
The Default behavior is falseunless the Menu has a role="menu"
where it will default to keyboard to match the recommended ARIA Authoring practices.
navbar
boolean
false
onSelect
function
A callback fired when a menu item is selected.
(eventKey: any,event: Object)=> any
onToggle
function
controls show
A callback fired when the Dropdown wishes to change visibility. Called with the requested
show value, the DOM event, and the source that fired it: 'click','keydown','rootClose', or 'select'.
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.
import Dropdown from 'react-bootstrap/Dropdown'Copy import code for the Dropdown component
Name
Type
Default
Description
as
elementType
<Button>
You can use a custom element type for this component.
childBsPrefix
string
to passthrough to the underlying button or whatever from DropdownButton
id
string|number
An html id attribute, necessary for assistive technologies, such as screen readers.
split
boolean
bsPrefix
string
'dropdown-toggle'
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.
Aligns the dropdown menu to the specified side of the container. You can also align
the menu responsively for breakpoints starting at sm and up. The alignment
direction will affect the specified breakpoint or larger.
Note: Using responsive alignment will disable Popper usage for positioning.
as
elementType
<div>
Control the rendering of the DropdownMenu. All non-menu props
(listed here) are passed through to the as Component.
If providing a custom, non DOM, component. the show, close and align props
are also injected and should be handled appropriately.
flip
boolean
true
Have the dropdown switch to it's opposite placement when necessary to stay on screen.
popperConfig
object
A set of popper options and props passed directly to Popper.
renderOnMount
boolean
Whether to render the dropdown menu in the DOM before the first time it is shown
rootCloseEvent
'click' | 'mousedown'
Which event when fired outside the component will cause it to be closed
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.
import Dropdown from 'react-bootstrap/Dropdown'Copy import code for the Dropdown component
Name
Type
Default
Description
active
boolean
Highlight the menu item as active.
as
elementType
<Anchor>
You can use a custom element type for this component.
disabled
boolean
false
Disable the menu item, making it unselectable.
eventKey
string | number
Value passed to the onSelect handler, useful for identifying the selected menu item.
href
string
HTML href attribute corresponding to a.href.
onClick
function
Callback fired when the menu item is clicked.
bsPrefix
string
'dropdown-item'
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.
import Dropdown from 'react-bootstrap/Dropdown'Copy import code for the Dropdown component
Name
Type
Default
Description
as
elementType
<div>
You can use a custom element type for this component.
bsPrefix required
string
'dropdown-header'
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.
import Dropdown from 'react-bootstrap/Dropdown'Copy import code for the Dropdown component
Name
Type
Default
Description
as
elementType
<hr>
You can use a custom element type for this component.
bsPrefix required
string
'dropdown-divider'
Change the underlying component CSS base class name and modifier class names prefix. This is an escape hatch for working with heavily customized bootstrap css.