Skip to main content brightness_auto motion_photos_off palette download more_vert
toc

Split button

A split button pairs a main action with a trailing button that opens a menu of related actions.

Save as copy Save as template
<md-gb-split-button>
  <button slot="leading">Save</button>
  <button slot="trailing" aria-label="More save options" popovertarget="save-menu"></button>
  <md-gb-menu id="save-menu">
    <md-gb-menu-item>Save as copy</md-gb-menu-item>
    <md-gb-menu-item>Save as template</md-gb-menu-item>
  </md-gb-menu>
</md-gb-split-button>

Install with shadcn/ui: npx shadcn@latest add https://material-web.dev/3.0/r/md-split-button.json (setup)

  • One main action plus related ones. The leading button runs the most common action, and the menu holds the alternatives.
  • Same sizes as buttons. Split buttons come in the five button sizes, so they can sit next to buttons and icon buttons of the same size.
  • Trailing menu icon. The trailing button always shows the menu icon. Its color doesn't change when the menu opens; it only turns.

A split button holds a leading button, a trailing button and the menu the trailing button opens.

Send later Schedule send
<md-gb-split-button>
  <button slot="leading">
    <md-gb-icon>send</md-gb-icon>
    Send
  </button>
  <button slot="trailing" aria-label="More send options" popovertarget="anatomy-menu"></button>
  <md-gb-menu id="anatomy-menu">
    <md-gb-menu-item>Send later</md-gb-menu-item>
    <md-gb-menu-item>Schedule send</md-gb-menu-item>
  </md-gb-menu>
</md-gb-split-button>

Split buttons are filled by default. Set color to elevated, tonal or outlined.

Reply all Forward
<md-gb-split-button color="tonal">
  <button slot="leading">Reply</button>
  <button slot="trailing" aria-label="More reply options" popovertarget="reply-menu"></button>
  <md-gb-menu id="reply-menu">
    <md-gb-menu-item>Reply all</md-gb-menu-item>
    <md-gb-menu-item>Forward</md-gb-menu-item>
  </md-gb-menu>
</md-gb-split-button>

Set size to xs, sm (the default), md, lg or xl.

Send later Schedule send
<md-gb-split-button size="lg">
  <button slot="leading">Send</button>
  <button slot="trailing" aria-label="More send options" popovertarget="send-menu"></button>
  <md-gb-menu id="send-menu">
    <md-gb-menu-item>Send later</md-gb-menu-item>
    <md-gb-menu-item>Schedule send</md-gb-menu-item>
  </md-gb-menu>
</md-gb-split-button>

The leading button can have an icon, a label, or both.

Download as PDF Download as text
<md-gb-split-button>
  <button slot="leading">
    <md-gb-icon>download</md-gb-icon>
    Download
  </button>
  <button slot="trailing" aria-label="More download options" popovertarget="download-menu"></button>
  <md-gb-menu id="download-menu">
    <md-gb-menu-item>Download as PDF</md-gb-menu-item>
    <md-gb-menu-item>Download as text</md-gb-menu-item>
  </md-gb-menu>
</md-gb-split-button>
  • Both parts are native <button>s you provide, so give the trailing button an aria-label that says what the menu holds, such as "More save options". Add one to an icon-only leading button too.
  • The two buttons are separate tab stops. The trailing button toggles the menu with popovertarget, and the menu follows the menu keyboard behavior.
Material Design 3Spec checked68% tokens

98 of 155 buildable spec units are tested, 3 are excluded with a written reason and 0 are uncovered (the target is 0). 36 of 53 token declarations match the spec (68%), and 17 have no spec token.

BaselineWidely availableChrome 124Edge 124Firefox 125Safari 17.4

The component’s own CSS and JavaScript rely only on web platform features that are Baseline widely available: it works in Chrome 124, Edge 124, Firefox 125, Safari 17.4 and later.

Newer features it uses where the browser has them (progressive enhancements):

WAI-ARIAaxe and ARIA 1.3 passButton

Roles the component renders: button (opens in a new tab).

Follows the WAI-ARIA Authoring Practices: Button (opens in a new tab).

1 rendered state run through axe-core and the WAI-ARIA 1.3 role and attribute rules in a real browser, with no known gaps.

Lighthouse99 · 100 · 100 · 100
  • Performance
  • Accessibility
  • Best practices
  • SEO

Audits under 90:

  • Eliminate render-blocking resources
  • Minify JavaScript
  • Reduce unused CSS
  • Enable text compression
  • Network dependency tree
  • Render blocking requests

Lighthouse 12.8.2 (desktop, 2026-11-08) on the component alone: its first example on a page of its own, without this site's shell. The modules are the development build (not bundled or minified), so the performance score is indicative.

A Material Design component.

Property Attribute Type Default
color color SplitButtonColor 'filled'
selected selected boolean false
size size SplitButtonSize 'sm'
Slot Description
default Used to render the trailing button's popover menu.
leading Requires a <button> for the main action.
trailing Requires a <button> for the menu action. Use popovertarget to display a menu.
Part Description
::part(leading-btn) The split button's main action.
::part(split-btn) The split button's root element.
::part(trailing-btn) The split button's menu action.
Property Description
--between-space
--icon-size
--inner-corner-size
--leading-space
--outer-corner-size
--trailing-space
Install Material Web 3.0

Your browser did not offer to install the docs as an app. Install them from the browser instead:

Close
Send feedback
Bug Documentation Idea

Opens a new GitHub issue for material-components/material-web in a new tab, with this filled in.

Cancel Open issue