button-group.md 8.86 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
<div class="bs-callout bs-callout-warning">
  <h4>Tooltips &amp; 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>
Mark Otto's avatar
Mark Otto committed
12

Mark Otto's avatar
Mark Otto committed
13
### Basic example
Mark Otto's avatar
Mark Otto committed
14

Mark Otto's avatar
Mark Otto committed
15
16
17
Wrap a series of buttons with `.btn` in `.btn-group`.

{% example html %}
Mark Otto's avatar
Mark Otto committed
18
<div class="btn-group">
Mark Otto's avatar
Mark Otto committed
19
20
21
  <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
22
</div>
Mark Otto's avatar
Mark Otto committed
23
{% endexample %}
Mark Otto's avatar
Mark Otto committed
24

Mark Otto's avatar
Mark Otto committed
25
26
27
28
29
### Button toolbar

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

{% example html %}
Mark Otto's avatar
Mark Otto committed
30
<div class="btn-toolbar" role="toolbar">
Mark Otto's avatar
Mark Otto committed
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  <div class="btn-group">
    <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>
  <div class="btn-group">
    <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>
  <div class="btn-group">
    <button type="button" class="btn btn-secondary">8</button>
  </div>
Mark Otto's avatar
Mark Otto committed
45
</div>
Mark Otto's avatar
Mark Otto committed
46
47
48
49
50
{% endexample %}

### Sizing

Instead of applying button sizing classes to every button in a group, just add `.btn-group-*` to the `.btn-group`.
Mark Otto's avatar
Mark Otto committed
51

Mark Otto's avatar
Mark Otto committed
52
53
54
55
56
57
<div class="bs-example">
  <div class="btn-toolbar" role="toolbar">
    <div class="btn-group btn-group-lg">
      <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
58
    </div>
Mark Otto's avatar
Mark Otto committed
59
60
61
62
63
64
  </div>
  <div class="btn-toolbar" role="toolbar">
    <div class="btn-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
65
    </div>
Mark Otto's avatar
Mark Otto committed
66
67
68
69
70
71
  </div>
  <div class="btn-toolbar" role="toolbar">
    <div class="btn-group btn-group-sm">
      <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
78
  </div>
  <div class="btn-toolbar" role="toolbar">
    <div class="btn-group btn-group-xs">
      <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
79
80
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
81
82
</div>

Mark Otto's avatar
Mark Otto committed
83
84
85
86
87
88
89
{% highlight html %}
<div class="btn-group btn-group-lg">...</div>
<div class="btn-group">...</div>
<div class="btn-group btn-group-sm">...</div>
<div class="btn-group btn-group-xs">...</div>
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
90
### Nesting
Mark Otto's avatar
Mark Otto committed
91

Mark Otto's avatar
Mark Otto committed
92
93
94
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
95
<div class="btn-group">
Mark Otto's avatar
Mark Otto committed
96
97
  <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
98
99

  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
100
    <button id="btnGroupDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
101
102
      Dropdown
    </button>
Mark Otto's avatar
Mark Otto committed
103
    <ul class="dropdown-menu" role="menu" aria-labelledby="btnGroupDrop1">
Mark Otto's avatar
Mark Otto committed
104
105
106
107
108
      <li><a href="#">Dropdown link</a></li>
      <li><a href="#">Dropdown link</a></li>
    </ul>
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
109
{% endexample %}
Mark Otto's avatar
Mark Otto committed
110

Mark Otto's avatar
Mark Otto committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
### Vertical variation

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

<div class="bs-example">
  <div class="btn-group-vertical">
    <button type="button" class="btn btn-secondary">Button</button>
    <button type="button" class="btn btn-secondary">Button</button>
    <div class="btn-group">
      <button id="btnGroupVerticalDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
        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>
    <div class="btn-group">
      <button id="btnGroupVerticalDrop2" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
        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>
    <div class="btn-group">
      <button id="btnGroupVerticalDrop3" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
        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>
    <div class="btn-group">
      <button id="btnGroupVerticalDrop4" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
        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
156
157
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
158
159
</div>

Mark Otto's avatar
Mark Otto committed
160
161
162
163
164
165
{% highlight html %}
<div class="btn-group-vertical">
  ...
</div>
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
166
### Justified button groups
Mark Otto's avatar
Mark Otto committed
167

Mark Otto's avatar
Mark Otto committed
168
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.
Mark Otto's avatar
Mark Otto committed
169

Mark Otto's avatar
Mark Otto committed
170
171
172
173
174
175
176
177
178
179
180
<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`.

<div class="bs-example">
  <div class="btn-group btn-group-justified">
Mark Otto's avatar
Mark Otto committed
181
182
183
    <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>
Mark Otto's avatar
Mark Otto committed
184
185
186
  </div>
  <br>
  <div class="btn-group btn-group-justified">
Mark Otto's avatar
Mark Otto committed
187
188
    <a class="btn btn-secondary" href="#" role="button">Left</a>
    <a class="btn btn-secondary" href="#" role="button">Middle</a>
Mark Otto's avatar
Mark Otto committed
189
    <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
190
      <a class="btn btn-secondary dropdown-toggle" href="#" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
191
192
193
194
195
196
197
198
199
        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>
Mark Otto's avatar
Mark Otto committed
200
201
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
202
203
</div>

Mark Otto's avatar
Mark Otto committed
204
205
206
207
208
209
{% highlight html %}
<div class="btn-group btn-group-justified">
  ...
</div>
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
210
211
212
213
214
215
216
217
218
219
220
221
222
223
#### With `<button>` elements

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 workaround that.

<div class="bs-example">
  <div class="btn-group btn-group-justified">
    <div class="btn-group">
      <button type="button" class="btn btn-secondary">Left</button>
    </div>
    <div class="btn-group">
      <button type="button" class="btn btn-secondary">Middle</button>
    </div>
    <div class="btn-group">
      <button type="button" class="btn btn-secondary">Right</button>
Mark Otto's avatar
Mark Otto committed
224
225
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
226
227
</div>

Mark Otto's avatar
Mark Otto committed
228
229
230
{% highlight html %}
<div class="btn-group btn-group-justified">
  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
231
    <button type="button" class="btn btn-secondary">Left</button>
Mark Otto's avatar
Mark Otto committed
232
233
  </div>
  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
234
    <button type="button" class="btn btn-secondary">Middle</button>
Mark Otto's avatar
Mark Otto committed
235
236
  </div>
  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
237
    <button type="button" class="btn btn-secondary">Right</button>
Mark Otto's avatar
Mark Otto committed
238
239
240
  </div>
</div>
{% endhighlight %}