figma guide

Figma dropdown menus and context menus: patterns, states, and handoff

Design dropdown, select, and context menus in Figma with menu item variants, keyboard focus specs, positioning rules, and Dev Mode notes engineers can implement.

Published
Updated
Jun 06, 2026
Read time
6 min
Level
Intermediate

Quick answer

Menus in Figma are a published Menu / Item component set plus a panel frame (vertical auto layout) that stacks items with consistent height, padding, and dividers. Variants cover state=default | hover | focus | disabled | destructive and optional leading icon and trailing shortcut slots. Document placement (below trigger, flip on overflow), max height + scroll, and keyboard behavior (arrow keys, typeahead) in Dev Mode—not only a static open screenshot. Pair with forms and selects, navigation overflow, and modals for destructive confirms. More on Figma guides.


Who this is for

  • Product designers shipping action menus, profile dropdowns, and filter pickers.
  • Design system contributors defining one menu primitive for web and desktop apps.
  • Engineers implementing Radix, MUI, or native menus who need focus and placement rules.

PatternTriggerBest forNot for
Dropdown / action menuButton, icon buttonRow actions, “More” overflow50+ options without search
Select / listboxSelect fieldSingle choice from 5–20 itemsFree-text entry (use combobox)
Context menuRight-click targetCanvas, table row, file listPrimary navigation
ComboboxText input + chevronSearchable long listsBinary toggles
SubmenuItem with chevronNested settingsMore than 2 levels deep

Verdict: if users pick one value for a form field, use select anatomy from the forms guide. If they run an action, use action menu anatomy below.


LayerRoleSpec tip
ContainerHit areaMin height 32–40px (40px for touch-heavy)
Leading iconVisual cue16–20px, optional instance swap
LabelAction nameLeft aligned, truncate with ellipsis
Trailing shortcutKeyboard hint⌘K, Ctrl+C—use muted text style
CheckmarkSelected in multi/single selectRight aligned
DividerGroup separationFull width stroke border/subtle

Component set: Menu / Item with variants type=default | destructive | checkbox | submenu and state=default | hover | focus | disabled.


Panel container

Menu / Panel
├── Auto layout: vertical, gap 0
├── Padding: 4–8px vertical
├── Min width: 180–220px (match trigger or hug content)
├── Max height: 320–400px (document scroll)
├── Corner radius: radius/md
├── Fill: surface/overlay
├── Shadow: elevation/popover
└── Children: Menu / Item instances + Divider components

Use elevation tokens for popover shadow; dark mode needs a brighter border if shadow is subtle.


Trigger + open state frames

Design three frames minimum for handoff:

FrameShows
ClosedTrigger default
OpenPanel positioned below trigger
Open (flipped)Panel above trigger when near viewport bottom

Add a connector note or description: placement: bottom-start; flip: true; offset: 4px.

For icon triggers (kebab ), use a 44×44px hit area per accessibility plugins guidance.


States and interaction

StateVisualPrototype
DefaultTransparent or subtle fill
Hoversurface/hover fillOn click → action or submenu
FocusVisible focus ringDocument for keyboard users
DisabledReduced opacity, no pointerGray out label, not just icon
DestructiveSemantic danger textConfirm in modal if irreversible

Prototype open/close with overlay click or After delay close; link interactive components for item hover inside the open panel.

Do not rely on prototype alone for focus trap behavior—write it in the description.


Grouping and hierarchy

TechniqueWhen
Divider between groups5+ items with logical sections
Section label (non-interactive)Settings areas—use text/label style, no hover
Checkbox itemsMulti-select filters
Submenu chevron3–8 child items

Keep primary actions at the top; destructive actions at the bottom separated by a divider.


Select vs action menu (comparison)

CriterionSelect / listboxAction menu
PurposeChoose a valueRun a command
Closed stateShows current valueShows trigger label/icon only
Selected itemCheckmark on active valueN/A (unless toggle item)
Form integrationPart of form fieldStandalone
Empty state“No options” rowHide menu or disable trigger

Context menus

Right-click menus share the same Menu / Item component but attach to a target region (canvas, card, table row).

SpecValue
Triggercontextmenu on target
PositionCursor coordinates, clamp to viewport
Target highlightOptional subtle border on source

Cross-link table row actions when row kebab and context menu share items—reuse instances, do not duplicate labels.


Long lists and combobox

ProblemDesign solution
20+ optionsMax height + scroll region inside panel
SearchCombobox: input on trigger + filtered list
Recent itemsTop group “Recent” with divider
Create newLast row + Add… styled as default, not destructive

Document filter behavior (prefix match vs contains) in the handoff page.


Z-index and stacking

LayerStacking note
Menu panelAbove page content, below modal
Nested submenuOffset 4px, higher z-index than parent panel
ToastUsually above menus—note if your stack differs

Handoff checklist

DeliverableWhere
Placement + flipOpen frame description
Item height tokenMenu item component
KeyboardArrow, Enter, Escape, typeahead
Destructive flowModal spec if confirm required
Empty / loadingMenu / Panel variants

Use Dev Mode checklist before sign-off.


Common mistakes

MistakeConsequenceFix
Different item heights per menuBroken auto layout in codeOne Menu / Item in team library
Open menu only, no closedEngineers guess trigger sizeShip closed + open frames
Destructive without confirmData lossLink modal pattern
12px tall itemsFails touch and a11yMin 32px, prefer 40px on mobile
Color-only disabled stateWCAG issuesOpacity + no pointer + aria spec

FAQ

Menus are for actions or choices; popovers often host forms or rich content. If the panel has multiple inputs, it is not a menu—design a popover frame with form fields.

Rough rule: more than 15 options without grouping → add search or combobox. Fewer with strong groups can scroll.

Mobile action menus?

Use bottom sheet pattern for primary mobile overflow—not a tiny desktop dropdown. Document breakpoint switch in responsive guide.

Figma prototypes handle submenus poorly; spec with static open frames per submenu level for engineering.


Bottom line

Menus succeed when items are standardized, placement is documented, and destructive actions have a confirm path. Publish Menu / Item once, stack panels with auto layout, and pair open/closed frames with keyboard notes in Dev Mode. Next: cards, navigation, and the tutorials hub.

Share on X

§ Keep reading

Related guides.