Button Group

Group a series of buttons together on a single line with the button group.

Basic Example

Wrap a series of buttons with .btn in .btn-group.

<div class="btn-group" role="group" aria-label="Basic example">
<button type="button" class="btn">Left</button>
<button type="button" class="btn">Middle</button>
<button type="button" class="btn">Right</button>
</div>

A button group can also be used with links, as an alternative to the .nav navigation components.

<div class="btn-group">
<a href="#" class="btn btn-outline-info active" aria-current="page">Active link</a>
<a href="#" class="btn btn-outline-info">Link</a>
<a href="#" class="btn btn-outline-info">Link</a>
</div>

Mixed Styles

<div class="btn-group" role="group" aria-label="Basic example">
<button type="button" class="btn btn-warning">Left</button>
<button type="button" class="btn btn-danger">Middle</button>
<button type="button" class="btn btn-success">Right</button>
</div>

Outline Styles

<div class="btn-group" role="group" aria-label="Basic example">
<button type="button" class="btn btn-outline-info">Left</button>
<button type="button" class="btn btn-outline-info">Middle</button>
<button type="button" class="btn btn-outline-info">Right</button>
</div>

Checkbox and Radio Button Groups

Button groups can also be a great way to associate checkbox and radio input button controls together.

<div class="btn-group">
<div class="btn-check">
<input id="radio2-0" type="radio" name="radio2" class="btn-check-input" checked>
<label for="radio2-0" class="btn btn-outline-info">Radio 1</label>
</div>
<div class="btn-check">
<input id="radio2-1" type="radio" name="radio2" class="btn-check-input">
<label for="radio2-1" class="btn btn-outline-info">Radio 2</label>
</div>
<div class="btn-check">
<input id="radio2-2" type="radio" name="radio2" class="btn-check-input" disabled>
<label for="radio2-2" class="btn btn-outline-info">Radio 3</label>
</div>
</div>

Button Toolbar

Combine sets of button groups into button toolbars for more complex components. Use utility classes as needed to space out groups, buttons, and more.

<div class="btn-toolbar mb-1" role="toolbar" aria-label="Toolbar with button groups">
<div class="btn-group me-0_5" role="group" aria-label="First group">
<button type="button" class="btn">1</button>
<button type="button" class="btn">2</button>
<button type="button" class="btn">3</button>
<button type="button" class="btn">4</button>
</div>
<div class="btn-group me-0_5" role="group" aria-label="Second group">
<button type="button" class="btn btn-primary">5</button>
<button type="button" class="btn btn-primary">6</button>
<button type="button" class="btn btn-primary">7</button>
</div>
<div class="btn-group" role="group" aria-label="Third group">
<button type="button" class="btn btn-danger">8</button>
</div>
</div>

<div class="btn-toolbar flex-between" role="toolbar" aria-label="Toolbar with button groups">
<div class="btn-group me-0_5" role="group" aria-label="First group">
<button type="button" class="btn">1</button>
<button type="button" class="btn">2</button>
<button type="button" class="btn">3</button>
<button type="button" class="btn">4</button>
</div>
<div class="btn-group me-0_5" role="group" aria-label="Second group">
<button type="button" class="btn btn-primary">5</button>
<button type="button" class="btn btn-primary">6</button>
<button type="button" class="btn btn-primary">7</button>
</div>
<div class="btn-group" role="group" aria-label="Third group">
<button type="button" class="btn btn-danger">8</button>
</div>
</div>

With Input Groups

Mix input groups with button groups in your toolbars. Similar to the example above, you may need some utilities classes to space things out.

<div class="btn-toolbar mb-1" role="toolbar" aria-label="Toolbar with button groups">
<div class="btn-group me-0_5" role="group" aria-label="First group">
<button type="button" class="btn">1</button>
<button type="button" class="btn">2</button>
<button type="button" class="btn">3</button>
<button type="button" class="btn">4</button>
</div>
<div class="input-group">
<span class="input-group-text" id="btnGroupAddon">@</span>
<input type="text" class="form-control" placeholder="Input group example" aria-label="Input group example" aria-describedby="btnGroupAddon">
</div>
</div>

<div class="btn-toolbar flex-between mb-1" role="toolbar" aria-label="Toolbar with button groups">
<div class="btn-group" role="group" aria-label="First group">
<button type="button" class="btn">1</button>
<button type="button" class="btn">2</button>
<button type="button" class="btn">3</button>
<button type="button" class="btn">4</button>
</div>
<div class="input-group">
<span class="input-group-text" id="btnGroupAddon2">@</span>
<input type="text" class="form-control" placeholder="Input group example" aria-label="Input group example" aria-describedby="btnGroupAddon2">
</div>
</div>

Sizing

Instead of applying button sizing classes to every button in a group, just add .btn-group-* to each .btn-group, including each one when nesting multiple groups.





<div class="btn-group btn-group-xlarge" role="group" aria-label="...">...</div>
<div class="btn-group btn-group-large" role="group" aria-label="...">...</div>
<div class="btn-group" role="group" aria-label="...">...</div>
<div class="btn-group btn-group-small" role="group" aria-label="...">...</div>
<div class="btn-group btn-group-xsmall" role="group" aria-label="...">...</div>

Nesting

Place a .btn-group within another .btn-group when you want dropdown menus mixed with a series of buttons. You can add .btn-group-end to the toggle button to keep its border-radius from being reset.

<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
<button type="button" class="btn">1</button>
<button type="button" class="btn">2</button>

<div class="btn-group" role="group">
<button type="button" class="btn btn-group-end" data-cfw="dropdown">
Dropdown
<span class="caret" aria-hidden="true"></span>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Dropdown link</a></li>
<li><a class="dropdown-item" href="#">Dropdown link</a></li>
</ul>
</div>
</div>

Vertical Variation

Make a set of buttons appear vertically stacked rather than horizontally. Split button dropdowns are not supported here.

<div class="btn-group-vertical">
...
</div>

Tooltips and Popovers

Due to their specific implementation (and some other components), a bit of special casing is required for tooltips and popovers within button groups. You'll have to specify the option container: 'body' to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).

<div class="btn-toolbar" role="group" aria-label="Toolbar with tooltip buttons">
<div class="btn-group me-1">
<button type="button" class="btn" data-cfw="tooltip" data-cfw-tooltip-title="I have a long sentence to be crushed inside a tooltip.">Tooltip</button>
</div>
<div class="btn-group">
<button type="button" class="btn" data-cfw="tooltip" data-cfw-tooltip-title="I have a long sentence that is not crushed because this tooltip uses the container option." data-cfw-tooltip-container="body">Tooltip container</button>
</div>
</div>
<div class="btn-toolbar" role="group" aria-label="Toolbar with popover buttons">
<div class="btn-group me-1">
<button type="button" class="btn" data-cfw="popover" data-cfw-popover-title="Popover title" data-cfw-popover-content="I have a long sentence to be crushed inside a popover.">Popover</button>
</div>
<div class="btn-group">
<button type="button" class="btn" data-cfw="popover" data-cfw-popover-title="Popover title" data-cfw-popover-content="I have a long sentence that is not crushed because this popover uses the container option." data-cfw-popover-container="body">Popover container</button>
</div>
</div>

Accessibility

Ensure correct role and provide a label

In order for assistive technologies (such as screen readers) to convey that a series of buttons is grouped, an appropriate role attribute needs to be provided. For button groups, this would be role="group", while toolbars should have a role="toolbar".

In addition, groups and toolbars should be given an explicit label, as most assistive technologies will otherwise not announce them, despite the presence of the correct role attribute. Use aria-label or aria-labelledby to label them.

SASS Reference

Variables

The available Customization options, or Sass variables, that can be customized for the button group component.

Name Type Default Description
$enable-btn-group boolean true Enable the generation of the button group component classes. Smaller segements of the button group component classes can be disabled with the following $enable-* variables.
$enable-btn-group-horizontal boolean true Enable the generation of the horizontal button group classes.
$enable-btn-group-vertical boolean true Enable the generation of the vertical button group classes.
$enable-btn-group-sizing boolean true Enable the generation of the button group sizing classes.
$enable-btn-toolbar boolean true Enable the generation of the button toolbar classes.

Mixins

No mixins available.