Split Button
Material Design 3 split button combining a primary action with a dropdown menu for related actions. Provides quick access to a default action while offering additional options through the menu. Not intended when all actions have equal priority; use separate buttons in those scenarios.
Basic Usage
Combines a primary action button with a dropdown menu trigger so the most common action stays one click away while alternatives remain discoverable.
<ds-split-button> Save <ds-menu-item slot="menu" value="save-as">Save As...</ds-menu-item> <ds-menu-item slot="menu" value="save-all">Save All</ds-menu-item> <ds-menu-item slot="menu" value="save-copy">Save a Copy</ds-menu-item> </ds-split-button>
Variants
Split buttons support all standard button variants
Filled
High emphasis for primary actions
<ds-split-button variant="filled">Send Email</ds-split-button>
Filled Tonal
Medium emphasis with tonal background
<ds-split-button variant="filled-tonal">Export</ds-split-button>
Outlined
Medium emphasis with border
<ds-split-button variant="outlined">Share</ds-split-button>
Elevated
Medium emphasis with shadow
<ds-split-button variant="elevated">Download</ds-split-button>
Text
Low emphasis for less prominent actions
<ds-split-button variant="text">More</ds-split-button>
Menu Position
Control where the menu appears relative to the button
Only one menu can be open at a time in this demo.
<ds-split-button position="bottom-start">Bottom Start</ds-split-button> <ds-split-button position="bottom-end">Bottom End</ds-split-button> <ds-split-button position="top-start">Top Start</ds-split-button> <ds-split-button position="top-end">Top End</ds-split-button>
States
Disabled
Disabled state for both buttons
<ds-split-button disabled>Disabled</ds-split-button>
Interactive Example
Click the primary button or menu items to see events
const splitBtn = document.querySelector('ds-split-button');
splitBtn.addEventListener('ds-split-button:click', (e) => {
console.log('Primary action clicked');
});
splitBtn.addEventListener('ds-split-button:menu-select', (e) => {
console.log('Menu item selected:', e.detail);
});
API
Attributes
| Attribute | Type | Default | Description |
|---|---|---|---|
variant |
string | 'filled' | Button style: 'filled' | 'filled-tonal' | 'outlined' | 'elevated' | 'text' |
disabled |
boolean | false | Disables both buttons |
position |
string | 'bottom-end' | Menu position: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' |
Slots
| Slot | Description |
|---|---|
| (default) | Primary button content |
menu |
Menu items (use ds-menu-item elements) |
Events
| Event | Detail | Description |
|---|---|---|
ds-split-button:click |
{ originalEvent } |
Fired when primary button is clicked |
ds-split-button:menu-select |
{ item, value, label } |
Fired when menu item is selected |
Methods
| Method | Parameters | Description |
|---|---|---|
openMenu() |
none | Opens the dropdown menu |
closeMenu() |
none | Closes the dropdown menu |
CSS Parts
| Part | Description |
|---|---|
primary-button |
The primary action button |
menu-button |
The dropdown trigger button |
menu |
The dropdown menu container |
CSS Custom Properties
| Property | Description |
|---|---|
None |
No component-specific custom properties |
Accessibility
Keyboard Interaction
| Key | Context | Expected Result |
|---|---|---|
Tab |
Split button present | Moves focus between primary and menu trigger buttons |
Enter / Space |
Focus on primary or menu trigger | Activates primary action or opens menu |
Escape |
Menu open | Closes menu and returns focus to trigger |
Semantics
-
Uses
aria-haspopupandaria-expandedon the menu trigger. -
Dropdown surface follows
role="menu"semantics. - Focus is managed between primary and menu actions with clear visual distinction.
Usage Guidelines
- When to use: Use when a default action is most common and a small set of related alternatives is needed, such as Save with Save As.
- When not to use: Avoid when all actions are equally important or unrelated, and avoid for navigation use cases.
- Composition: Keep the primary action clear, limit menu items to 3-7 options, and group related items with dividers when needed.
- Common mistakes: Ambiguous primary labels and oversized menus reduce clarity. Prefer concise outcome-oriented action names.