Dropdown
Atom
Floating menus triggered by a button: actions, options, navigation.
Playground
Every control sets a real prop of DropdownProps. The JSX below updates as you go.
Web
iOS
Android
JSX · DropdownProps
Variants
9 examples from src/atoms/dropdown/dropdown.md, each rendered live from its own JSX.
Anatomy
1
Trigger
2
Menu
3
Section label
4
Item
5
Shortcut
6
Destructive item
Dimmed parts appear only in some states or variants.
Props
22 props on DropdownProps, grouped as they are declared in source. Required props are marked *.
Accessibility and keyboard
Keyboard
Enter
Space
ArrowDown
Opens the menu
ArrowUp
ArrowDown
Moves between items
Home
End
First · last item
Enter
Chooses the item
Escape
Closes, focus returns to the trigger
Semantics
Roles
button
group
menu
menuitem
radio
States
checked
disabled
expanded
ARIA on web
aria-checked
aria-disabled
aria-expanded
aria-haspopup
aria-label
Below the platform minimum, the touch area grows to 44 pt on iOS and 48 dp on Android without moving the layout.
From the docs
In glass mode the menu is a dense-layer glass card under its trigger (or above it when it fits there); the trigger keeps its place, its press and its accessible name and state, and a selection commits and closes the menu the moment a row is pressed. AvatarMenu and the collapsed Navbar menu are built on Dropdown. Solid mode paints the skin's own menu.
Platform skins
The playground's props on each platform: same tree, native shapes, type and touch sizes.
Usage
On the web the menu is the v4 panel: a card with a hairline and a soft shadow, 36-pixel rows with quiet icons that take a raised wash under the pointer at once, a mono uppercase eyebrow over a section, mono shortcuts in their own column, destructive rows in the destructive ink, and a disabled row in the muted ink rather than faded. iOS and Android keep their platform menus (the iOS pull-down menu, the Material 3 menu) in the theme's colours.
In glass mode the menu is a dense-layer glass card under its trigger (or above it when it fits there); the trigger keeps its place, its press and its accessible name and state, and a selection commits and closes the menu the moment a row is pressed. AvatarMenu and the collapsed Navbar menu are built on Dropdown. Solid mode paints the skin's own menu.
compact tightens the web rows to 30 pixels and lets the menu scroll inside maxHeight; with steadyPress a press does not tint the row. Selected rows take the action ink. Items can carry a stored value, detail, description, selected state, and a sectionBefore heading. keepOpen leaves refresh-style commands open. A note adds a muted footer. menuWidth and maxHeight bound the scrolling menu. Pass anchorRef to use an existing trigger without adding another control or layout wrapper; accessibilityLabel names the menu independently of its heading. Checked choices use browser menu-radio semantics and the native radio trait.
Tokens
Read from the playground render. Values follow the scheme and the ion hue.
--bad
--bls
--bw
--fd
--fm
--ft
--hl
--ln
--ln2
--sf
--sf3
--sf4
--sh-md
--tx
--tx3