Dropdown Menu
Native Solid 2 fork. Original documentation and designs © WorkOS; historical posts retain their original context.
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content>
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
<DropdownMenu.Sub>
<DropdownMenu.SubTrigger>More</DropdownMenu.SubTrigger>
<DropdownMenu.SubContent>
<DropdownMenu.Item>Move to project…</DropdownMenu.Item>
<DropdownMenu.Item>Move to folder…</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item>Advanced options…</DropdownMenu.Item>
</DropdownMenu.SubContent>
</DropdownMenu.Sub>
<DropdownMenu.Separator />
<DropdownMenu.Item>Share</DropdownMenu.Item>
<DropdownMenu.Item>Add to favorites</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ ⌫" color="red">
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>API Reference
This component inherits props from the Dropdown Menu primitive.
Root
Contains all the parts of a dropdown menu.
Trigger
Wraps the control that will open the dropdown menu.
Trigger Icon
An optional icon part.
Content
The component that pops out when the dropdown menu is open.
| Prop | Type | Default |
|---|---|---|
size | Responsive<"1" | "2"> | "2" |
variantThe visual variant to apply, see theme overview for more details. | "solid" | "soft" | "solid" |
colorOverrides the accent color inherited from the Theme. See the color guide for more details. | enum | — |
highContrastUses a higher contrast color for the component. | boolean | — |
Label
Used to render a label. It won't be focusable using arrow keys.
Item
The component that contains the dropdown menu items.
| Prop | Type | Default |
|---|---|---|
asChildRender one explicit target with merged props and behavior, not a cloned child. Read our Composition guide for details. | boolean | — |
colorOverrides the accent color inherited from the Theme. See the color guide for more details. | enum | — |
shortcutOptional shortcut command displayed next to the item text. | string | — |
Group
Used to group multiple Item parts.
RadioGroup
Used to group multiple RadioItem parts.
RadioItem
An item that can be controlled and rendered like a radio.
| Prop | Type | Default |
|---|---|---|
colorOverrides the accent color inherited from the Theme. See the color guide for more details. | enum | — |
CheckboxItem
An item that can be controlled and rendered like a checkbox.
| Prop | Type | Default |
|---|---|---|
colorOverrides the accent color inherited from the Theme. See the color guide for more details. | enum | — |
shortcutOptional shortcut command displayed next to the item text. | string | — |
Sub
Contains all the parts of a submenu.
SubTrigger
An item that opens a submenu. Must be rendered inside DropdownMenu.Sub.
SubContent
The component that pops out when a submenu is open. Must be rendered inside DropdownMenu.Sub.
Examples
Size
Use the size prop to control the size.
<Flex gap="3" align="center">
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
"size": "1",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content size="1">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ ⌫" color="red">
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
"size": "2",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content size="2">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ ⌫" color="red">
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
</Flex>Variant
Use the variant prop to customize the visual style of the dropdown menu.
<Flex gap="3" align="center">
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "solid",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content variant="solid">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ ⌫" color="red">
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content variant="soft">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ ⌫" color="red">
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
</Flex>Color
Use the color prop to assign a specific color. You can also pass color to a specific item to override for semantic reasons (ie. destruction action).
<Flex gap="3">
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
"color": "indigo",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content variant="soft" color="indigo">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
"color": "cyan",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content variant="soft" color="cyan">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
"color": "orange",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content variant="soft" color="orange">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"variant": "soft",
"color": "crimson",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content variant="soft" color="crimson">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
</Flex>High-contrast
Use the highContrast prop to increase color contrast with the background.
<Grid columns="2" gap="3" display="inline-grid">
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"color": "gray",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content color="gray">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"color": "gray",
"highContrast": true,
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content color="gray" highContrast>
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"color": "gray",
"variant": "soft",
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content color="gray" variant="soft">
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
<DropdownMenu.Root>
<DropdownMenu.Trigger>{target => target(Button, {
"color": "gray",
"variant": "soft",
"highContrast": true,
children: <>
Options
<DropdownMenu.TriggerIcon />
</>
})}</DropdownMenu.Trigger>
<DropdownMenu.Content color="gray" variant="soft" highContrast>
<DropdownMenu.Item shortcut="⌘ E">Edit</DropdownMenu.Item>
<DropdownMenu.Item shortcut="⌘ D">Duplicate</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item shortcut="⌘ N">Archive</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
</Grid>