Overview
Use SplitButton when one action is clearly the default and a small menu exposes variations of that same intent.
Publish actions
Run the default publish action or choose a closely related alternative.
Ready to publish
Anatomy
The control joins a default action and menu trigger while the open menu lists closely related alternatives.
☆ Save as draft
▷ Schedule publish
▤ Save as template
- 1Primary action
Runs the most likely action immediately.
- 2Shared boundary
Communicates that both controls belong to one action family.
- 3Menu trigger
Opens the related alternatives without running the default.
- 4Action menu
Provides a named menu surface.
- 5Alternative item
Runs one closely related action and closes the menu.
When to use
Use when a stable default action accounts for most use while two to five related variations remain useful.
Recommended
- Preserve a strong default
Keep publish, save, create, or export immediately available.
- Group variations
Offer schedule publish, save draft, or export formats.
- Support repeat work
Reduce steps for the action people choose most often.
When not to use
Use separate controls when actions differ in intent, importance, or consequence.
Avoid
- Do not mix unrelated actions
Use Toolbar or DropdownMenu for broader command sets.
- Do not hide destructive action
Separate irreversible actions from a routine default.
- Do not use without a clear default
Use DropdownMenu when every action has equal likelihood.
Variants
Emphasis and size follow the importance of the shared action family.
Filled
High-emphasis primary action.
Outlined
Medium emphasis on neutral surfaces.
Tonal
Lower emphasis within grouped workflows.
Sizes
Small, medium, and large preserve matched controls.
States
Primary and menu controls share availability and progress while the menu tracks its own visibility and focus.
| State | Trigger | Visual response | Interaction |
|---|---|---|---|
| Closed | Alternatives hidden | Joined primary and trigger | Either control available |
| Open | Menu trigger activates | Menu below group | First enabled item focused |
| Focused item | Keyboard navigation | Tonal item surface | Enter selects |
| Loading | Primary work active | Progress and loading text | Both controls disabled |
| Disabled | Action family unavailable | Reduced emphasis | No activation |
Behavior
SplitButton owns menu interaction while applications own action execution, confirmation, authorization, and side effects.
Primary execution
Primary action never opens the alternatives menu.
Menu selection
An enabled alternative executes and closes the menu.
Dismissal
Escape and outside pointer interaction close the menu.
Focus return
Selection or Escape returns focus to the trigger.
Accessibility
SplitButton exposes two native buttons and a named menu with standard roving keyboard navigation.
| Key | Action |
|---|---|
| Tab | Moves between primary action and menu trigger. |
| EnterSpace | Runs the focused control or menu item. |
| ↓ | Opens the menu from its trigger or moves to the next item. |
| ↑ | Moves to the previous menu item. |
| HomeEnd | Moves to the first or last item. |
| Esc | Closes the menu and returns focus. |
- Give the trigger a label describing the action family.
- Keep the primary visible label explicit.
- Use menu semantics only for executable alternatives.
- Disable both controls while the primary action is loading.
- Return focus after selection and dismissal.
- Keep destructive alternatives separated or clearly labeled.
Content guidelines
The primary label and alternatives should share one clear verb or outcome family.
Name the default
Use a verb-first primary label.
Publish
Qualify alternatives
Explain how the related outcome differs.
Schedule publish
Keep labels parallel
Use consistent action-object grammar.
Save as draft, Save as template
Avoid generic trigger text
Use an accessible menu label tied to the action.
More publish actions
Examples
Controlled menu visibility and loading support workflows that coordinate overlays and asynchronous action state.
Controlled action family
Ready to publish
Props / API
SplitButton extends div attributes; each alternative defines identity, content, icon, availability, consequence, and execution.
Props