Dropdown
See React Bootstrap/Dropdowns for full documentation and props.
Dropdowns in react-bootstrap provide some level of accessibility but in most cases roles or ids will need to be specifically associated with the menu elements themselves.
Dropdowns can be created with a Dropdown.Toggle component or a DropdownButton component.
Result
Loading...
Live Editor
<div data-testid="pw-dropdown"> <Dropdown> <Dropdown.Toggle>Toggle</Dropdown.Toggle> <Dropdown.Menu> <Dropdown.Item>Apple</Dropdown.Item> <Dropdown.Item>Banana</Dropdown.Item> <Dropdown.Item>Cantaloupe</Dropdown.Item> </Dropdown.Menu> </Dropdown> </div>
With headers and dividers
Result
Loading...
Live Editor
<div data-testid="pw-dropdown-header"> <Dropdown.Menu show className="position-relative"> <Dropdown.Header>Fruit</Dropdown.Header> <Dropdown.Item>Apple</Dropdown.Item> <Dropdown.Item>Banana</Dropdown.Item> <Dropdown.Item>Cantaloupe</Dropdown.Item> <Dropdown.Divider /> <Dropdown.Header>Vegetables</Dropdown.Header> <Dropdown.Item>Asparagus</Dropdown.Item> <Dropdown.Item>Broccoli</Dropdown.Item> <Dropdown.Item>Carrot</Dropdown.Item> </Dropdown.Menu> </div>
With multiple columns
Columns can be created with layout options (flex, grid, etc.).
Result
Loading...
Live Editor
<Dropdown> <Dropdown.Toggle>Toggle</Dropdown.Toggle> <Dropdown.Menu role="menu"> <div className="d-flex align-items-stretch"> <div> <Dropdown.Header>Fruit</Dropdown.Header> <Dropdown.Item>Apple</Dropdown.Item> <Dropdown.Item>Banana</Dropdown.Item> <Dropdown.Item>Cantaloupe</Dropdown.Item> </div> <div className="vr" /> <div> <Dropdown.Header>Vegetables</Dropdown.Header> <Dropdown.Item>Asparagus</Dropdown.Item> <Dropdown.Item>Broccoli</Dropdown.Item> <Dropdown.Item>Carrot</Dropdown.Item> </div> </div> </Dropdown.Menu> </Dropdown>
With non-interactive items
The Dropdown.ItemText component can be used to create non-interactive items.
Result
Loading...
Live Editor
<Dropdown> <Dropdown.Toggle>Toggle</Dropdown.Toggle> <Dropdown.Menu> <Dropdown.Item>Apple</Dropdown.Item> <Dropdown.Item>Banana</Dropdown.Item> <Dropdown.Item>Cantaloupe</Dropdown.Item> <Dropdown.ItemText>There are no more fruit to see here.</Dropdown.ItemText> </Dropdown.Menu> </Dropdown>
With form inputs
Dropdown.Items are anchor tags by default, so it's important to use Dropdown.ItemText when putting inputs inside them to make sure clicking it doesn't append a # to the end of the page URL and scroll to the top of the page.
Result
Loading...
Live Editor
function Example() { const [show, setShow] = useState(false); return ( <Dropdown show={show} onToggle={setShow}> <Dropdown.Toggle>Toggle</Dropdown.Toggle> <Dropdown.Menu> <Dropdown.ItemText> <Radio label="Radio" onChange={() => setShow(false)} /> </Dropdown.ItemText> <Dropdown.ItemText> <Checkbox label="Checkbox" onChange={() => setShow(false)} /> </Dropdown.ItemText> <Dropdown.ItemText> <Switch label="Switch" onChange={() => setShow(false)} /> </Dropdown.ItemText> </Dropdown.Menu> </Dropdown> ); }
With icons, links, and helpers
Result
Loading...
Live Editor
<div data-testid="pw-dropdown-helper"> <Dropdown> <Dropdown.Toggle>Toggle</Dropdown.Toggle> <Dropdown.Menu> <Dropdown.Item> <ListGroup.Item.Header title="Menu Item" /> </Dropdown.Item> <Dropdown.Item> <ListGroup.Item.Header title="Menu Item w/Helper" helper="