Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
---
2
layout: docs
3
title: Input group
4
description: Easily extend form controls by adding text, buttons, or button groups on either side of textual inputs, custom selects, and custom file inputs.
5
group: components
6
toc: true
7
---
8
 
9
## Basic example
10
 
11
Place one add-on or button on either side of an input. You may also place one on both sides of an input. Remember to place `<label>`s outside the input group.
12
 
13
{{< example >}}
14
<div class="input-group mb-3">
15
  <div class="input-group-prepend">
16
    <span class="input-group-text" id="basic-addon1">@</span>
17
  </div>
18
  <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
19
</div>
20
 
21
<div class="input-group mb-3">
22
  <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="basic-addon2">
23
  <div class="input-group-append">
24
    <span class="input-group-text" id="basic-addon2">@example.com</span>
25
  </div>
26
</div>
27
 
28
<label for="basic-url">Your vanity URL</label>
29
<div class="input-group mb-3">
30
  <div class="input-group-prepend">
31
    <span class="input-group-text" id="basic-addon3">https://example.com/users/</span>
32
  </div>
33
  <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
34
</div>
35
 
36
<div class="input-group mb-3">
37
  <div class="input-group-prepend">
38
    <span class="input-group-text">$</span>
39
  </div>
40
  <input type="text" class="form-control" aria-label="Amount (to the nearest dollar)">
41
  <div class="input-group-append">
42
    <span class="input-group-text">.00</span>
43
  </div>
44
</div>
45
 
46
<div class="input-group">
47
  <div class="input-group-prepend">
48
    <span class="input-group-text">With textarea</span>
49
  </div>
50
  <textarea class="form-control" aria-label="With textarea"></textarea>
51
</div>
52
{{< /example >}}
53
 
54
## Wrapping
55
 
56
Input groups wrap by default via `flex-wrap: wrap` in order to accommodate custom form field validation within an input group. You may disable this with `.flex-nowrap`.
57
 
58
{{< example >}}
59
<div class="input-group flex-nowrap">
60
  <div class="input-group-prepend">
61
    <span class="input-group-text" id="addon-wrapping">@</span>
62
  </div>
63
  <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="addon-wrapping">
64
</div>
65
{{< /example >}}
66
 
67
## Sizing
68
 
69
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.
70
 
71
**Sizing on the individual input group elements isn't supported.**
72
 
73
{{< example >}}
74
<div class="input-group input-group-sm mb-3">
75
  <div class="input-group-prepend">
76
    <span class="input-group-text" id="inputGroup-sizing-sm">Small</span>
77
  </div>
78
  <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm">
79
</div>
80
 
81
<div class="input-group mb-3">
82
  <div class="input-group-prepend">
83
    <span class="input-group-text" id="inputGroup-sizing-default">Default</span>
84
  </div>
85
  <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
86
</div>
87
 
88
<div class="input-group input-group-lg">
89
  <div class="input-group-prepend">
90
    <span class="input-group-text" id="inputGroup-sizing-lg">Large</span>
91
  </div>
92
  <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-lg">
93
</div>
94
{{< /example >}}
95
 
96
## Checkboxes and radios
97
 
98
Place any checkbox or radio option within an input group's addon instead of text.
99
 
100
{{< example >}}
101
<div class="input-group mb-3">
102
  <div class="input-group-prepend">
103
    <div class="input-group-text">
104
      <input type="checkbox" aria-label="Checkbox for following text input">
105
    </div>
106
  </div>
107
  <input type="text" class="form-control" aria-label="Text input with checkbox">
108
</div>
109
 
110
<div class="input-group">
111
  <div class="input-group-prepend">
112
    <div class="input-group-text">
113
      <input type="radio" aria-label="Radio button for following text input">
114
    </div>
115
  </div>
116
  <input type="text" class="form-control" aria-label="Text input with radio button">
117
</div>
118
{{< /example >}}
119
 
120
## Multiple inputs
121
 
122
While multiple `<input>`s are supported visually, validation styles are only available for input groups with a single `<input>`.
123
 
124
{{< example >}}
125
<div class="input-group">
126
  <div class="input-group-prepend">
127
    <span class="input-group-text">First and last name</span>
128
  </div>
129
  <input type="text" aria-label="First name" class="form-control">
130
  <input type="text" aria-label="Last name" class="form-control">
131
</div>
132
{{< /example >}}
133
 
134
## Multiple addons
135
 
136
Multiple add-ons are supported and can be mixed with checkbox and radio input versions.
137
 
138
{{< example >}}
139
<div class="input-group mb-3">
140
  <div class="input-group-prepend">
141
    <span class="input-group-text">$</span>
142
    <span class="input-group-text">0.00</span>
143
  </div>
144
  <input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
145
</div>
146
 
147
<div class="input-group">
148
  <input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
149
  <div class="input-group-append">
150
    <span class="input-group-text">$</span>
151
    <span class="input-group-text">0.00</span>
152
  </div>
153
</div>
154
{{< /example >}}
155
 
156
## Button addons
157
 
158
{{< example >}}
159
<div class="input-group mb-3">
160
  <div class="input-group-prepend">
161
    <button class="btn btn-outline-secondary" type="button" id="button-addon1">Button</button>
162
  </div>
163
  <input type="text" class="form-control" placeholder="" aria-label="Example text with button addon" aria-describedby="button-addon1">
164
</div>
165
 
166
<div class="input-group mb-3">
167
  <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="button-addon2">
168
  <div class="input-group-append">
169
    <button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
170
  </div>
171
</div>
172
 
173
<div class="input-group mb-3">
174
  <div class="input-group-prepend" id="button-addon3">
175
    <button class="btn btn-outline-secondary" type="button">Button</button>
176
    <button class="btn btn-outline-secondary" type="button">Button</button>
177
  </div>
178
  <input type="text" class="form-control" placeholder="" aria-label="Example text with two button addons" aria-describedby="button-addon3">
179
</div>
180
 
181
<div class="input-group">
182
  <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username with two button addons" aria-describedby="button-addon4">
183
  <div class="input-group-append" id="button-addon4">
184
    <button class="btn btn-outline-secondary" type="button">Button</button>
185
    <button class="btn btn-outline-secondary" type="button">Button</button>
186
  </div>
187
</div>
188
{{< /example >}}
189
 
190
## Buttons with dropdowns
191
 
192
{{< example >}}
193
<div class="input-group mb-3">
194
  <div class="input-group-prepend">
195
    <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">Dropdown</button>
196
    <div class="dropdown-menu">
197
      <a class="dropdown-item" href="#">Action</a>
198
      <a class="dropdown-item" href="#">Another action</a>
199
      <a class="dropdown-item" href="#">Something else here</a>
200
      <div role="separator" class="dropdown-divider"></div>
201
      <a class="dropdown-item" href="#">Separated link</a>
202
    </div>
203
  </div>
204
  <input type="text" class="form-control" aria-label="Text input with dropdown button">
205
</div>
206
 
207
<div class="input-group">
208
  <input type="text" class="form-control" aria-label="Text input with dropdown button">
209
  <div class="input-group-append">
210
    <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">Dropdown</button>
211
    <div class="dropdown-menu">
212
      <a class="dropdown-item" href="#">Action</a>
213
      <a class="dropdown-item" href="#">Another action</a>
214
      <a class="dropdown-item" href="#">Something else here</a>
215
      <div role="separator" class="dropdown-divider"></div>
216
      <a class="dropdown-item" href="#">Separated link</a>
217
    </div>
218
  </div>
219
</div>
220
{{< /example >}}
221
 
222
## Segmented buttons
223
 
224
{{< example >}}
225
<div class="input-group mb-3">
226
  <div class="input-group-prepend">
227
    <button type="button" class="btn btn-outline-secondary">Action</button>
228
    <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
229
      <span class="sr-only">Toggle Dropdown</span>
230
    </button>
231
    <div class="dropdown-menu">
232
      <a class="dropdown-item" href="#">Action</a>
233
      <a class="dropdown-item" href="#">Another action</a>
234
      <a class="dropdown-item" href="#">Something else here</a>
235
      <div role="separator" class="dropdown-divider"></div>
236
      <a class="dropdown-item" href="#">Separated link</a>
237
    </div>
238
  </div>
239
  <input type="text" class="form-control" aria-label="Text input with segmented dropdown button">
240
</div>
241
 
242
<div class="input-group">
243
  <input type="text" class="form-control" aria-label="Text input with segmented dropdown button">
244
  <div class="input-group-append">
245
    <button type="button" class="btn btn-outline-secondary">Action</button>
246
    <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
247
      <span class="sr-only">Toggle Dropdown</span>
248
    </button>
249
    <div class="dropdown-menu">
250
      <a class="dropdown-item" href="#">Action</a>
251
      <a class="dropdown-item" href="#">Another action</a>
252
      <a class="dropdown-item" href="#">Something else here</a>
253
      <div role="separator" class="dropdown-divider"></div>
254
      <a class="dropdown-item" href="#">Separated link</a>
255
    </div>
256
  </div>
257
</div>
258
{{< /example >}}
259
 
260
## Custom forms
261
 
262
Input groups include support for custom selects and custom file inputs. Browser default versions of these are not supported.
263
 
264
### Custom select
265
 
266
{{< example >}}
267
<div class="input-group mb-3">
268
  <div class="input-group-prepend">
269
    <label class="input-group-text" for="inputGroupSelect01">Options</label>
270
  </div>
271
  <select class="custom-select" id="inputGroupSelect01">
272
    <option selected>Choose...</option>
273
    <option value="1">One</option>
274
    <option value="2">Two</option>
275
    <option value="3">Three</option>
276
  </select>
277
</div>
278
 
279
<div class="input-group mb-3">
280
  <select class="custom-select" id="inputGroupSelect02">
281
    <option selected>Choose...</option>
282
    <option value="1">One</option>
283
    <option value="2">Two</option>
284
    <option value="3">Three</option>
285
  </select>
286
  <div class="input-group-append">
287
    <label class="input-group-text" for="inputGroupSelect02">Options</label>
288
  </div>
289
</div>
290
 
291
<div class="input-group mb-3">
292
  <div class="input-group-prepend">
293
    <button class="btn btn-outline-secondary" type="button">Button</button>
294
  </div>
295
  <select class="custom-select" id="inputGroupSelect03" aria-label="Example select with button addon">
296
    <option selected>Choose...</option>
297
    <option value="1">One</option>
298
    <option value="2">Two</option>
299
    <option value="3">Three</option>
300
  </select>
301
</div>
302
 
303
<div class="input-group">
304
  <select class="custom-select" id="inputGroupSelect04" aria-label="Example select with button addon">
305
    <option selected>Choose...</option>
306
    <option value="1">One</option>
307
    <option value="2">Two</option>
308
    <option value="3">Three</option>
309
  </select>
310
  <div class="input-group-append">
311
    <button class="btn btn-outline-secondary" type="button">Button</button>
312
  </div>
313
</div>
314
{{< /example >}}
315
 
316
### Custom file input
317
 
318
{{< callout info >}}
319
This example uses the [custom file browser]({{< docsref "/components/forms#file-browser" >}}) component, which relies on the separate [bs-custom-file-input](https://www.npmjs.com/package/bs-custom-file-input) plugin.
320
{{< /callout >}}
321
 
322
{{< example >}}
323
<div class="input-group mb-3">
324
  <div class="input-group-prepend">
325
    <span class="input-group-text" id="inputGroupFileAddon01">Upload</span>
326
  </div>
327
  <div class="custom-file">
328
    <input type="file" class="custom-file-input" id="inputGroupFile01" aria-describedby="inputGroupFileAddon01">
329
    <label class="custom-file-label" for="inputGroupFile01">Choose file</label>
330
  </div>
331
</div>
332
 
333
<div class="input-group mb-3">
334
  <div class="custom-file">
335
    <input type="file" class="custom-file-input" id="inputGroupFile02">
336
    <label class="custom-file-label" for="inputGroupFile02" aria-describedby="inputGroupFileAddon02">Choose file</label>
337
  </div>
338
  <div class="input-group-append">
339
    <span class="input-group-text" id="inputGroupFileAddon02">Upload</span>
340
  </div>
341
</div>
342
 
343
<div class="input-group mb-3">
344
  <div class="input-group-prepend">
345
    <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon03">Button</button>
346
  </div>
347
  <div class="custom-file">
348
    <input type="file" class="custom-file-input" id="inputGroupFile03" aria-describedby="inputGroupFileAddon03">
349
    <label class="custom-file-label" for="inputGroupFile03">Choose file</label>
350
  </div>
351
</div>
352
 
353
<div class="input-group">
354
  <div class="custom-file">
355
    <input type="file" class="custom-file-input" id="inputGroupFile04" aria-describedby="inputGroupFileAddon04">
356
    <label class="custom-file-label" for="inputGroupFile04">Choose file</label>
357
  </div>
358
  <div class="input-group-append">
359
    <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
360
  </div>
361
</div>
362
{{< /example >}}
363
 
364
## Accessibility
365
 
366
Ensure that all form controls have an appropriate accessible name so that their purpose can be conveyed to users of assistive technologies. The simplest way to achieve this is to use a `<label>` element, or—in the case of buttons—to include sufficiently descriptive text as part of the `<button>...</button>` content.
367
 
368
For situations where it's not possible to include a visible `<label>` or appropriate text content, there are alternative ways of still providing an accessible name, such as:
369
 
370
- `<label>` elements hidden using the `.sr-only` class
371
- Pointing to an existing element that can act as a label using `aria-labelledby`
372
- Providing a `title` attribute
373
- Explicitly setting the accessible name on an element using `aria-label`
374
 
375
If none of these are present, assistive technologies may resort to using the `placeholder` attribute as a fallback for the accessible name on `<input>` and `<textarea>` elements. The examples in this section provide a few suggested, case-specific approaches.
376
 
377
While using visually hidden content (`.sr-only`, `aria-label`, and even `placeholder` content, which disappears once a form field has content) will benefit assistive technology users, a lack of visible label text may still be problematic for certain users. Some form of visible label is generally the best approach, both for accessibility and usability.