Skip to content
uiify

Dropdown menu

Action menu with rich items, choices and submenus that opens before hydration.

Browsers
Chrome 151+
Why this version?

CSS anchor positioning places this surface beside its trigger using position-anchor, and anchor(). Older Chrome versions may place the surface away from its trigger.

Firefox 151+
Why this version?

CSS anchor positioning places this surface beside its trigger using position-anchor, and anchor(). Older Firefox versions may place the surface away from its trigger.

Safari 27+
Why this version?

CSS anchor positioning places this surface beside its trigger using position-anchor, and anchor(). Older Safari versions may place the surface away from its trigger.

Tier
2
Bundle compressed
6.43 kB
Forced layout budget
0 ms
Axe budget
0
SSR compatible
Yes
Published contract
Test harness

Playground

Dropdown menu

Simple menu

Complex menu

Large menu

Menu bar

API

DropdownMenu.Bar

DropdownMenu.Root

DropdownMenu.Trigger

DropdownMenu.Content

DropdownMenu.Group

DropdownMenu.Label

DropdownMenu.Item

DropdownMenu.ItemIcon

DropdownMenu.ItemText

DropdownMenu.ItemDescription

DropdownMenu.Shortcut

DropdownMenu.ItemIndicator

DropdownMenu.Separator

DropdownMenu.CheckboxItem

DropdownMenu.RadioGroup

DropdownMenu.RadioItem

DropdownMenu.Sub

DropdownMenu.SubTrigger

DropdownMenu.SubContent

Keyboard

KeyAction
Enter / Space / ↓Open menu and focus the first item
↑ / ↓Rove between items, wrapping at the ends
EscapeClose and return focus to the trigger
Home / EndJump to first / last item
a–zTypeahead to the matching item
→ / ←Open / close a submenu (reversed in RTL)

Accessibility

Native popover opens on click before hydration; enhanced keyboard navigation, typeahead, checkbox/radio items, and click, hover, or arrow-key submenus activate after hydration. Regular items close by default; choice items stay open. Positioning uses native CSS anchors without collision handling.

Styling hooks

data-partdata-statedata-disableddata-highlighteddata-sidedata-aligndata-checkeddata-indeterminate