button-group.md 7.3 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1
2
3
4
5
---
layout: page
title: Button group
---

Mark Otto's avatar
Mark Otto committed
6
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).
Mark Otto's avatar
Mark Otto committed
7

Mark Otto's avatar
Mark Otto committed
8
9
10
11
12
## Contents

* Will be replaced with the ToC, excluding the "Contents" header
{:toc}

13
14
{% callout warning %}
#### Tooltips & popovers in button groups require special setting
Mark Otto's avatar
Mark Otto committed
15

16
17
18
19
20
21
22
23
24
25
When using tooltips or popovers on elements within a `.btn-group`, 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).
{% endcallout %}

{% callout warning %}
#### 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. In the examples provided here, we use `aria-label`, but alternatives such as `aria-labelledby` can also be used.
{% endcallout %}
Mark Otto's avatar
Mark Otto committed
26

Mark Otto's avatar
Mark Otto committed
27
### Basic example
Mark Otto's avatar
Mark Otto committed
28

Mark Otto's avatar
Mark Otto committed
29
30
31
Wrap a series of buttons with `.btn` in `.btn-group`.

{% example html %}
Mark Otto's avatar
Mark Otto committed
32
<div class="btn-group" role="group" aria-label="Basic example">
Mark Otto's avatar
Mark Otto committed
33
34
35
  <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>
Mark Otto's avatar
Mark Otto committed
36
</div>
Mark Otto's avatar
Mark Otto committed
37
{% endexample %}
Mark Otto's avatar
Mark Otto committed
38

Mark Otto's avatar
Mark Otto committed
39
40
41
42
43
### Button toolbar

Combine sets of button groups into button toolbars for more complex components.

{% example html %}
Mark Otto's avatar
Mark Otto committed
44
45
<div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups">
  <div class="btn-group" role="group" aria-label="First group">
Mark Otto's avatar
Mark Otto committed
46
47
48
49
50
    <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>
Mark Otto's avatar
Mark Otto committed
51
  <div class="btn-group" role="group" aria-label="Second group">
Mark Otto's avatar
Mark Otto committed
52
53
54
55
    <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>
Mark Otto's avatar
Mark Otto committed
56
  <div class="btn-group" role="group" aria-label="Third group">
Mark Otto's avatar
Mark Otto committed
57
58
    <button type="button" class="btn btn-secondary">8</button>
  </div>
Mark Otto's avatar
Mark Otto committed
59
</div>
Mark Otto's avatar
Mark Otto committed
60
61
62
63
{% endexample %}

### Sizing

Mark Otto's avatar
Mark Otto committed
64
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.
Mark Otto's avatar
Mark Otto committed
65

66
<div class="bd-example">
Mark Otto's avatar
Mark Otto committed
67
68
69
70
  <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>
Mark Otto's avatar
Mark Otto committed
71
  </div>
Mark Otto's avatar
Mark Otto committed
72
73
74
75
76
  <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>
Mark Otto's avatar
Mark Otto committed
77
  </div>
Mark Otto's avatar
Mark Otto committed
78
79
80
81
82
  <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>
Mark Otto's avatar
Mark Otto committed
83
  </div>
Mark Otto's avatar
Mark Otto committed
84
85
86
87
88
  <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>
Mark Otto's avatar
Mark Otto committed
89
  </div>
Mark Otto's avatar
Mark Otto committed
90
91
</div>

Mark Otto's avatar
Mark Otto committed
92
{% highlight html %}
Mark Otto's avatar
Mark Otto committed
93
94
95
96
<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>
Mark Otto's avatar
Mark Otto committed
97
98
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
99
### Nesting
Mark Otto's avatar
Mark Otto committed
100

Mark Otto's avatar
Mark Otto committed
101
102
103
Place a `.btn-group` within another `.btn-group` when you want dropdown menus mixed with a series of buttons.

{% example html %}
Mark Otto's avatar
Mark Otto committed
104
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
Mark Otto's avatar
Mark Otto committed
105
106
  <button type="button" class="btn btn-secondary">1</button>
  <button type="button" class="btn btn-secondary">2</button>
Mark Otto's avatar
Mark Otto committed
107

Mark Otto's avatar
Mark Otto committed
108
109
  <div class="btn-group" role="group">
    <button id="btnGroupDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Mark Otto's avatar
Mark Otto committed
110
111
      Dropdown
    </button>
Mark Otto's avatar
Mark Otto committed
112
    <ul class="dropdown-menu" role="menu" aria-labelledby="btnGroupDrop1">
Mark Otto's avatar
Mark Otto committed
113
114
115
116
117
      <li><a href="#">Dropdown link</a></li>
      <li><a href="#">Dropdown link</a></li>
    </ul>
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
118
{% endexample %}
Mark Otto's avatar
Mark Otto committed
119

Mark Otto's avatar
Mark Otto committed
120
121
122
123
### Vertical variation

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

124
<div class="bd-example">
Mark Otto's avatar
Mark Otto committed
125
  <div class="btn-group-vertical" role="group" aria-label="Vertical button group">
Mark Otto's avatar
Mark Otto committed
126
127
    <button type="button" class="btn btn-secondary">Button</button>
    <button type="button" class="btn btn-secondary">Button</button>
Mark Otto's avatar
Mark Otto committed
128
129
    <div class="btn-group" role="group">
      <button id="btnGroupVerticalDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Mark Otto's avatar
Mark Otto committed
130
131
132
133
134
135
136
137
138
        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>
Mark Otto's avatar
Mark Otto committed
139
140
    <div class="btn-group" role="group">
      <button id="btnGroupVerticalDrop2" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Mark Otto's avatar
Mark Otto committed
141
142
143
144
145
146
147
        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>
Mark Otto's avatar
Mark Otto committed
148
149
    <div class="btn-group" role="group">
      <button id="btnGroupVerticalDrop3" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Mark Otto's avatar
Mark Otto committed
150
151
152
153
154
155
156
        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>
Mark Otto's avatar
Mark Otto committed
157
158
    <div class="btn-group" role="group">
      <button id="btnGroupVerticalDrop4" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Mark Otto's avatar
Mark Otto committed
159
160
161
162
163
164
        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>
Mark Otto's avatar
Mark Otto committed
165
166
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
167
168
</div>

Mark Otto's avatar
Mark Otto committed
169
170
171
172
173
{% highlight html %}
<div class="btn-group-vertical">
  ...
</div>
{% endhighlight %}