React Dropdown - Flowbite
Use the dropdown component to trigger a list of menu items when clicking on an element such as a button or link based on multiple styles, sizes, and placements with React
The dropdown component is a UI element built with React that displays a list of items when a trigger element (e.g., a button) is clicked. You can use it to build dropdown menus, lists, and more.
The default styles are built using utility classes from Tailwind CSS. You can customize the behavior and positioning of the dropdowns using custom props from React.
To start using the component make sure that you have imported it from Flowbite React:
import { Dropdown } from "flowbite-react";
#
Default dropdownUse this example to create a simple dropdown with a list of menu items by adding child <Dropdown.Item>
components inside the main <Dropdown>
component.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<Dropdown label="Dropdown button" dismissOnClick={false}>
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
);
}
#
Dropdown dividerUse the <Dropdown.Divider>
component to add a divider between the dropdown items.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<Dropdown label="Dropdown button">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Item>Separated link</Dropdown.Item>
</Dropdown>
);
}
#
Dropdown headerUse the <Dropdown.Header>
component to add a header to the dropdown. You can use this to add a user profile image and name, for example.
For more complex headers that include an <input>
or <TextInput>
control, set enableTypeAhead
to false
on the <Dropdown>
to prevent keystrokes from being interpreted as item searches.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<Dropdown label="Dropdown button">
<Dropdown.Header>
<span className="block text-sm">Bonnie Green</span>
<span className="block truncate text-sm font-medium">[email protected]</span>
</Dropdown.Header>
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
);
}
#
Dropdown items with iconAdd custom icons next to the menu items by using the icon
prop on the <Dropdown.Item>
component.
"use client";
import { Dropdown } from "flowbite-react";
import { HiCog, HiCurrencyDollar, HiLogout, HiViewGrid } from "react-icons/hi";
export function Component() {
return (
<Dropdown label="Dropdown">
<Dropdown.Header>
<span className="block text-sm">Bonnie Green</span>
<span className="block truncate text-sm font-medium">[email protected]</span>
</Dropdown.Header>
<Dropdown.Item icon={HiViewGrid}>Dashboard</Dropdown.Item>
<Dropdown.Item icon={HiCog}>Settings</Dropdown.Item>
<Dropdown.Item icon={HiCurrencyDollar}>Earnings</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Item icon={HiLogout}>Sign out</Dropdown.Item>
</Dropdown>
);
}
#
Inline dropdownUse the inline
prop to make the dropdown appear inline with the trigger element.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<Dropdown label="Dropdown" inline>
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
);
}
#
Dropdown sizesYou can use the size
prop to change the size of the dropdown. The default size is md
.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<div className="flex items-center gap-4">
<Dropdown label="Small dropdown" size="sm">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
<Dropdown label="Large dropdown" size="lg">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
</div>
);
}
#
Placement optionsUse the placement
prop to change the placement of the dropdown by choosing one of the following options: top
, right
, bottom
or left
. If there is not enough space then the dropdown will be automatically repositioned.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap gap-4">
<Dropdown label="Dropdown top" placement="top">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
<Dropdown label="Dropdown right" placement="right">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
<Dropdown label="Dropdown bottom" placement="bottom">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
<Dropdown label="Dropdown left" placement="left">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
<Dropdown label="Dropdown left start" placement="left-start">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
<Dropdown label="Dropdown right start" placement="right-start">
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
</div>
);
}
#
Click event handlerAdd a custom onClick
event handler to the <Dropdown.Item>
component to handle the click event.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<Dropdown label="Dropdown">
<Dropdown.Item onClick={() => alert('Dashboard!')}>Dashboard</Dropdown.Item>
<Dropdown.Item onClick={() => alert('Settings!')}>Settings</Dropdown.Item>
<Dropdown.Item onClick={() => alert('Earnings!')}>Earnings</Dropdown.Item>
<Dropdown.Item onClick={() => alert('Sign out!')}>Sign out</Dropdown.Item>
</Dropdown>
);
}
#
Custom triggerTo customize the trigger element, you can use the renderTrigger
property.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<Dropdown label="" dismissOnClick={false} renderTrigger={() => <span>My custom trigger</span>}>
<Dropdown.Item>Dashboard</Dropdown.Item>
<Dropdown.Item>Settings</Dropdown.Item>
<Dropdown.Item>Earnings</Dropdown.Item>
<Dropdown.Item>Sign out</Dropdown.Item>
</Dropdown>
);
}
#
Custom itemTo customize the Dropdown.Item
base element you can use the as
property.
"use client";
import { Dropdown } from "flowbite-react";
export function Component() {
return (
<Dropdown dismissOnClick={false} label="My custom item">
<Dropdown.Item as={Link} href="#">
Home
</Dropdown.Item>
<Dropdown.Item as="a" href="https://flowbite.com/" target="_blank">
External link
</Dropdown.Item>
</Dropdown>
);
}
#
ThemeTo learn more about how to customize the appearance of components, please see the Theme docs.
{
"arrowIcon": "ml-2 h-4 w-4",
"content": "py-1 focus:outline-none",
"floating": {
"animation": "transition-opacity",
"arrow": {
"base": "absolute z-10 h-2 w-2 rotate-45",
"style": {
"dark": "bg-gray-900 dark:bg-gray-700",
"light": "bg-white",
"auto": "bg-white dark:bg-gray-700"
},
"placement": "-4px"
},
"base": "z-10 w-fit divide-y divide-gray-100 rounded shadow focus:outline-none",
"content": "py-1 text-sm text-gray-700 dark:text-gray-200",
"divider": "my-1 h-px bg-gray-100 dark:bg-gray-600",
"header": "block px-4 py-2 text-sm text-gray-700 dark:text-gray-200",
"hidden": "invisible opacity-0",
"item": {
"container": "",
"base": "flex w-full cursor-pointer items-center justify-start px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 focus:bg-gray-100 focus:outline-none dark:text-gray-200 dark:hover:bg-gray-600 dark:hover:text-white dark:focus:bg-gray-600 dark:focus:text-white",
"icon": "mr-2 h-4 w-4"
},
"style": {
"dark": "bg-gray-900 text-white dark:bg-gray-700",
"light": "border border-gray-200 bg-white text-gray-900",
"auto": "border border-gray-200 bg-white text-gray-900 dark:border-none dark:bg-gray-700 dark:text-white"
},
"target": "w-fit"
},
"inlineWrapper": "flex items-center"
}