2014-07-13 03:59:31 -04:00
---
2015-08-15 01:45:55 -04:00
layout: docs
2014-07-13 03:59:31 -04:00
title: Input group
2017-10-22 22:39:32 -04:00
description: Easily extend form controls by adding text, buttons, or button groups on either side of textual inputs, custom selects, and custom file inputs.
2015-08-05 20:47:45 -04:00
group: components
2017-05-28 02:01:14 -04:00
toc: true
2014-07-13 03:59:31 -04:00
---
2014-07-13 04:12:02 -04:00
## Basic example
2014-03-16 22:03:53 -04:00
2017-06-18 00:10:06 -04:00
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 form-controls in a single input group** and `<label>` s must come outside the input group.
2014-07-13 04:12:02 -04:00
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< span class = "input-group-text" id = "basic-addon1" > @< / span >
< / div >
2017-03-30 17:45:36 -04:00
< input type = "text" class = "form-control" placeholder = "Username" aria-label = "Username" aria-describedby = "basic-addon1" >
2014-03-16 22:03:53 -04:00
< / div >
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
2017-03-30 17:45:36 -04:00
< input type = "text" class = "form-control" placeholder = "Recipient's username" aria-label = "Recipient's username" aria-describedby = "basic-addon2" >
2017-12-22 18:29:49 -05:00
< div class = "input-group-append" >
< span class = "input-group-text" id = "basic-addon2" > @example.com< / span >
< / div >
2014-03-16 22:03:53 -04:00
< / div >
2017-12-22 18:29:49 -05:00
2015-08-05 01:29:45 -04:00
< label for = "basic-url" > Your vanity URL< / label >
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< span class = "input-group-text" id = "basic-addon3" > https://example.com/users/< / span >
< / div >
2015-08-05 01:29:45 -04:00
< input type = "text" class = "form-control" id = "basic-url" aria-describedby = "basic-addon3" >
< / div >
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< span class = "input-group-text" > $< / span >
< / div >
2016-02-08 02:48:47 -05:00
< input type = "text" class = "form-control" aria-label = "Amount (to the nearest dollar)" >
2017-12-22 18:29:49 -05:00
< div class = "input-group-append" >
< span class = "input-group-text" > .00< / span >
< / div >
2016-02-08 02:48:47 -05:00
< / div >
2018-01-03 00:18:14 -05:00
< div class = "input-group" >
< div class = "input-group-prepend" >
< span class = "input-group-text" > With textarea< / span >
< / div >
< textarea class = "form-control" aria-label = "With textarea" > < / textarea >
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2014-03-16 22:03:53 -04:00
2014-07-13 04:12:02 -04:00
## 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.
2017-12-22 18:29:49 -05:00
**Sizing on the individual input group elements isn't supported.**
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group input-group-sm mb-3" >
< div class = "input-group-prepend" >
< span class = "input-group-text" id = "inputGroup-sizing-sm" > Small< / span >
< / div >
< input type = "text" class = "form-control" aria-label = "Small" aria-describedby = "inputGroup-sizing-sm" >
< / div >
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< span class = "input-group-text" id = "inputGroup-sizing-default" > Default< / span >
< / div >
< input type = "text" class = "form-control" aria-label = "Default" aria-describedby = "inputGroup-sizing-default" >
2014-03-16 22:03:53 -04:00
< / div >
2017-12-22 18:29:49 -05:00
< div class = "input-group input-group-lg" >
< div class = "input-group-prepend" >
< span class = "input-group-text" id = "inputGroup-sizing-lg" > Large< / span >
< / div >
< input type = "text" class = "form-control" aria-label = "Large" aria-describedby = "inputGroup-sizing-sm" >
2014-03-16 22:03:53 -04:00
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2014-07-13 04:12:02 -04:00
2017-12-22 18:29:49 -05:00
## Checkboxes and radios
2014-03-16 22:03:53 -04:00
2014-07-13 04:12:02 -04:00
Place any checkbox or radio option within an input group's addon instead of text.
2014-03-16 22:03:53 -04:00
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< div class = "input-group-text" >
< input type = "checkbox" aria-label = "Checkbox for following text input" >
2014-07-13 04:12:02 -04:00
< / div >
< / div >
2017-12-22 18:29:49 -05:00
< input type = "text" class = "form-control" aria-label = "Text input with checkbox" >
< / div >
< div class = "input-group" >
< div class = "input-group-prepend" >
< div class = "input-group-text" >
< input type = "radio" aria-label = "Radio button for following text input" >
2014-07-13 04:12:02 -04:00
< / div >
< / div >
2017-12-22 18:29:49 -05:00
< input type = "text" class = "form-control" aria-label = "Text input with radio button" >
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2017-12-22 18:29:49 -05:00
## Multiple inputs
While multiple `<input>` s are supported visually, validation styles are only available for input groups with a single `<input>` .
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group" >
< div class = "input-group-prepend" >
< span class = "input-group-text" id = "" > First and last name< / span >
< / div >
< input type = "text" class = "form-control" >
< input type = "text" class = "form-control" >
2014-07-13 04:12:02 -04:00
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2014-03-16 22:03:53 -04:00
2016-02-08 02:48:47 -05:00
## Multiple addons
Multiple add-ons are supported and can be mixed with checkbox and radio input versions.
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< span class = "input-group-text" > $< / span >
< span class = "input-group-text" > 0.00< / span >
2016-02-08 02:48:47 -05:00
< / div >
2017-12-22 18:29:49 -05:00
< input type = "text" class = "form-control" aria-label = "Amount (to the nearest dollar)" >
< / div >
< div class = "input-group" >
< input type = "text" class = "form-control" aria-label = "Amount (to the nearest dollar)" >
< div class = "input-group-append" >
< span class = "input-group-text" > $< / span >
< span class = "input-group-text" > 0.00< / span >
2016-02-08 02:48:47 -05:00
< / div >
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2016-02-08 02:48:47 -05:00
2014-07-13 04:12:02 -04:00
## Button addons
2014-03-16 22:03:53 -04:00
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
2014-07-13 04:12:02 -04:00
< / div >
2017-12-22 18:29:49 -05:00
< input type = "text" class = "form-control" placeholder = "" aria-label = "" aria-describedby = "basic-addon1" >
< / div >
< div class = "input-group mb-3" >
< input type = "text" class = "form-control" placeholder = "Recipient's username" aria-label = "Recipient's username" aria-describedby = "basic-addon2" >
< div class = "input-group-append" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
2014-07-13 04:12:02 -04:00
< / div >
< / div >
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
< / div >
< input type = "text" class = "form-control" placeholder = "" aria-label = "" aria-describedby = "basic-addon1" >
< / div >
< div class = "input-group" >
< input type = "text" class = "form-control" placeholder = "Recipient's username" aria-label = "Recipient's username" aria-describedby = "basic-addon2" >
< div class = "input-group-append" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
2015-11-15 17:15:34 -05:00
< / div >
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2014-03-16 22:03:53 -04:00
2014-07-13 04:12:02 -04:00
## Buttons with dropdowns
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< button class = "btn btn-outline-secondary dropdown-toggle" type = "button" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" > Dropdown< / button >
< div class = "dropdown-menu" >
< a class = "dropdown-item" href = "#" > Action< / a >
< a class = "dropdown-item" href = "#" > Another action< / a >
< a class = "dropdown-item" href = "#" > Something else here< / a >
< div role = "separator" class = "dropdown-divider" > < / div >
< a class = "dropdown-item" href = "#" > Separated link< / a >
2014-07-13 04:12:02 -04:00
< / div >
< / div >
2017-12-22 18:29:49 -05:00
< input type = "text" class = "form-control" aria-label = "Text input with dropdown button" >
< / div >
< div class = "input-group" >
< input type = "text" class = "form-control" aria-label = "Text input with dropdown button" >
< div class = "input-group-append" >
< button class = "btn btn-outline-secondary dropdown-toggle" type = "button" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" > Dropdown< / button >
< div class = "dropdown-menu" >
< a class = "dropdown-item" href = "#" > Action< / a >
< a class = "dropdown-item" href = "#" > Another action< / a >
< a class = "dropdown-item" href = "#" > Something else here< / a >
< div role = "separator" class = "dropdown-divider" > < / div >
< a class = "dropdown-item" href = "#" > Separated link< / a >
2014-07-13 04:12:02 -04:00
< / div >
2014-03-16 22:03:53 -04:00
< / div >
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2014-03-16 22:03:53 -04:00
2014-07-13 04:12:02 -04:00
## Segmented buttons
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-12-22 18:29:49 -05:00
< div class = "input-group mb-3" >
< div class = "input-group-prepend" >
< button type = "button" class = "btn btn-outline-secondary" > Action< / button >
< button type = "button" class = "btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
< span class = "sr-only" > Toggle Dropdown< / span >
< / button >
< div class = "dropdown-menu" >
< a class = "dropdown-item" href = "#" > Action< / a >
< a class = "dropdown-item" href = "#" > Another action< / a >
< a class = "dropdown-item" href = "#" > Something else here< / a >
< div role = "separator" class = "dropdown-divider" > < / div >
< a class = "dropdown-item" href = "#" > Separated link< / a >
2014-07-13 04:12:02 -04:00
< / div >
< / div >
2017-12-22 18:29:49 -05:00
< input type = "text" class = "form-control" aria-label = "Text input with segmented dropdown button" >
< / div >
< div class = "input-group" >
< input type = "text" class = "form-control" aria-label = "Text input with segmented dropdown button" >
< div class = "input-group-append" >
< button type = "button" class = "btn btn-outline-secondary" > Action< / button >
< button type = "button" class = "btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
< span class = "sr-only" > Toggle Dropdown< / span >
< / button >
< div class = "dropdown-menu" >
< a class = "dropdown-item" href = "#" > Action< / a >
< a class = "dropdown-item" href = "#" > Another action< / a >
< a class = "dropdown-item" href = "#" > Something else here< / a >
< div role = "separator" class = "dropdown-divider" > < / div >
< a class = "dropdown-item" href = "#" > Separated link< / a >
2014-07-13 04:12:02 -04:00
< / div >
2014-03-16 22:03:53 -04:00
< / div >
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2015-03-09 10:48:51 -04:00
2017-10-19 16:04:39 -04:00
## Custom forms
Input groups include support for custom selects and custom file inputs. Browser default versions of these are not supported.
### Custom select
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-10-19 16:04:39 -04:00
< div class = "input-group mb-3" >
2017-12-22 18:29:49 -05:00
< div class = "input-group-prepend" >
< label class = "input-group-text" for = "inputGroupSelect01" > Options< / label >
< / div >
2017-10-22 17:04:46 -04:00
< select class = "custom-select" id = "inputGroupSelect01" >
2017-10-19 16:04:39 -04:00
< option selected > Choose...< / option >
< option value = "1" > One< / option >
< option value = "2" > Two< / option >
< option value = "3" > Three< / option >
< / select >
< / div >
< div class = "input-group mb-3" >
2017-10-22 17:04:46 -04:00
< select class = "custom-select" id = "inputGroupSelect02" >
2017-10-19 16:04:39 -04:00
< option selected > Choose...< / option >
< option value = "1" > One< / option >
< option value = "2" > Two< / option >
< option value = "3" > Three< / option >
< / select >
2017-12-22 18:29:49 -05:00
< div class = "input-group-append" >
< label class = "input-group-text" for = "inputGroupSelect02" > Options< / label >
< / div >
2017-10-19 16:04:39 -04:00
< / div >
< div class = "input-group mb-3" >
2017-12-22 18:29:49 -05:00
< div class = "input-group-prepend" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
< / div >
2017-10-22 17:04:46 -04:00
< select class = "custom-select" id = "inputGroupSelect03" >
2017-10-19 16:04:39 -04:00
< option selected > Choose...< / option >
< option value = "1" > One< / option >
< option value = "2" > Two< / option >
< option value = "3" > Three< / option >
< / select >
< / div >
< div class = "input-group" >
2017-10-22 17:04:46 -04:00
< select class = "custom-select" id = "inputGroupSelect04" >
2017-10-19 16:04:39 -04:00
< option selected > Choose...< / option >
< option value = "1" > One< / option >
< option value = "2" > Two< / option >
< option value = "3" > Three< / option >
< / select >
2017-12-22 18:29:49 -05:00
< div class = "input-group-append" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
< / div >
2017-10-19 16:04:39 -04:00
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2017-10-19 16:04:39 -04:00
### Custom file input
2018-03-14 11:44:38 -04:00
{% capture example %}
2017-10-19 16:04:39 -04:00
< div class = "input-group mb-3" >
2017-12-22 18:29:49 -05:00
< div class = "input-group-prepend" >
< span class = "input-group-text" > Upload< / span >
< / div >
2017-12-29 00:10:29 -05:00
< div class = "custom-file" >
< input type = "file" class = "custom-file-input" id = "inputGroupFile01" >
< label class = "custom-file-label" for = "inputGroupFile01" > Choose file< / label >
< / div >
2017-10-19 16:04:39 -04:00
< / div >
< div class = "input-group mb-3" >
2017-12-29 00:10:29 -05:00
< div class = "custom-file" >
< input type = "file" class = "custom-file-input" id = "inputGroupFile02" >
< label class = "custom-file-label" for = "inputGroupFile02" > Choose file< / label >
< / div >
2017-12-22 18:29:49 -05:00
< div class = "input-group-append" >
< span class = "input-group-text" id = "" > Upload< / span >
< / div >
2017-10-19 16:04:39 -04:00
< / div >
< div class = "input-group mb-3" >
2017-12-22 18:29:49 -05:00
< div class = "input-group-prepend" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
< / div >
2017-12-29 00:10:29 -05:00
< div class = "custom-file" >
< input type = "file" class = "custom-file-input" id = "inputGroupFile03" >
< label class = "custom-file-label" for = "inputGroupFile03" > Choose file< / label >
< / div >
2017-10-19 16:04:39 -04:00
< / div >
< div class = "input-group" >
2017-12-29 00:10:29 -05:00
< div class = "custom-file" >
< input type = "file" class = "custom-file-input" id = "inputGroupFile04" >
< label class = "custom-file-label" for = "inputGroupFile04" > Choose file< / label >
< / div >
2017-12-22 18:29:49 -05:00
< div class = "input-group-append" >
< button class = "btn btn-outline-secondary" type = "button" > Button< / button >
< / div >
2017-10-19 16:04:39 -04:00
< / div >
2018-03-14 11:44:38 -04:00
{% endcapture %}
{% include example.html content=example %}
2017-10-19 16:04:39 -04:00
2015-03-09 10:48:51 -04:00
## 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.
2017-03-30 17:45:36 -04:00
The exact technique to be used (`< label > ` elements hidden using the `.sr-only` class, or use of the `aria-label` and `aria-labelledby` attributes, possibly in combination with `aria-describedby` ) 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.