2014-07-13 09:59:31 +02:00
---
layout: page
title: Button group
---
2014-07-13 10:23:34 +02:00
Group a series of buttons together on a single line with the button group. Add on optional JavaScript radio and checkbox style behavior with [our buttons plugin ](../javascript/#buttons ).
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
< div class = "bs-callout bs-callout-warning" >
< h4 > Tooltips & popovers in button groups require special setting< / h4 >
< p > When using tooltips or popovers on elements within a < code > .btn-group< / code > , you'll have to specify the option < code > container: 'body'< / code > to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).< / p >
< / div >
2014-03-17 03:03:53 +01:00
2014-12-01 05:17:45 +01:00
< div class = "bs-callout bs-callout-warning" >
< h4 > Ensure correct < code > role< / code > and provide a label< / h4 >
< p > In order for assistive technologies – such as screen readers – to convey that a series of buttons is grouped, an appropriate < code > role< / code > attribute needs to be provided. For button groups, this would be < code > role="group"< / code > , while toolbars should have a < code > role="toolbar"< / code > .< / p >
< p > One exception are groups which only contain a single control (for instance the < a href = "#btn-groups-justified" > justified button groups< / a > with < code > < button> < / code > elements) or a dropdown.< / p >
< p > 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 < code > role< / code > attribute. In the examples provided here, we use < code > aria-label< / code > , but alternatives such as < code > aria-labelledby< / code > can also be used.< / p >
< / div >
2014-07-13 10:23:34 +02:00
### Basic example
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
Wrap a series of buttons with `.btn` in `.btn-group` .
{% example html %}
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" aria-label = "Basic example" >
2014-07-09 02:14:14 +02:00
< button type = "button" class = "btn btn-secondary" > Left< / button >
< button type = "button" class = "btn btn-secondary" > Middle< / button >
< button type = "button" class = "btn btn-secondary" > Right< / button >
2014-03-17 03:03:53 +01:00
< / div >
2014-07-13 10:23:34 +02:00
{% endexample %}
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
### Button toolbar
Combine sets of button groups into button toolbars for more complex components.
{% example html %}
2014-12-01 05:17:45 +01:00
< div class = "btn-toolbar" role = "toolbar" aria-label = "Toolbar with button groups" >
< div class = "btn-group" role = "group" aria-label = "First group" >
2014-07-13 10:23:34 +02:00
< button type = "button" class = "btn btn-secondary" > 1< / button >
< button type = "button" class = "btn btn-secondary" > 2< / button >
< button type = "button" class = "btn btn-secondary" > 3< / button >
< button type = "button" class = "btn btn-secondary" > 4< / button >
< / div >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" aria-label = "Second group" >
2014-07-13 10:23:34 +02:00
< button type = "button" class = "btn btn-secondary" > 5< / button >
< button type = "button" class = "btn btn-secondary" > 6< / button >
< button type = "button" class = "btn btn-secondary" > 7< / button >
< / div >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" aria-label = "Third group" >
2014-07-13 10:23:34 +02:00
< button type = "button" class = "btn btn-secondary" > 8< / button >
< / div >
2014-03-17 03:03:53 +01:00
< / div >
2014-07-13 10:23:34 +02:00
{% endexample %}
### Sizing
Instead of applying button sizing classes to every button in a group, just add `.btn-group-*` to the `.btn-group` .
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
< div class = "bs-example" >
2014-12-01 05:17:45 +01:00
< div class = "btn-group btn-group-lg" role = "group" aria-label = "Large button group" >
< button type = "button" class = "btn btn-secondary" > Left< / button >
< button type = "button" class = "btn btn-secondary" > Middle< / button >
< button type = "button" class = "btn btn-secondary" > Right< / button >
2014-07-13 10:23:34 +02:00
< / div >
2014-12-01 05:17:45 +01:00
< br >
< div class = "btn-group" role = "group" aria-label = "Default button group" >
< button type = "button" class = "btn btn-secondary" > Left< / button >
< button type = "button" class = "btn btn-secondary" > Middle< / button >
< button type = "button" class = "btn btn-secondary" > Right< / button >
2014-07-13 10:23:34 +02:00
< / div >
2014-12-01 05:17:45 +01:00
< br >
< div class = "btn-group btn-group-sm" role = "group" aria-label = "Small button group" >
< button type = "button" class = "btn btn-secondary" > Left< / button >
< button type = "button" class = "btn btn-secondary" > Middle< / button >
< button type = "button" class = "btn btn-secondary" > Right< / button >
2014-07-13 10:23:34 +02:00
< / div >
2014-12-01 05:17:45 +01:00
< br >
< div class = "btn-group btn-group-xs" role = "group" aria-label = "Extra small button group" >
< button type = "button" class = "btn btn-secondary" > Left< / button >
< button type = "button" class = "btn btn-secondary" > Middle< / button >
< button type = "button" class = "btn btn-secondary" > Right< / button >
2014-03-17 03:03:53 +01:00
< / div >
2014-07-13 10:23:34 +02:00
< / div >
2014-03-17 03:03:53 +01:00
{% highlight html %}
2014-12-01 05:17:45 +01:00
< div class = "btn-group btn-group-lg" role = "group" aria-label = "..." > ...< / div >
< div class = "btn-group" role = "group" aria-label = "..." > ...< / div >
< div class = "btn-group btn-group-sm" role = "group" aria-label = "..." > ...< / div >
< div class = "btn-group btn-group-xs" role = "group" aria-label = "..." > ...< / div >
2014-03-17 03:03:53 +01:00
{% endhighlight %}
2014-07-13 10:23:34 +02:00
### Nesting
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
Place a `.btn-group` within another `.btn-group` when you want dropdown menus mixed with a series of buttons.
{% example html %}
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" aria-label = "Button group with nested dropdown" >
2014-07-09 02:14:14 +02:00
< button type = "button" class = "btn btn-secondary" > 1< / button >
< button type = "button" class = "btn btn-secondary" > 2< / button >
2014-03-17 03:03:53 +01:00
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
< button id = "btnGroupDrop1" type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-expanded = "false" >
2014-03-17 03:03:53 +01:00
Dropdown
< / button >
2014-07-13 10:23:34 +02:00
< ul class = "dropdown-menu" role = "menu" aria-labelledby = "btnGroupDrop1" >
2014-03-17 03:03:53 +01:00
< li > < a href = "#" > Dropdown link< / a > < / li >
< li > < a href = "#" > Dropdown link< / a > < / li >
< / ul >
< / div >
< / div >
2014-07-13 10:23:34 +02:00
{% endexample %}
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
### Vertical variation
Make a set of buttons appear vertically stacked rather than horizontally. **Split button dropdowns are not supported here.**
< div class = "bs-example" >
2014-12-01 05:17:45 +01:00
< div class = "btn-group-vertical" role = "group" aria-label = "Vertical button group" >
2014-07-13 10:23:34 +02:00
< button type = "button" class = "btn btn-secondary" > Button< / button >
< button type = "button" class = "btn btn-secondary" > Button< / button >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
< button id = "btnGroupVerticalDrop1" type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-expanded = "false" >
2014-07-13 10:23:34 +02:00
Dropdown
< / button >
< ul class = "dropdown-menu" role = "menu" aria-labelledby = "btnGroupVerticalDrop1" >
< li > < a href = "#" > Dropdown link< / a > < / li >
< li > < a href = "#" > Dropdown link< / a > < / li >
< / ul >
< / div >
< button type = "button" class = "btn btn-secondary" > Button< / button >
< button type = "button" class = "btn btn-secondary" > Button< / button >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
< button id = "btnGroupVerticalDrop2" type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-expanded = "false" >
2014-07-13 10:23:34 +02:00
Dropdown
< / button >
< ul class = "dropdown-menu" role = "menu" aria-labelledby = "btnGroupVerticalDrop2" >
< li > < a href = "#" > Dropdown link< / a > < / li >
< li > < a href = "#" > Dropdown link< / a > < / li >
< / ul >
< / div >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
< button id = "btnGroupVerticalDrop3" type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-expanded = "false" >
2014-07-13 10:23:34 +02:00
Dropdown
< / button >
< ul class = "dropdown-menu" role = "menu" aria-labelledby = "btnGroupVerticalDrop3" >
< li > < a href = "#" > Dropdown link< / a > < / li >
< li > < a href = "#" > Dropdown link< / a > < / li >
< / ul >
< / div >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
< button id = "btnGroupVerticalDrop4" type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-expanded = "false" >
2014-07-13 10:23:34 +02:00
Dropdown
< / button >
< ul class = "dropdown-menu" role = "menu" aria-labelledby = "btnGroupVerticalDrop4" >
< li > < a href = "#" > Dropdown link< / a > < / li >
< li > < a href = "#" > Dropdown link< / a > < / li >
< / ul >
2014-03-17 03:03:53 +01:00
< / div >
< / div >
2014-07-13 10:23:34 +02:00
< / div >
2014-03-17 03:03:53 +01:00
{% highlight html %}
< div class = "btn-group-vertical" >
...
< / div >
{% endhighlight %}
2014-07-13 10:23:34 +02:00
### Justified button groups
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
Make a group of buttons stretch at equal sizes to span the entire width of its parent. Also works with button dropdowns within the button group.
2014-03-17 03:03:53 +01:00
2014-07-13 10:23:34 +02:00
< div class = "bs-callout bs-callout-warning" >
< h4 > Handling borders< / h4 >
< p > Due to the specific HTML and CSS used to justify buttons (namely < code > display: table-cell< / code > ), the borders between them are doubled. In regular button groups, < code > margin-left: -1px< / code > is used to stack the borders instead of removing them. However, < code > margin< / code > doesn't work with < code > display: table-cell< / code > . As a result, depending on your customizations to Bootstrap, you may wish to remove or re-color the borders.< / p >
< / div >
#### With `<a>` elements
Just wrap a series of `.btn` s in `.btn-group.btn-group-justified` .
2014-12-01 05:17:45 +01:00
{% example html %}
2014-07-13 10:23:34 +02:00
< div class = "bs-example" >
2014-12-01 05:17:45 +01:00
< div class = "btn-group btn-group-justified" role = "group" aria-label = "Justified button group" >
2014-11-10 07:02:53 +01:00
< a class = "btn btn-secondary" href = "#" role = "button" > Left< / a >
< a class = "btn btn-secondary" href = "#" role = "button" > Middle< / a >
< a class = "btn btn-secondary" href = "#" role = "button" > Right< / a >
2014-07-13 10:23:34 +02:00
< / div >
< br >
2014-12-01 05:17:45 +01:00
< div class = "btn-group btn-group-justified" role = "group" aria-label = "Justified button group with nested dropdown" >
2014-11-10 07:02:53 +01:00
< a class = "btn btn-secondary" href = "#" role = "button" > Left< / a >
< a class = "btn btn-secondary" href = "#" role = "button" > Middle< / a >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
< a class = "btn btn-secondary dropdown-toggle" href = "#" data-toggle = "dropdown" role = "button" aria-expanded = "false" >
2014-07-13 10:23:34 +02:00
Dropdown
< / a >
< ul class = "dropdown-menu" role = "menu" >
< li > < a href = "#" > Action< / a > < / li >
< li > < a href = "#" > Another action< / a > < / li >
< li > < a href = "#" > Something else here< / a > < / li >
< li class = "divider" > < / li >
< li > < a href = "#" > Separated link< / a > < / li >
< / ul >
2014-03-17 03:03:53 +01:00
< / div >
< / div >
2014-07-13 10:23:34 +02:00
< / div >
2014-12-01 05:17:45 +01:00
{% endexample %}
2014-07-13 10:23:34 +02:00
2014-12-01 05:17:45 +01:00
< div class = "bs-callout bs-callout-warning" >
< h4 > Links acting as buttons< / h4 >
< p > If the < code > < a> < / code > elements are used to act as buttons – triggering in-page functionality, rather than navigating to another document or section within the current page – they should also be given an appropriate < code > role="button"< / code > .< / p >
2014-03-17 03:03:53 +01:00
< / div >
2014-07-13 10:23:34 +02:00
#### With `<button>` elements
2014-12-01 05:17:45 +01:00
To use justified button groups with `<button>` elements, **you must wrap each button in a button group** . Most browsers don't properly apply our CSS for justification to `<button>` elements, but since we support button dropdowns, we can work around that.
2014-07-13 10:23:34 +02:00
2014-12-01 05:17:45 +01:00
{% example html %}
2014-07-13 10:23:34 +02:00
< div class = "bs-example" >
2014-12-01 05:17:45 +01:00
< div class = "btn-group btn-group-justified" role = "group" aria-label = "Justified button group" >
< div class = "btn-group" role = "group" >
2014-07-13 10:23:34 +02:00
< button type = "button" class = "btn btn-secondary" > Left< / button >
< / div >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
2014-07-13 10:23:34 +02:00
< button type = "button" class = "btn btn-secondary" > Middle< / button >
< / div >
2014-12-01 05:17:45 +01:00
< div class = "btn-group" role = "group" >
2014-07-13 10:23:34 +02:00
< button type = "button" class = "btn btn-secondary" > Right< / button >
2014-03-17 03:03:53 +01:00
< / div >
< / div >
2014-07-13 10:23:34 +02:00
< / div >
2014-12-01 05:17:45 +01:00
{% endexample %}