Dropdown
Dropdown is a floating menu that appears when a trigger element is clicked. It supports action lists, checkboxes, radio selection, and submenus.
Playground
<DropdownMenu>
<DropdownMenu.Trigger asChild>
<Button variant="outline"
rightIcon={<ChevronDown />}>Menu</Button>
</DropdownMenu.Trigger>
<DropdownMenu.Content>
<DropdownMenu.Item>Profile</DropdownMenu.Item>
<DropdownMenu.Item>Settings</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item>Log out</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu>Variants
Sizes
smmdlg| Size | Padding | Item Font | Preview |
|---|---|---|---|
sm | 6px 8px | 12px | |
md | 6px 8px | 13px | |
lg | 10px 12px | 14px |
API
Component Structure
DropdownMenu— Radix DropdownMenu.TriggerTrigger element.ContentPropsMenu panel (radius, flush, size).ItemPropsMenu item (inset support).CheckboxItemCheckbox item.RadioGroupRadio selection group.RadioItemRadio item.LabelGroup label.SeparatorDivider.GroupItem group.SubSubmenu root.SubTriggerSubmenu trigger.SubContentSubmenu panel.ShortcutShortcut hintProps
DropdownMenu.Content
size"md""sm" | "md" | "lg"Menu item size
radius"md""md" | "lg" | "xl"Content and item border radius (Item auto-calculated)
flushfalsebooleanDisplay items full-width (no inner padding)
side"bottom""top" | "right" | "bottom" | "left"Menu display direction
sideOffset4numberDistance from trigger (px)
align"center""start" | "center" | "end"Alignment relative to trigger
alignOffset0numberAlignment offset (px)
loopfalsebooleanKeyboard navigation loop
| Name | Type | Default | Description |
|---|---|---|---|
size | "sm" | "md" | "lg" | "md" | Menu item size |
radius | "md" | "lg" | "xl" | "md" | Content and item border radius (Item auto-calculated) |
flush | boolean | false | Display items full-width (no inner padding) |
side | "top" | "right" | "bottom" | "left" | "bottom" | Menu display direction |
sideOffset | number | 4 | Distance from trigger (px) |
align | "start" | "center" | "end" | "center" | Alignment relative to trigger |
alignOffset | number | 0 | Alignment offset (px) |
loop | boolean | false | Keyboard navigation loop |
DropdownMenu.Item
disabledundefinedbooleanDisabled state
onSelectundefined(event: Event) => voidCallback on selection
insetundefinedbooleanAdd left padding (for icon alignment)
| Name | Type | Default | Description |
|---|---|---|---|
disabled | boolean | undefined | Disabled state |
onSelect | (event: Event) => void | undefined | Callback on selection |
inset | boolean | undefined | Add left padding (for icon alignment) |
Customization
classNameto customize the style of content and items.
Change width
<DropdownMenu.Content className="w-56">Highlight dangerous actions
<DropdownMenu.Item className="text-text-error focus:text-text-error">Tip: Each sub-component accepts className, allowing you to override styles with Tailwind classes.
Anatomy
Best Practices
Recommended
- ✓Use when there are 3 or more actions
- ✓Group related actions together
- ✓Visually distinguish destructive actions
- ✓Show shortcut keys when available
Avoid
- ✗Don't exceed 10 menu items
- ✗Use Nav for navigation purposes
- ✗Don't nest submenus more than 2 levels
- ✗Avoid long menus on mobile
Accessibility
Keyboard
ARIA Attributes
role="menu"Auto-applied to Contentrole="menuitem"Auto-applied to Itemaria-expandedTrigger state management- Focus indicator
Dropdown vs Select
They look similar but serve different purposes. Choose the right component for your use case.
Purpose
Dropdown: Action execution
Select: Value selection
Form integration
Dropdown: None
Select: name / value submission
After selection
Dropdown: Menu just closes
Select: Value reflected in trigger
Item types
Dropdown: Item, Checkbox, Radio, Sub
Select: Single selection items
Use cases
Dropdown: Context menu, account actions
Select: Country, category, sort order
| Feature | Dropdown | Select |
|---|---|---|
| Purpose | Action execution | Value selection |
| Form integration | None | name / value submission |
| After selection | Menu just closes | Value reflected in trigger |
| Item types | Item, Checkbox, Radio, Sub | Single selection items |
| Use cases | Context menu, account actions | Country, category, sort order |
Selection guide: When users choose a value to submit in a form, use Select instead. Dropdown is appropriate when clicking triggers an action (edit, delete, share, etc.).