0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-02-11 08:54:23 +01:00

Add input group support for custom selects and custom files

Closes #24437, closes #22457
This commit is contained in:
Mark Otto 2017-10-19 13:04:39 -07:00 committed by Mark Otto
parent fc94de5b8b
commit 34a1e45400
3 changed files with 120 additions and 6 deletions

View File

@ -37,7 +37,7 @@
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="bd-versions"> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="bd-versions">
<a class="dropdown-item active" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/">Latest (4.x)</a> <a class="dropdown-item active" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/">Latest (4.x)</a>
<a class="dropdown-item" href="https://v4-alpha.getbootstrap.com/">v4 Alpha 6</a> <a class="dropdown-item" href="https://v4-alpha.getbootstrap.com/">v4 Alpha 6</a>
<a class="dropdown-item" href="https://getbootstrap.com/3.3/">v3.3.7</a> <a class="dropdown-item" href="https://getbootstrap.com/docs/3.3/">v3.3.7</a>
<a class="dropdown-item" href="https://getbootstrap.com/2.3.2/">v2.3.2</a> <a class="dropdown-item" href="https://getbootstrap.com/2.3.2/">v2.3.2</a>
</div> </div>
</li> </li>

View File

@ -106,7 +106,6 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
</div> </div>
{% endexample %} {% endexample %}
## Button addons ## Button addons
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. 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.
@ -230,6 +229,98 @@ Buttons in input groups must wrapped in a `.input-group-btn` for proper alignmen
</div> </div>
{% endexample %} {% endexample %}
## Custom forms
Input groups include support for custom selects and custom file inputs. Browser default versions of these are not supported.
### Custom select
{% example html %}
<div class="input-group mb-3">
<span class="input-group-addon" id="">Options</span>
<select class="custom-select" id="">
<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">
<select class="custom-select" id="">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<span class="input-group-addon" id="">Options</span>
</div>
<div class="input-group mb-3">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button">Button</button>
</span>
<select class="custom-select" id="">
<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">
<select class="custom-select" id="">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<span class="input-group-btn">
<button class="btn btn-secondary" type="button">Button</button>
</span>
</div>
{% endexample %}
### Custom file input
{% example html %}
<div class="input-group mb-3">
<span class="input-group-addon" id="">Upload</span>
<label class="custom-file">
<input type="file" id="file" class="custom-file-input" required>
<span class="custom-file-control"></span>
</label>
</div>
<div class="input-group mb-3">
<label class="custom-file">
<input type="file" id="file" class="custom-file-input" required>
<span class="custom-file-control"></span>
</label>
<span class="input-group-addon" id="">Upload</span>
</div>
<div class="input-group mb-3">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button">Button</button>
</span>
<label class="custom-file">
<input type="file" id="file" class="custom-file-input" required>
<span class="custom-file-control"></span>
</label>
</div>
<div class="input-group">
<label class="custom-file">
<input type="file" id="file" class="custom-file-input" required>
<span class="custom-file-control"></span>
</label>
<span class="input-group-btn">
<button class="btn btn-secondary" type="button">Button</button>
</span>
</div>
{% endexample %}
## Accessibility ## 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. 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.

View File

@ -30,20 +30,32 @@
.input-group-addon, .input-group-addon,
.input-group-btn, .input-group-btn,
.input-group .form-control { .input-group .form-control,
.input-group .custom-select,
.input-group .custom-file {
display: flex; display: flex;
align-items: center; align-items: center;
&:not(:first-child):not(:last-child) { &:not(:first-child):not(:last-child) {
@include border-radius(0); @include border-radius(0);
} }
} }
.input-group .custom-file {
display: flex;
align-items: center;
}
.input-group .custom-select,
.input-group .custom-file {
width: 100%;
}
.input-group-addon, .input-group-addon,
.input-group-btn { .input-group-btn {
white-space: nowrap; white-space: nowrap;
} }
// Sizing options // Sizing options
// //
// Remix the default form control sizing classes into new ones for easier // Remix the default form control sizing classes into new ones for easier
@ -103,6 +115,8 @@
// //
.input-group .form-control:not(:last-child), .input-group .form-control:not(:last-child),
.input-group .custom-select:not(:last-child),
.input-group .custom-file:not(:last-child) .custom-file-control::before,
.input-group-addon:not(:last-child), .input-group-addon:not(:last-child),
.input-group-btn:not(:last-child) > .btn, .input-group-btn:not(:last-child) > .btn,
.input-group-btn:not(:last-child) > .btn-group > .btn, .input-group-btn:not(:last-child) > .btn-group > .btn,
@ -111,10 +125,14 @@
.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { .input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn {
@include border-right-radius(0); @include border-right-radius(0);
} }
.input-group-addon:not(:last-child) { .input-group-addon:not(:last-child) {
border-right: 0; border-right: 0;
} }
.input-group .form-control:not(:first-child), .input-group .form-control:not(:first-child),
.input-group .custom-select:not(:first-child),
.input-group .custom-file:not(:first-child) .custom-file-control,
.input-group-addon:not(:first-child), .input-group-addon:not(:first-child),
.input-group-btn:not(:first-child) > .btn, .input-group-btn:not(:first-child) > .btn,
.input-group-btn:not(:first-child) > .btn-group > .btn, .input-group-btn:not(:first-child) > .btn-group > .btn,
@ -123,9 +141,14 @@
.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { .input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {
@include border-left-radius(0); @include border-left-radius(0);
} }
.form-control + .input-group-addon:not(:first-child) {
.form-control,
.custom-select,
.custom-file {
+ .input-group-addon:not(:first-child) {
border-left: 0; border-left: 0;
} }
}
// //
// Button input groups // Button input groups