Button Group
A container that groups related buttons together with consistent styling.
Installation
pnpm dlx shadcn-vue@latest add button-group
Usage
<script setup lang="ts"> import { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, } from '@/components/ui/button-group' </script> <template> <ButtonGroup> <Button>Button 1</Button> <Button>Button 2</Button> </ButtonGroup> </template>
Accessibility
- The
ButtonGroup
component has therole
attribute set togroup
. - Use
Tab
to navigate between the buttons in the group. - Use
aria-label
oraria-labelledby
to label the button group.
<template> <ButtonGroup aria-label="Button group"> <Button>Button 1</Button> <Button>Button 2</Button> </ButtonGroup> </template>
ButtonGroup vs ToggleGroup
- Use the
ButtonGroup
component when you want to group buttons that perform an action. - Use the
ToggleGroup
component when you want to group buttons that toggle a state.
Examples
Orientation
Set the orientation
prop to change the button group layout.
Size
Control the size of buttons using the size
prop on individual buttons.
Nested
<ButtonGroup>
components to create button groups with spacing.
Separator
The ButtonGroupSeparator
component visually divides buttons within a group.
Buttons with variant outline
do not need a separator since they have a border. For other variants, a separator is recommended to improve the visual hierarchy.
Split
Create a split button group by adding two buttons separated by a ButtonGroupSeparator
.
Input
Wrap an Input
component with buttons.
Input Group
Wrap an InputGroup
component to create complex input layouts.
Dropdown Menu
Create a split button group with a DropdownMenu
component.
Select
Pair with a Select
component.
Popover
Use with a Popover
component.
API Reference
ButtonGroup
The ButtonGroup
component is a container that groups related buttons together with consistent styling.
Prop | Type | Default |
---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" |
<template> <ButtonGroup> <Button>Button 1</Button> <Button>Button 2</Button> </ButtonGroup> </template>
Nest multiple button groups to create complex layouts with spacing. See the nested example for more details.
<template> <ButtonGroup> <ButtonGroup /> <ButtonGroup /> </ButtonGroup> </template>
ButtonGroupSeparator
The ButtonGroupSeparator
component visually divides buttons within a group.
Prop | Type | Default |
---|---|---|
orientation | "horizontal" | "vertical" | vertical |
<template> <ButtonGroup> <Button>Button 1</Button> <ButtonGroupSeparator /> <Button>Button 2</Button> </ButtonGroup> </template>
ButtonGroupText
Use this component to display text within a button group.
Prop | Type | Default |
---|---|---|
as-child | boolean | false |
<template> <ButtonGroup> <ButtonGroupText>Text</ButtonGroupText> <Button>Button</Button> </ButtonGroup> </template>
Use the as-child
prop to render a custom component as the text, for example a label.
<script setup lang="ts"> import { ButtonGroupText } from '@/components/ui/button-group' import { Label } from '@/components/ui/label' </script> <template> <ButtonGroup> <ButtonGroupText as-child> <Label html-for="name">Text</Label> </ButtonGroupText> <Input id="name" placeholder="Type something here..." /> </ButtonGroup> </template>