How to build an accessible ButtonGroup in React

Exposes role="group" so assistive tech treats the buttons as one labeled set; optional roving focus lets arrow keys traverse the buttons as a single tab stop, matching toolbar expectations

When to use a ButtonGroup

When not to use it

Keyboard interactions

Role group, verified at WCAG 2.2-AA.

Common mistakes

Avoid: <ButtonGroup><Button>Bold</Button><Button>Italic</Button></ButtonGroup>

Prefer: <ButtonGroup aria-label="Formatting"><Button>Bold</Button><Button>Italic</Button></ButtonGroup>

A group with no accessible name is announced as an unlabeled region; supply aria-label or aria-labelledby

Example

<ButtonGroup aria-label="Text alignment"><Button>Left</Button><Button>Center</Button><Button>Right</Button></ButtonGroup>

See the full ButtonGroup reference →