// stylelint-disable selector-no-qualifying-type // // Base styles // .input-group { position: relative; display: flex; flex-wrap: wrap; // For form validation feedback align-items: stretch; width: 100%; .form-control, .custom-select, .custom-file { position: relative; // For focus state's z-index flex: 1 1 auto; // Add width 1% and flex-basis auto to ensure that button will not wrap out // the column. Applies to IE Edge+ and Firefox. Chrome does not require this. width: 1%; margin-bottom: 0; // Bring the "active" form control to the top of surrounding elements &:focus { z-index: 3; } + .form-control { margin-left: -$input-border-width; } } .form-control, .custom-select { &:not(:first-child):not(:last-of-type) { @include border-radius(0); } &:first-child { @include border-right-radius(0); } &:last-of-type:not(:first-child) { @include border-left-radius(0); } } // Custom file inputs have more complex markup, thus requiring different // border-radius overrides. .custom-file { display: flex; align-items: center; width: 100%; .custom-file-input { width: 100%; min-width: 0; } &:not(:first-child):not(:last-of-type) .custom-file-control, &:not(:first-child):not(:last-of-type) .custom-file-control::before { @include border-radius(0); } &:first-child .custom-file-control, &:first-child .custom-file-control::before { @include border-right-radius(0); } &:last-of-type:not(:first-child) .custom-file-control, &:last-of-type:not(:first-child) .custom-file-control::before { @include border-left-radius(0); } } .custom-select { width: 100%; } } // 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. .input-group-prepend, .input-group-append { display: flex; align-items: center; // 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 // as our inputs. .btn { position: relative; z-index: 2; } .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 // // Serves as a catch-all element for any text or radio/checkbox input you wish // to prepend or append to an input. .input-group-text { padding: $input-padding-y $input-padding-x; margin-bottom: 0; // Allow use of