2014-07-13 15:59:31 +08:00
---
2015-08-15 13:45:55 +08:00
layout: docs
2014-07-13 15:59:31 +08:00
title: Input group
2016-10-03 09:19:47 +08:00
description: Extend form controls with the input group.
2015-08-06 08:47:45 +08:00
group: components
2014-07-13 15:59:31 +08:00
---
2015-03-09 22:46:32 +08:00
Easily extend form controls by adding text, buttons, or button groups on either side of textual `<input>` s.
2014-03-17 10:03:53 +08:00
2015-05-29 16:58:52 +08:00
## Contents
* Will be replaced with the ToC, excluding the "Contents" header
{:toc}
2014-07-13 16:12:02 +08:00
## Basic example
2014-03-17 10:03:53 +08:00
2015-12-09 16:40:32 +08: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.**
2014-07-13 16:12:02 +08:00
{% example html %}
2014-03-17 10:03:53 +08:00
< div class = "input-group" >
2015-01-04 12:08:58 +08:00
< span class = "input-group-addon" id = "basic-addon1" > @< / span >
< input type = "text" class = "form-control" placeholder = "Username" aria-describedby = "basic-addon1" >
2014-03-17 10:03:53 +08:00
< / div >
2014-07-13 16:12:02 +08:00
< br >
2014-03-17 10:03:53 +08:00
< div class = "input-group" >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" placeholder = "Recipient's username" aria-describedby = "basic-addon2" >
2015-12-07 04:02:54 +08:00
< span class = "input-group-addon" id = "basic-addon2" > @example.com< / span >
2014-03-17 10:03:53 +08:00
< / div >
2014-07-13 16:12:02 +08:00
< br >
2015-08-05 13:29:45 +08:00
< label for = "basic-url" > Your vanity URL< / label >
< div class = "input-group" >
< span class = "input-group-addon" id = "basic-addon3" > https://example.com/users/< / span >
< input type = "text" class = "form-control" id = "basic-url" aria-describedby = "basic-addon3" >
< / div >
< br >
2014-03-17 10:03:53 +08:00
< div class = "input-group" >
< span class = "input-group-addon" > $< / span >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" aria-label = "Amount (to the nearest dollar)" >
2014-03-17 10:03:53 +08:00
< span class = "input-group-addon" > .00< / span >
< / div >
2016-02-08 15:48:47 +08:00
< br >
< div class = "input-group" >
< span class = "input-group-addon" > $< / span >
< span class = "input-group-addon" > 0.00< / span >
< input type = "text" class = "form-control" aria-label = "Amount (to the nearest dollar)" >
< / div >
2014-07-13 16:12:02 +08:00
{% endexample %}
2014-03-17 10:03:53 +08:00
2014-07-13 16:12:02 +08: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.
{% example html %}
2014-03-17 10:03:53 +08:00
< div class = "input-group input-group-lg" >
2015-01-04 12:08:58 +08:00
< span class = "input-group-addon" id = "sizing-addon1" > @< / span >
< input type = "text" class = "form-control" placeholder = "Username" aria-describedby = "sizing-addon1" >
2014-03-17 10:03:53 +08:00
< / div >
2014-07-13 16:12:02 +08:00
< br >
2014-03-17 10:03:53 +08:00
< div class = "input-group" >
2015-01-04 12:08:58 +08:00
< span class = "input-group-addon" id = "sizing-addon2" > @< / span >
< input type = "text" class = "form-control" placeholder = "Username" aria-describedby = "sizing-addon2" >
2014-03-17 10:03:53 +08:00
< / div >
2014-07-13 16:12:02 +08:00
{% endexample %}
## Checkboxes and radio addons
2014-03-17 10:03:53 +08:00
2014-07-13 16:12:02 +08:00
Place any checkbox or radio option within an input group's addon instead of text.
2014-03-17 10:03:53 +08:00
2014-07-13 16:12:02 +08:00
{% example html %}
2014-03-17 10:03:53 +08:00
< div class = "row" >
< div class = "col-lg-6" >
< div class = "input-group" >
< span class = "input-group-addon" >
2015-01-04 12:08:58 +08:00
< input type = "checkbox" aria-label = "Checkbox for following text input" >
2014-03-17 10:03:53 +08:00
< / span >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" aria-label = "Text input with checkbox" >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
2014-03-17 10:03:53 +08:00
< div class = "col-lg-6" >
< div class = "input-group" >
< span class = "input-group-addon" >
2015-01-04 12:08:58 +08:00
< input type = "radio" aria-label = "Radio button for following text input" >
2014-03-17 10:03:53 +08:00
< / span >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" aria-label = "Text input with radio button" >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
< / div >
{% endexample %}
2014-03-17 10:03:53 +08:00
2016-02-08 15:48:47 +08:00
## Multiple addons
Multiple add-ons are supported and can be mixed with checkbox and radio input versions.
{% example html %}
< div class = "row" >
< div class = "col-lg-6" >
< div class = "input-group" >
< span class = "input-group-addon" >
< input type = "checkbox" aria-label = "Checkbox for following text input" >
< / span >
< span class = "input-group-addon" > $< / span >
< input type = "text" class = "form-control" aria-label = "Text input with checkbox" >
< / div >
< / div >
< div class = "col-lg-6" >
< div class = "input-group" >
< span class = "input-group-addon" > $< / span >
< span class = "input-group-addon" > 0.00< / span >
< input type = "text" class = "form-control" aria-label = "Text input with radio button" >
< / div >
< / div >
< / div >
{% endexample %}
2014-07-13 16:12:02 +08:00
## Button addons
2014-03-17 10:03:53 +08:00
2016-11-24 03:35:41 +08:00
Buttons in input groups must wrapped in a `.input-group-btn` for proper alignment and sizing. This is required due to default browser styles that cannot be overridden.
2014-07-13 16:12:02 +08:00
{% example html %}
2014-03-17 10:03:53 +08:00
< div class = "row" >
< div class = "col-lg-6" >
< div class = "input-group" >
< span class = "input-group-btn" >
2014-07-09 08:14:14 +08:00
< button class = "btn btn-secondary" type = "button" > Go!< / button >
2014-03-17 10:03:53 +08:00
< / span >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" placeholder = "Search for..." >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
2014-03-17 10:03:53 +08:00
< div class = "col-lg-6" >
< div class = "input-group" >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" placeholder = "Search for..." >
2014-03-17 10:03:53 +08:00
< span class = "input-group-btn" >
2014-07-09 08:14:14 +08:00
< button class = "btn btn-secondary" type = "button" > Go!< / button >
2014-03-17 10:03:53 +08:00
< / span >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
< / div >
2015-11-16 06:15:34 +08:00
< br >
< div class = "row" >
< div class = "col-lg-offset-3 col-lg-6" >
< div class = "input-group" >
< span class = "input-group-btn" >
< button class = "btn btn-secondary" type = "button" > Hate it< / button >
< / span >
< input type = "text" class = "form-control" placeholder = "Product name" >
< span class = "input-group-btn" >
< button class = "btn btn-secondary" type = "button" > Love it< / button >
< / span >
< / div >
< / div >
< / div >
2014-07-13 16:12:02 +08:00
{% endexample %}
2014-03-17 10:03:53 +08:00
2014-07-13 16:12:02 +08:00
## Buttons with dropdowns
{% example html %}
2014-03-17 10:03:53 +08:00
< div class = "row" >
< div class = "col-lg-6" >
< div class = "input-group" >
< div class = "input-group-btn" >
2015-06-19 14:56:43 +08:00
< button type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
Action
< / button >
2015-08-21 06:17:35 +08:00
< 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 >
< / div >
2014-07-13 16:12:02 +08:00
< / div >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" aria-label = "Text input with dropdown button" >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
2014-03-17 10:03:53 +08:00
< div class = "col-lg-6" >
< div class = "input-group" >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" aria-label = "Text input with dropdown button" >
2014-03-17 10:03:53 +08:00
< div class = "input-group-btn" >
2015-06-19 14:56:43 +08:00
< button type = "button" class = "btn btn-secondary dropdown-toggle" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
Action
< / button >
2015-08-21 06:17:35 +08:00
< div class = "dropdown-menu dropdown-menu-right" >
< 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 >
< / div >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
2014-03-17 10:03:53 +08:00
< / div >
< / div >
2014-07-13 16:12:02 +08:00
{% endexample %}
2014-03-17 10:03:53 +08:00
2014-07-13 16:12:02 +08:00
## Segmented buttons
{% example html %}
< div class = "row" >
< div class = "col-lg-6" >
< div class = "input-group" >
< div class = "input-group-btn" >
2015-01-04 12:08:58 +08:00
< button type = "button" class = "btn btn-secondary" > Action< / button >
2016-09-05 08:50:39 +08:00
< button type = "button" class = "btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
2014-07-13 16:12:02 +08:00
< span class = "sr-only" > Toggle Dropdown< / span >
< / button >
2015-08-21 06:17:35 +08:00
< 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 >
< / div >
2014-07-13 16:12:02 +08:00
< / div >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" aria-label = "Text input with segmented button dropdown" >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
< div class = "col-lg-6" >
< div class = "input-group" >
2015-01-04 12:08:58 +08:00
< input type = "text" class = "form-control" aria-label = "Text input with segmented button dropdown" >
2014-07-13 16:12:02 +08:00
< div class = "input-group-btn" >
2015-01-04 12:08:58 +08:00
< button type = "button" class = "btn btn-secondary" > Action< / button >
2016-09-05 08:50:39 +08:00
< button type = "button" class = "btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" >
2014-07-13 16:12:02 +08:00
< span class = "sr-only" > Toggle Dropdown< / span >
< / button >
2015-08-21 06:17:35 +08:00
< div class = "dropdown-menu dropdown-menu-right" >
< 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 >
< / div >
2014-07-13 16:12:02 +08:00
< / div >
< / div >
2014-03-17 10:03:53 +08:00
< / div >
< / div >
2014-07-13 16:12:02 +08:00
{% endexample %}
2015-03-09 22:48:51 +08: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.
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.