input-group.md 7.05 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1
2
3
4
5
---
layout: page
title: Input group
---

6
Easily extend form controls by adding text, buttons, or button groups on either side of textual `<input>`s.
Mark Otto's avatar
Mark Otto committed
7

Mark Otto's avatar
Mark Otto committed
8
## Basic example
Mark Otto's avatar
Mark Otto committed
9

10
Place one add-on or button on either side of an input. You may also place one on both sides of an input. **We do not support multiple add-ons on a single side, nor multiple form-controls in a single input group.**
Mark Otto's avatar
Mark Otto committed
11
12

{% example html %}
Mark Otto's avatar
Mark Otto committed
13
<div class="input-group">
Mark Otto's avatar
Mark Otto committed
14
15
  <span class="input-group-addon" id="basic-addon1">@</span>
  <input type="text" class="form-control" placeholder="Username" aria-describedby="basic-addon1">
Mark Otto's avatar
Mark Otto committed
16
</div>
Mark Otto's avatar
Mark Otto committed
17
<br>
Mark Otto's avatar
Mark Otto committed
18
<div class="input-group">
Mark Otto's avatar
Mark Otto committed
19
20
  <input type="text" class="form-control" placeholder="Recipient's username" aria-describedby="basic-addon2">
  <span class="input-group-addon" id="basic-addon2">.00</span>
Mark Otto's avatar
Mark Otto committed
21
</div>
Mark Otto's avatar
Mark Otto committed
22
<br>
Mark Otto's avatar
Mark Otto committed
23
24
<div class="input-group">
  <span class="input-group-addon">$</span>
Mark Otto's avatar
Mark Otto committed
25
  <input type="text" class="form-control" aria-label="Amount (to the nearest dollar)">
Mark Otto's avatar
Mark Otto committed
26
27
  <span class="input-group-addon">.00</span>
</div>
Mark Otto's avatar
Mark Otto committed
28
{% endexample %}
Mark Otto's avatar
Mark Otto committed
29

Mark Otto's avatar
Mark Otto committed
30
31
32
33
34
## Sizing

Add the relative form sizing classes to the `.input-group` itself and contents within will automatically resize—no need for repeating the form control size classes on each element.

{% example html %}
Mark Otto's avatar
Mark Otto committed
35
<div class="input-group input-group-lg">
Mark Otto's avatar
Mark Otto committed
36
37
  <span class="input-group-addon" id="sizing-addon1">@</span>
  <input type="text" class="form-control" placeholder="Username" aria-describedby="sizing-addon1">
Mark Otto's avatar
Mark Otto committed
38
</div>
Mark Otto's avatar
Mark Otto committed
39
<br>
Mark Otto's avatar
Mark Otto committed
40
<div class="input-group">
Mark Otto's avatar
Mark Otto committed
41
42
  <span class="input-group-addon" id="sizing-addon2">@</span>
  <input type="text" class="form-control" placeholder="Username" aria-describedby="sizing-addon2">
Mark Otto's avatar
Mark Otto committed
43
</div>
Mark Otto's avatar
Mark Otto committed
44
<br>
Mark Otto's avatar
Mark Otto committed
45
<div class="input-group input-group-sm">
Mark Otto's avatar
Mark Otto committed
46
47
  <span class="input-group-addon" id="sizing-addon3">@</span>
  <input type="text" class="form-control" placeholder="Username" aria-describedby="sizing-addon3">
Mark Otto's avatar
Mark Otto committed
48
</div>
Mark Otto's avatar
Mark Otto committed
49
50
51
{% endexample %}

## Checkboxes and radio addons
Mark Otto's avatar
Mark Otto committed
52

Mark Otto's avatar
Mark Otto committed
53
Place any checkbox or radio option within an input group's addon instead of text.
Mark Otto's avatar
Mark Otto committed
54

Mark Otto's avatar
Mark Otto committed
55
{% example html %}
Mark Otto's avatar
Mark Otto committed
56
57
58
59
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <span class="input-group-addon">
Mark Otto's avatar
Mark Otto committed
60
        <input type="checkbox" aria-label="Checkbox for following text input">
Mark Otto's avatar
Mark Otto committed
61
      </span>
Mark Otto's avatar
Mark Otto committed
62
      <input type="text" class="form-control" aria-label="Text input with checkbox">
Mark Otto's avatar
Mark Otto committed
63
64
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
65
66
67
  <div class="col-lg-6">
    <div class="input-group">
      <span class="input-group-addon">
Mark Otto's avatar
Mark Otto committed
68
        <input type="radio" aria-label="Radio button for following text input">
Mark Otto's avatar
Mark Otto committed
69
      </span>
Mark Otto's avatar
Mark Otto committed
70
      <input type="text" class="form-control" aria-label="Text input with radio button">
Mark Otto's avatar
Mark Otto committed
71
72
73
74
    </div>
  </div>
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
75

Mark Otto's avatar
Mark Otto committed
76
## Button addons
Mark Otto's avatar
Mark Otto committed
77

Mark Otto's avatar
Mark Otto committed
78
79
80
Buttons in input groups are a bit different and require one extra level of nesting. Instead of `.input-group-addon`, you'll need to use `.input-group-btn` to wrap the buttons. This is required due to default browser styles that cannot be overridden.

{% example html %}
Mark Otto's avatar
Mark Otto committed
81
82
83
84
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <span class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
85
        <button class="btn btn-secondary" type="button">Go!</button>
Mark Otto's avatar
Mark Otto committed
86
      </span>
Mark Otto's avatar
Mark Otto committed
87
      <input type="text" class="form-control" placeholder="Search for...">
Mark Otto's avatar
Mark Otto committed
88
89
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
90
91
  <div class="col-lg-6">
    <div class="input-group">
Mark Otto's avatar
Mark Otto committed
92
      <input type="text" class="form-control" placeholder="Search for...">
Mark Otto's avatar
Mark Otto committed
93
      <span class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
94
        <button class="btn btn-secondary" type="button">Go!</button>
Mark Otto's avatar
Mark Otto committed
95
      </span>
Mark Otto's avatar
Mark Otto committed
96
97
98
99
    </div>
  </div>
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
100

Mark Otto's avatar
Mark Otto committed
101
102
103
## Buttons with dropdowns

{% example html %}
Mark Otto's avatar
Mark Otto committed
104
105
106
107
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <div class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
108
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Action</button>
Chris Rebert's avatar
Chris Rebert committed
109
        <ul class="dropdown-menu" role="menu">
Mark Otto's avatar
Mark Otto committed
110
111
112
113
114
115
          <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
116
      </div>
Mark Otto's avatar
Mark Otto committed
117
      <input type="text" class="form-control" aria-label="Text input with dropdown button">
Mark Otto's avatar
Mark Otto committed
118
119
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
120
121
  <div class="col-lg-6">
    <div class="input-group">
Mark Otto's avatar
Mark Otto committed
122
      <input type="text" class="form-control" aria-label="Text input with dropdown button">
Mark Otto's avatar
Mark Otto committed
123
      <div class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
124
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Action</button>
Chris Rebert's avatar
Chris Rebert committed
125
        <ul class="dropdown-menu dropdown-menu-right" role="menu">
Mark Otto's avatar
Mark Otto committed
126
127
128
129
130
131
          <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
132
133
      </div>
    </div>
Mark Otto's avatar
Mark Otto committed
134
135
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
136
{% endexample %}
Mark Otto's avatar
Mark Otto committed
137

Mark Otto's avatar
Mark Otto committed
138
139
140
141
142
143
144
## Segmented buttons

{% example html %}
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <div class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
145
146
        <button type="button" class="btn btn-secondary">Action</button>
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Mark Otto's avatar
Mark Otto committed
147
148
149
150
151
152
153
154
155
156
          <span class="sr-only">Toggle Dropdown</span>
        </button>
        <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>
Mark Otto's avatar
Mark Otto committed
157
      <input type="text" class="form-control" aria-label="Text input with segmented button dropdown">
Mark Otto's avatar
Mark Otto committed
158
159
160
161
    </div>
  </div>
  <div class="col-lg-6">
    <div class="input-group">
Mark Otto's avatar
Mark Otto committed
162
      <input type="text" class="form-control" aria-label="Text input with segmented button dropdown">
Mark Otto's avatar
Mark Otto committed
163
      <div class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
164
165
        <button type="button" class="btn btn-secondary">Action</button>
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Mark Otto's avatar
Mark Otto committed
166
167
168
169
170
171
172
173
174
175
176
          <span class="sr-only">Toggle Dropdown</span>
        </button>
        <ul class="dropdown-menu dropdown-menu-right" 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>
Mark Otto's avatar
Mark Otto committed
177
178
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
179
{% endexample %}
180
181
182
183
184
185

## Accessibility

Screen readers will have trouble with your forms if you don't include a label for every input. For these input groups, ensure that any additional label or functionality is conveyed to assistive technologies.

The exact technique to be used (`<label>` elements hidden using the `.sr-only` class, or use of the `aria-label`, `aria-labelledby`, `aria-describedby`, `title` or `placeholder` attribute) and what additional information will need to be conveyed will vary depending on the exact type of interface widget you're implementing. The examples in this section provide a few suggested, case-specific approaches.