button-group.md 6.86 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1
---
Mark Otto's avatar
Mark Otto committed
2
layout: docs
Mark Otto's avatar
Mark Otto committed
3
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}

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

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

{% example html %}
Mark Otto's avatar
Mark Otto committed
19
<div class="btn-group" role="group" aria-label="Basic example">
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
</div>
Mark Otto's avatar
Mark Otto committed
24
{% endexample %}
Mark Otto's avatar
Mark Otto committed
25

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

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

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

Mark Otto's avatar
Mark Otto committed
49
## Sizing
Mark Otto's avatar
Mark Otto committed
50

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

53
<div class="bd-example">
Mark Otto's avatar
Mark Otto committed
54
55
56
57
  <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
58
  </div>
Mark Otto's avatar
Mark Otto committed
59
60
61
62
63
  <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
64
  </div>
Mark Otto's avatar
Mark Otto committed
65
66
67
68
69
  <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
70
  </div>
Mark Otto's avatar
Mark Otto committed
71
72
73
74
75
  <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
76
  </div>
Mark Otto's avatar
Mark Otto committed
77
78
</div>

Mark Otto's avatar
Mark Otto committed
79
{% highlight html %}
Mark Otto's avatar
Mark Otto committed
80
81
82
83
<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
84
85
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
86
## Nesting
Mark Otto's avatar
Mark Otto committed
87

Mark Otto's avatar
Mark Otto committed
88
89
90
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
91
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
Mark Otto's avatar
Mark Otto committed
92
93
  <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
94

Mark Otto's avatar
Mark Otto committed
95
  <div class="btn-group" role="group">
Mark Otto's avatar
Mark Otto committed
96
    <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
97
98
      Dropdown
    </button>
99
100
101
102
    <div class="dropdown-menu" aria-labelledby="btnGroupDrop1">
      <a class="dropdown-item" href="#">Dropdown link</a>
      <a class="dropdown-item" href="#">Dropdown link</a>
    </div>
Mark Otto's avatar
Mark Otto committed
103
104
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
105
{% endexample %}
Mark Otto's avatar
Mark Otto committed
106

Mark Otto's avatar
Mark Otto committed
107
## Vertical variation
Mark Otto's avatar
Mark Otto committed
108
109
110

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

111
<div class="bd-example">
Mark Otto's avatar
Mark Otto committed
112
  <div class="btn-group-vertical" role="group" aria-label="Vertical button group">
Mark Otto's avatar
Mark Otto committed
113
114
    <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
115
    <div class="btn-group" role="group">
Mark Otto's avatar
Mark Otto committed
116
      <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
117
118
        Dropdown
      </button>
119
120
121
122
      <div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop1">
        <a class="dropdown-item" href="#">Dropdown link</a>
        <a class="dropdown-item" href="#">Dropdown link</a>
      </div>
Mark Otto's avatar
Mark Otto committed
123
124
125
    </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
126
    <div class="btn-group" role="group">
Mark Otto's avatar
Mark Otto committed
127
      <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
128
129
        Dropdown
      </button>
130
131
132
133
      <div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop2">
        <a class="dropdown-item" href="#">Dropdown link</a>
        <a class="dropdown-item" href="#">Dropdown link</a>
      </div>
Mark Otto's avatar
Mark Otto committed
134
    </div>
Mark Otto's avatar
Mark Otto committed
135
    <div class="btn-group" role="group">
Mark Otto's avatar
Mark Otto committed
136
      <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
137
138
        Dropdown
      </button>
139
140
141
142
      <div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop3">
        <a class="dropdown-item" href="#">Dropdown link</a>
        <a class="dropdown-item" href="#">Dropdown link</a>
      </div>
Mark Otto's avatar
Mark Otto committed
143
    </div>
Mark Otto's avatar
Mark Otto committed
144
    <div class="btn-group" role="group">
Mark Otto's avatar
Mark Otto committed
145
      <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
146
147
        Dropdown
      </button>
148
149
150
151
      <div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop4">
        <a class="dropdown-item" href="#">Dropdown link</a>
        <a class="dropdown-item" href="#">Dropdown link</a>
      </div>
Mark Otto's avatar
Mark Otto committed
152
153
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
154
155
</div>

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

## Tooltips and popovers

Due to the specific implementation (and some other components), a bit of special casing is required for tooltips and popovers within button groups. **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).