-// stylelint-disable selector-no-qualifying-type
-
//
// Base styles
//
flex: 1 1 auto;
width: 1%;
min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size
- margin-bottom: 0;
-
- + .form-control,
- + .form-select,
- + .form-file {
- margin-left: -$input-border-width;
- }
}
// Bring the "active" form control to the top of surrounding elements
}
// Bring the custom file input above the label
- > .form-file .form-file-input:focus {
- z-index: 4;
- }
-
- > .form-control,
- > .form-select {
- &:not(:last-child) { @include border-right-radius(0); }
- &:not(:first-child) { @include border-left-radius(0); }
- }
-
- // Custom file inputs have more complex markup, thus requiring different
- // border-radius overrides.
> .form-file {
- display: flex;
- align-items: center;
-
- &:not(:last-child) .form-file-label { @include border-right-radius(0); }
- &:not(:first-child) .form-file-label { @include border-left-radius(0); }
- }
-}
-
+ > .form-file-input:focus {
+ z-index: 4;
+ }
-// Prepend and append
-//
-// While it requires one extra layer of HTML for each, dedicated prepend and
-// append elements allow us to 1) be less clever, 2) simplify our selectors, and
-// 3) support HTML5 form validation.
+ &:not(:last-child) > .form-file-label {
+ @include border-right-radius(0);
+ }
-.input-group-prepend,
-.input-group-append {
- display: flex;
+ &:not(:first-child) > .form-file-label {
+ @include border-left-radius(0);
+ }
+ }
// Ensure buttons are always above inputs for more visually pleasing borders.
// This isn't needed for `.input-group-text` since it shares the same border-color
z-index: 3;
}
}
-
- .btn + .btn,
- .btn + .input-group-text,
- .input-group-text + .input-group-text,
- .input-group-text + .btn {
- margin-left: -$input-border-width;
- }
}
-.input-group-prepend { margin-right: -$input-border-width; }
-.input-group-append { margin-left: -$input-border-width; }
-
// Textual addons
//
.input-group-lg > .form-control,
.input-group-lg > .form-select,
-.input-group-lg > .input-group-prepend > .input-group-text,
-.input-group-lg > .input-group-append > .input-group-text,
-.input-group-lg > .input-group-prepend > .btn,
-.input-group-lg > .input-group-append > .btn {
+.input-group-lg > .input-group-text,
+.input-group-lg > .btn {
padding: $input-padding-y-lg $input-padding-x-lg;
@include font-size($input-font-size-lg);
@include border-radius($input-border-radius-lg);
.input-group-sm > .form-control,
.input-group-sm > .form-select,
-.input-group-sm > .input-group-prepend > .input-group-text,
-.input-group-sm > .input-group-append > .input-group-text,
-.input-group-sm > .input-group-prepend > .btn,
-.input-group-sm > .input-group-append > .btn {
+.input-group-sm > .input-group-text,
+.input-group-sm > .btn {
padding: $input-padding-y-sm $input-padding-x-sm;
@include font-size($input-font-size-sm);
@include border-radius($input-border-radius-sm);
}
-// Prepend and append rounded corners
+// Rounded corners
//
// These rulesets must come after the sizing ones to properly override sm and lg
// border-radius values when extending. They're more specific than we'd like
// with the `.input-group >` part, but without it, we cannot override the sizing.
+// stylelint-disable-next-line no-duplicate-selectors
+.input-group {
+ > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
+ > .dropdown-toggle:nth-last-child(n + 3) {
+ @include border-right-radius(0);
+ }
-.input-group > .input-group-prepend > .btn,
-.input-group > .input-group-prepend > .input-group-text,
-.input-group > .input-group-append:not(:last-child) > .btn,
-.input-group > .input-group-append:not(:last-child) > .input-group-text,
-.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
- @include border-right-radius(0);
-}
-
-.input-group > .input-group-append > .btn,
-.input-group > .input-group-append > .input-group-text,
-.input-group > .input-group-prepend:not(:first-child) > .btn,
-.input-group > .input-group-prepend:not(:first-child) > .input-group-text,
-.input-group > .input-group-prepend:first-child > .btn:not(:first-child),
-.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
- @include border-left-radius(0);
+ > :not(:first-child):not(.dropdown-menu) {
+ margin-left: -$input-border-width;
+ @include border-left-radius(0);
+ }
}
{{< example >}}
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <span class="input-group-text" id="basic-addon1">@</span>
- </div>
+ <span class="input-group-text" id="basic-addon1">@</span>
<input type="text" class="form-control" placeholder="Username" aria-label="Username" 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">
- <span class="input-group-text" id="basic-addon2">@example.com</span>
- </div>
+ <span class="input-group-text" id="basic-addon2">@example.com</span>
</div>
<label for="basic-url">Your vanity URL</label>
<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>
+ <span class="input-group-text" id="basic-addon3">https://example.com/users/</span>
<input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
</div>
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <span class="input-group-text">$</span>
- </div>
+ <span class="input-group-text">$</span>
<input type="text" class="form-control" aria-label="Amount (to the nearest dollar)">
- <div class="input-group-append">
- <span class="input-group-text">.00</span>
- </div>
+ <span class="input-group-text">.00</span>
</div>
<div class="input-group">
- <div class="input-group-prepend">
- <span class="input-group-text">With textarea</span>
- </div>
+ <span class="input-group-text">With textarea</span>
<textarea class="form-control" aria-label="With textarea"></textarea>
</div>
{{< /example >}}
{{< example >}}
<div class="input-group flex-nowrap">
- <div class="input-group-prepend">
- <span class="input-group-text" id="addon-wrapping">@</span>
- </div>
+ <span class="input-group-text" id="addon-wrapping">@</span>
<input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="addon-wrapping">
</div>
{{< /example >}}
{{< example >}}
<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>
+ <span class="input-group-text" id="inputGroup-sizing-sm">Small</span>
<input type="text" class="form-control" aria-label="Sizing example input" 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>
+ <span class="input-group-text" id="inputGroup-sizing-default">Default</span>
<input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group input-group-lg">
- <div class="input-group-prepend">
- <span class="input-group-text" id="inputGroup-sizing-lg">Large</span>
- </div>
+ <span class="input-group-text" id="inputGroup-sizing-lg">Large</span>
<input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-lg">
</div>
{{< /example >}}
{{< example >}}
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <div class="input-group-text">
- <input class="form-check-input" type="checkbox" value="" aria-label="Checkbox for following text input">
- </div>
+ <div class="input-group-text">
+ <input class="form-check-input" type="checkbox" value="" aria-label="Checkbox for following text input">
</div>
<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 class="form-check-input" type="radio" value="" aria-label="Radio button for following text input">
- </div>
+ <div class="input-group-text">
+ <input class="form-check-input" type="radio" value="" aria-label="Radio button for following text input">
</div>
<input type="text" class="form-control" aria-label="Text input with radio button">
</div>
{{< example >}}
<div class="input-group">
- <div class="input-group-prepend">
- <span class="input-group-text">First and last name</span>
- </div>
+ <span class="input-group-text">First and last name</span>
<input type="text" aria-label="First name" class="form-control">
<input type="text" aria-label="Last name" class="form-control">
</div>
{{< example >}}
<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>
- </div>
+ <span class="input-group-text">$</span>
+ <span class="input-group-text">0.00</span>
<input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
</div>
<div class="input-group">
<input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
- <div class="input-group-append">
- <span class="input-group-text">$</span>
- <span class="input-group-text">0.00</span>
- </div>
+ <span class="input-group-text">$</span>
+ <span class="input-group-text">0.00</span>
</div>
{{< /example >}}
{{< example >}}
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <button class="btn btn-outline-secondary" type="button" id="button-addon1">Button</button>
- </div>
+ <button class="btn btn-outline-secondary" type="button" id="button-addon1">Button</button>
<input type="text" class="form-control" placeholder="" aria-label="Example text with button addon" aria-describedby="button-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="button-addon2">
- <div class="input-group-append">
- <button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
- </div>
+ <button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
</div>
<div class="input-group mb-3">
- <div class="input-group-prepend" id="button-addon3">
- <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="Example text with two button addons" aria-describedby="button-addon3">
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+ <input type="text" class="form-control" placeholder="" aria-label="Example text with two button addons">
</div>
<div class="input-group">
- <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username with two button addons" aria-describedby="button-addon4">
- <div class="input-group-append" id="button-addon4">
- <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="Recipient's username" aria-label="Recipient's username with two button addons">
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+ <button class="btn btn-outline-secondary" type="button">Button</button>
</div>
{{< /example >}}
{{< example >}}
<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-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>
- </div>
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" 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>
</div>
<input type="text" class="form-control" aria-label="Text input with dropdown button">
</div>
-<div class="input-group">
+<div class="input-group mb-3">
<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-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>
- </div>
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">Dropdown</button>
+ <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>
+</div>
+
+<div class="input-group">
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">Dropdown</button>
+ <div class="dropdown-menu">
+ <a class="dropdown-item" href="#">Action before</a>
+ <a class="dropdown-item" href="#">Another action before</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>
+ <input type="text" class="form-control" aria-label="Text input with 2 dropdown buttons">
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">Dropdown</button>
+ <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>
</div>
{{< /example >}}
{{< example >}}
<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-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>
- </div>
+ <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-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>
</div>
<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-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>
- </div>
+ <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-expanded="false">
+ <span class="sr-only">Toggle Dropdown</span>
+ </button>
+ <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>
</div>
{{< /example >}}
{{< example >}}
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <label class="input-group-text" for="inputGroupSelect01">Options</label>
- </div>
+ <label class="input-group-text" for="inputGroupSelect01">Options</label>
<select class="form-select" id="inputGroupSelect01">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
- <div class="input-group-append">
- <label class="input-group-text" for="inputGroupSelect02">Options</label>
- </div>
+ <label class="input-group-text" for="inputGroupSelect02">Options</label>
</div>
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <button class="btn btn-outline-secondary" type="button">Button</button>
- </div>
+ <button class="btn btn-outline-secondary" type="button">Button</button>
<select class="form-select" id="inputGroupSelect03" aria-label="Example select with button addon">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
- <div class="input-group-append">
- <button class="btn btn-outline-secondary" type="button">Button</button>
- </div>
+ <button class="btn btn-outline-secondary" type="button">Button</button>
</div>
{{< /example >}}
{{< example >}}
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <span class="input-group-text" id="inputGroupFileAddon01">Upload</span>
- </div>
+ <span class="input-group-text" id="inputGroupFileAddon01">Upload</span>
<div class="form-file">
<input type="file" class="form-file-input" id="inputGroupFile01" aria-describedby="inputGroupFileAddon01">
<label class="form-file-label" for="inputGroupFile01">
<span class="form-file-button">Browse</span>
</label>
</div>
- <div class="input-group-append">
- <span class="input-group-text" id="inputGroupFileAddon02">Upload</span>
- </div>
+ <span class="input-group-text" id="inputGroupFileAddon02">Upload</span>
</div>
<div class="input-group mb-3">
- <div class="input-group-prepend">
- <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon03">Button</button>
- </div>
+ <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon03">Button</button>
<div class="form-file">
<input type="file" class="form-file-input" id="inputGroupFile03" aria-describedby="inputGroupFileAddon03">
<label class="form-file-label" for="inputGroupFile03">
<span class="form-file-button">Browse</span>
</label>
</div>
- <div class="input-group-append">
- <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
- </div>
+ <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
</div>
{{< /example >}}