button-group.md 11.2 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
7
8
9
10
11
12
13
14
15
16
17
18
19
<div class="bs-docs-section">
  <h1 id="btn-groups" class="page-header">Button groups</h1>

  <p class="lead">Group a series of buttons together on a single line with the button group. Add on optional JavaScript radio and checkbox style behavior with <a href="../javascript/#buttons">our buttons plugin</a>.</p>

  <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>

  <h3 id="btn-groups-single">Basic example</h3>
  <p>Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.</p>
  <div class="bs-example">
    <div class="btn-group" style="margin: 9px 0 5px;">
Mark Otto's avatar
Mark Otto committed
20
21
22
      <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
23
24
25
26
    </div>
  </div>
{% highlight html %}
<div class="btn-group">
Mark Otto's avatar
Mark Otto committed
27
28
29
  <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
30
31
32
33
34
35
36
37
</div>
{% endhighlight %}

  <h3 id="btn-groups-toolbar">Button toolbar</h3>
  <p>Combine sets of <code>&lt;div class="btn-group"&gt;</code> into a <code>&lt;div class="btn-toolbar"&gt;</code> for more complex components.</p>
  <div class="bs-example">
    <div class="btn-toolbar" role="toolbar" style="margin: 0;">
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
38
39
40
41
        <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>
Mark Otto's avatar
Mark Otto committed
42
43
      </div>
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
44
45
46
        <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>
Mark Otto's avatar
Mark Otto committed
47
48
      </div>
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
49
        <button type="button" class="btn btn-secondary">8</button>
Mark Otto's avatar
Mark Otto committed
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
      </div>
    </div>
  </div>
{% highlight html %}
<div class="btn-toolbar" role="toolbar">
  <div class="btn-group">...</div>
  <div class="btn-group">...</div>
  <div class="btn-group">...</div>
</div>
{% endhighlight %}

  <h3 id="btn-groups-sizing">Sizing</h3>
  <p>Instead of applying button sizing classes to every button in a group, just add <code>.btn-group-*</code> to the <code>.btn-group</code>.</p>
  <div class="bs-example">
    <div class="btn-toolbar" role="toolbar">
      <div class="btn-group btn-group-lg">
Mark Otto's avatar
Mark Otto committed
66
67
68
        <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
69
70
71
72
      </div>
    </div>
    <div class="btn-toolbar" role="toolbar">
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
73
74
75
        <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
76
77
78
79
      </div>
    </div>
    <div class="btn-toolbar" role="toolbar">
      <div class="btn-group btn-group-sm">
Mark Otto's avatar
Mark Otto committed
80
81
82
        <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
84
85
86
      </div>
    </div>
    <div class="btn-toolbar" role="toolbar">
      <div class="btn-group btn-group-xs">
Mark Otto's avatar
Mark Otto committed
87
88
89
        <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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
      </div>
    </div>
  </div>
{% 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 %}

  <h3 id="btn-groups-nested">Nesting</h3>
  <p>Place a <code>.btn-group</code> within another <code>.btn-group</code> when you want dropdown menus mixed with a series of buttons.</p>
  <div class="bs-example">
    <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
104
105
      <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
106
107

      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
108
        <button id="btnGroupDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
109
110
111
112
113
114
115
116
117
118
119
          Dropdown
        </button>
        <ul class="dropdown-menu" role="menu" aria-labelledby="btnGroupDrop1">
          <li><a href="#">Dropdown link</a></li>
          <li><a href="#">Dropdown link</a></li>
        </ul>
      </div>
    </div>
  </div>
{% highlight html %}
<div class="btn-group">
Mark Otto's avatar
Mark Otto committed
120
121
  <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
122
123

  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
124
    <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
125
126
      Dropdown
    </button>
127
    <ul class="dropdown-menu" role="menu">
Mark Otto's avatar
Mark Otto committed
128
129
130
131
132
133
134
135
136
137
138
      <li><a href="#">Dropdown link</a></li>
      <li><a href="#">Dropdown link</a></li>
    </ul>
  </div>
</div>
{% endhighlight %}

  <h3 id="btn-groups-vertical">Vertical variation</h3>
  <p>Make a set of buttons appear vertically stacked rather than horizontally. <strong class="text-danger">Split button dropdowns are not supported here.</strong></p>
  <div class="bs-example">
    <div class="btn-group-vertical">
Mark Otto's avatar
Mark Otto committed
139
140
      <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
141
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
142
        <button id="btnGroupVerticalDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
143
144
145
146
147
148
149
          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>
Mark Otto's avatar
Mark Otto committed
150
151
      <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
152
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
153
        <button id="btnGroupVerticalDrop2" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
154
155
156
157
158
159
160
161
          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">
Mark Otto's avatar
Mark Otto committed
162
        <button id="btnGroupVerticalDrop3" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
163
164
165
166
167
168
169
170
          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">
Mark Otto's avatar
Mark Otto committed
171
        <button id="btnGroupVerticalDrop4" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Mark Otto's avatar
Mark Otto committed
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
          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>
      </div>
    </div>
  </div>
{% highlight html %}
<div class="btn-group-vertical">
  ...
</div>
{% endhighlight %}

  <h3 id="btn-groups-justified">Justified button groups</h3>
  <p>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.</p>

  <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>
  <div class="bs-callout bs-callout-warning">
    <h4>IE8 and borders</h4>
196
    <p>Internet Explorer 8 doesn't render borders on buttons in a justified button group, whether it's on <code>&lt;a&gt;</code> or <code>&lt;button&gt;</code> elements. To get around that, wrap each button in another <code>.btn-group</code>.</p>
Mark Otto's avatar
Mark Otto committed
197
198
199
200
201
202
203
    <p>See <a href="https://github.com/twbs/bootstrap/issues/12476">#12476</a> for more information.</p>
  </div>

  <h4>With <code>&lt;a&gt;</code> elements</h4>
  <p>Just wrap a series of <code>.btn</code>s in <code>.btn-group.btn-group-justified</code>.</p>
  <div class="bs-example">
    <div class="btn-group btn-group-justified">
Mark Otto's avatar
Mark Otto committed
204
205
206
      <a class="btn btn-secondary" role="button">Left</a>
      <a class="btn btn-secondary" role="button">Middle</a>
      <a class="btn btn-secondary" role="button">Right</a>
Mark Otto's avatar
Mark Otto committed
207
208
209
    </div>
    <br>
    <div class="btn-group btn-group-justified">
Mark Otto's avatar
Mark Otto committed
210
211
      <a class="btn btn-secondary" role="button">Left</a>
      <a class="btn btn-secondary" role="button">Middle</a>
Mark Otto's avatar
Mark Otto committed
212
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
213
        <a class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
214
          Dropdown
Mark Otto's avatar
Mark Otto committed
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
        </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>
      </div>
    </div>
  </div>
{% highlight html %}
<div class="btn-group btn-group-justified">
  ...
</div>
{% endhighlight %}

  <h4>With <code>&lt;button&gt;</code> elements</h4>
  <p>To use justified button groups with <code>&lt;button&gt;</code> elements, <strong class="text-danger">you must wrap each button in a button group</strong>. Most browsers don't properly apply our CSS for justification to <code>&lt;button&gt;</code> elements, but since we support button dropdowns, we can workaround that.</p>
  <div class="bs-example">
    <div class="btn-group btn-group-justified">
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
237
        <button type="button" class="btn btn-secondary">Left</button>
Mark Otto's avatar
Mark Otto committed
238
239
      </div>
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
240
        <button type="button" class="btn btn-secondary">Middle</button>
Mark Otto's avatar
Mark Otto committed
241
242
      </div>
      <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
243
        <button type="button" class="btn btn-secondary">Right</button>
Mark Otto's avatar
Mark Otto committed
244
245
246
247
248
249
      </div>
    </div>
  </div>
{% highlight html %}
<div class="btn-group btn-group-justified">
  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
250
    <button type="button" class="btn btn-secondary">Left</button>
Mark Otto's avatar
Mark Otto committed
251
252
  </div>
  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
253
    <button type="button" class="btn btn-secondary">Middle</button>
Mark Otto's avatar
Mark Otto committed
254
255
  </div>
  <div class="btn-group">
Mark Otto's avatar
Mark Otto committed
256
    <button type="button" class="btn btn-secondary">Right</button>
Mark Otto's avatar
Mark Otto committed
257
258
259
260
  </div>
</div>
{% endhighlight %}
</div>