button-group.md 7.21 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

8
9
{% callout warning %}
#### Tooltips & popovers in button groups require special setting
Mark Otto's avatar
Mark Otto committed
10

11
12
13
14
15
16
17
18
19
20
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
21

Mark Otto's avatar
Mark Otto committed
22
### Basic example
Mark Otto's avatar
Mark Otto committed
23

Mark Otto's avatar
Mark Otto committed
24
25
26
Wrap a series of buttons with `.btn` in `.btn-group`.

{% example html %}
Mark Otto's avatar
Mark Otto committed
27
<div class="btn-group" role="group" aria-label="Basic example">
Mark Otto's avatar
Mark Otto committed
28
29
30
  <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
31
</div>
Mark Otto's avatar
Mark Otto committed
32
{% endexample %}
Mark Otto's avatar
Mark Otto committed
33

Mark Otto's avatar
Mark Otto committed
34
35
36
37
38
### Button toolbar

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

{% example html %}
Mark Otto's avatar
Mark Otto committed
39
40
<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
41
42
43
44
45
    <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
46
  <div class="btn-group" role="group" aria-label="Second group">
Mark Otto's avatar
Mark Otto committed
47
48
49
50
    <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
51
  <div class="btn-group" role="group" aria-label="Third group">
Mark Otto's avatar
Mark Otto committed
52
53
    <button type="button" class="btn btn-secondary">8</button>
  </div>
Mark Otto's avatar
Mark Otto committed
54
</div>
Mark Otto's avatar
Mark Otto committed
55
56
57
58
{% endexample %}

### Sizing

Mark Otto's avatar
Mark Otto committed
59
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
60

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

Mark Otto's avatar
Mark Otto committed
87
{% highlight html %}
Mark Otto's avatar
Mark Otto committed
88
89
90
91
<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
92
93
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
94
### Nesting
Mark Otto's avatar
Mark Otto committed
95

Mark Otto's avatar
Mark Otto committed
96
97
98
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
99
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
Mark Otto's avatar
Mark Otto committed
100
101
  <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
102

Mark Otto's avatar
Mark Otto committed
103
104
  <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
105
106
      Dropdown
    </button>
Mark Otto's avatar
Mark Otto committed
107
    <ul class="dropdown-menu" role="menu" aria-labelledby="btnGroupDrop1">
Mark Otto's avatar
Mark Otto committed
108
109
110
111
112
      <li><a href="#">Dropdown link</a></li>
      <li><a href="#">Dropdown link</a></li>
    </ul>
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
113
{% endexample %}
Mark Otto's avatar
Mark Otto committed
114

Mark Otto's avatar
Mark Otto committed
115
116
117
118
### Vertical variation

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

119
<div class="bd-example">
Mark Otto's avatar
Mark Otto committed
120
  <div class="btn-group-vertical" role="group" aria-label="Vertical button group">
Mark Otto's avatar
Mark Otto committed
121
122
    <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
123
124
    <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
125
126
127
128
129
130
131
132
133
        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
134
135
    <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
136
137
138
139
140
141
142
        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
143
144
    <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
145
146
147
148
149
150
151
        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
152
153
    <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
154
155
156
157
158
159
        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
160
161
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
162
163
</div>

Mark Otto's avatar
Mark Otto committed
164
165
166
167
168
{% highlight html %}
<div class="btn-group-vertical">
  ...
</div>
{% endhighlight %}