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

Mark Otto's avatar
Mark Otto committed
6
Extend form controls by adding text or buttons before, after, or on both sides of any text-based input. Use `.input-group` with an `.input-group-addon` to prepend or append elements to a single `.form-control`.
Mark Otto's avatar
Mark Otto committed
7

Mark Otto's avatar
Mark Otto committed
8
9
10
11
12
13
14
15
16
17
18
19
<div class="bs-callout bs-callout-danger">
  <h4>Cross-browser compatibility</h4>
  <p>Avoid using <code>&lt;select&gt;</code> elements here as they cannot be fully styled in WebKit browsers.</p>
</div>
<div class="bs-callout bs-callout-warning">
  <h4>Tooltips &amp; popovers in input groups require special setting</h4>
  <p>When using tooltips or popovers on elements within an <code>.input-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>
<div class="bs-callout bs-callout-warning">
  <h4>Don't mix with other components</h4>
  <p>Do not mix form groups or grid column classes directly with input groups. Instead, nest the input group inside of the form group or grid-related element.</p>
</div>
Mark Otto's avatar
Mark Otto committed
20

Mark Otto's avatar
Mark Otto committed
21
## Basic example
Mark Otto's avatar
Mark Otto committed
22

Mark Otto's avatar
Mark Otto committed
23
Place one add-on or button on either side of an input. You may also place one on both sides of an input.
Mark Otto's avatar
Mark Otto committed
24

Mark Otto's avatar
Mark Otto committed
25
26
27
28
29
**We do not support multiple add-ons on a single side.**

**We do not support multiple form-controls in a single input group.**

{% example html %}
Mark Otto's avatar
Mark Otto committed
30
31
32
33
<div class="input-group">
  <span class="input-group-addon">@</span>
  <input type="text" class="form-control" placeholder="Username">
</div>
Mark Otto's avatar
Mark Otto committed
34
<br>
Mark Otto's avatar
Mark Otto committed
35
36
37
38
<div class="input-group">
  <input type="text" class="form-control">
  <span class="input-group-addon">.00</span>
</div>
Mark Otto's avatar
Mark Otto committed
39
<br>
Mark Otto's avatar
Mark Otto committed
40
41
42
43
44
<div class="input-group">
  <span class="input-group-addon">$</span>
  <input type="text" class="form-control">
  <span class="input-group-addon">.00</span>
</div>
Mark Otto's avatar
Mark Otto committed
45
{% endexample %}
Mark Otto's avatar
Mark Otto committed
46

Mark Otto's avatar
Mark Otto committed
47
48
49
50
51
## 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
52
53
54
55
<div class="input-group input-group-lg">
  <span class="input-group-addon">@</span>
  <input type="text" class="form-control" placeholder="Username">
</div>
Mark Otto's avatar
Mark Otto committed
56
<br>
Mark Otto's avatar
Mark Otto committed
57
58
59
60
<div class="input-group">
  <span class="input-group-addon">@</span>
  <input type="text" class="form-control" placeholder="Username">
</div>
Mark Otto's avatar
Mark Otto committed
61
<br>
Mark Otto's avatar
Mark Otto committed
62
63
64
65
<div class="input-group input-group-sm">
  <span class="input-group-addon">@</span>
  <input type="text" class="form-control" placeholder="Username">
</div>
Mark Otto's avatar
Mark Otto committed
66
67
68
{% endexample %}

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

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

Mark Otto's avatar
Mark Otto committed
72
{% example html %}
Mark Otto's avatar
Mark Otto committed
73
74
75
76
77
78
79
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <span class="input-group-addon">
        <input type="checkbox">
      </span>
      <input type="text" class="form-control">
Mark Otto's avatar
Mark Otto committed
80
81
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
82
83
84
85
86
87
  <div class="col-lg-6">
    <div class="input-group">
      <span class="input-group-addon">
        <input type="radio">
      </span>
      <input type="text" class="form-control">
Mark Otto's avatar
Mark Otto committed
88
89
90
91
    </div>
  </div>
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
92

Mark Otto's avatar
Mark Otto committed
93
## Button addons
Mark Otto's avatar
Mark Otto committed
94

Mark Otto's avatar
Mark Otto committed
95
96
97
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
98
99
100
101
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <span class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
102
        <button class="btn btn-secondary" type="button">Go!</button>
Mark Otto's avatar
Mark Otto committed
103
104
      </span>
      <input type="text" class="form-control">
Mark Otto's avatar
Mark Otto committed
105
106
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
107
108
109
110
  <div class="col-lg-6">
    <div class="input-group">
      <input type="text" class="form-control">
      <span class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
111
        <button class="btn btn-secondary" type="button">Go!</button>
Mark Otto's avatar
Mark Otto committed
112
      </span>
Mark Otto's avatar
Mark Otto committed
113
114
115
116
    </div>
  </div>
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
117

Mark Otto's avatar
Mark Otto committed
118
119
120
## Buttons with dropdowns

{% example html %}
Mark Otto's avatar
Mark Otto committed
121
122
123
124
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <div class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
125
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">Action</button>
Chris Rebert's avatar
Chris Rebert committed
126
        <ul class="dropdown-menu" role="menu">
Mark Otto's avatar
Mark Otto committed
127
128
129
130
131
132
          <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
133
      </div>
Mark Otto's avatar
Mark Otto committed
134
      <input type="text" class="form-control">
Mark Otto's avatar
Mark Otto committed
135
136
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
137
138
139
140
  <div class="col-lg-6">
    <div class="input-group">
      <input type="text" class="form-control">
      <div class="input-group-btn">
Mark Otto's avatar
Mark Otto committed
141
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">Action</button>
Chris Rebert's avatar
Chris Rebert committed
142
        <ul class="dropdown-menu dropdown-menu-right" role="menu">
Mark Otto's avatar
Mark Otto committed
143
144
145
146
147
148
          <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
149
150
      </div>
    </div>
Mark Otto's avatar
Mark Otto committed
151
152
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
153
{% endexample %}
Mark Otto's avatar
Mark Otto committed
154

Mark Otto's avatar
Mark Otto committed
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
## Segmented buttons

{% example html %}
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <div class="input-group-btn">
        <button type="button" class="btn btn-secondary" tabindex="-1">Action</button>
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" tabindex="-1">
          <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>
      <input type="text" class="form-control">
    </div>
  </div>
  <div class="col-lg-6">
    <div class="input-group">
      <input type="text" class="form-control">
      <div class="input-group-btn">
        <button type="button" class="btn btn-secondary" tabindex="-1">Action</button>
        <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" tabindex="-1">
          <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
194
195
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
196
{% endexample %}