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

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

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

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

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

17
18
19
20
21
22
23
24
25
26
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
27

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

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

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

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

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

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

### Sizing

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

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

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

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

Mark Otto's avatar
Mark Otto committed
102
103
104
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
105
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
Mark Otto's avatar
Mark Otto committed
106
107
  <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
108

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

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

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

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

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