Layout von Websiten mit Bootstrap und Foundation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

_input-group.scss 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. // stylelint-disable selector-no-qualifying-type
  2. //
  3. // Base styles
  4. //
  5. .input-group {
  6. position: relative;
  7. display: flex;
  8. flex-wrap: wrap; // For form validation feedback
  9. align-items: stretch;
  10. width: 100%;
  11. > .form-control,
  12. > .form-control-plaintext,
  13. > .custom-select,
  14. > .custom-file {
  15. position: relative; // For focus state's z-index
  16. flex: 1 1 auto;
  17. width: 1%;
  18. min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size
  19. margin-bottom: 0;
  20. + .form-control,
  21. + .custom-select,
  22. + .custom-file {
  23. margin-left: -$input-border-width;
  24. }
  25. }
  26. // Bring the "active" form control to the top of surrounding elements
  27. > .form-control:focus,
  28. > .custom-select:focus,
  29. > .custom-file .custom-file-input:focus ~ .custom-file-label {
  30. z-index: 3;
  31. }
  32. // Bring the custom file input above the label
  33. > .custom-file .custom-file-input:focus {
  34. z-index: 4;
  35. }
  36. > .form-control,
  37. > .custom-select {
  38. &:not(:last-child) { @include border-right-radius(0); }
  39. &:not(:first-child) { @include border-left-radius(0); }
  40. }
  41. // Custom file inputs have more complex markup, thus requiring different
  42. // border-radius overrides.
  43. > .custom-file {
  44. display: flex;
  45. align-items: center;
  46. &:not(:last-child) .custom-file-label,
  47. &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
  48. &:not(:first-child) .custom-file-label { @include border-left-radius(0); }
  49. }
  50. }
  51. // Prepend and append
  52. //
  53. // While it requires one extra layer of HTML for each, dedicated prepend and
  54. // append elements allow us to 1) be less clever, 2) simplify our selectors, and
  55. // 3) support HTML5 form validation.
  56. .input-group-prepend,
  57. .input-group-append {
  58. display: flex;
  59. // Ensure buttons are always above inputs for more visually pleasing borders.
  60. // This isn't needed for `.input-group-text` since it shares the same border-color
  61. // as our inputs.
  62. .btn {
  63. position: relative;
  64. z-index: 2;
  65. &:focus {
  66. z-index: 3;
  67. }
  68. }
  69. .btn + .btn,
  70. .btn + .input-group-text,
  71. .input-group-text + .input-group-text,
  72. .input-group-text + .btn {
  73. margin-left: -$input-border-width;
  74. }
  75. }
  76. .input-group-prepend { margin-right: -$input-border-width; }
  77. .input-group-append { margin-left: -$input-border-width; }
  78. // Textual addons
  79. //
  80. // Serves as a catch-all element for any text or radio/checkbox input you wish
  81. // to prepend or append to an input.
  82. .input-group-text {
  83. display: flex;
  84. align-items: center;
  85. padding: $input-padding-y $input-padding-x;
  86. margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom
  87. @include font-size($input-font-size); // Match inputs
  88. font-weight: $font-weight-normal;
  89. line-height: $input-line-height;
  90. color: $input-group-addon-color;
  91. text-align: center;
  92. white-space: nowrap;
  93. background-color: $input-group-addon-bg;
  94. border: $input-border-width solid $input-group-addon-border-color;
  95. @include border-radius($input-border-radius);
  96. // Nuke default margins from checkboxes and radios to vertically center within.
  97. input[type="radio"],
  98. input[type="checkbox"] {
  99. margin-top: 0;
  100. }
  101. }
  102. // Sizing
  103. //
  104. // Remix the default form control sizing classes into new ones for easier
  105. // manipulation.
  106. .input-group-lg > .form-control:not(textarea),
  107. .input-group-lg > .custom-select {
  108. height: $input-height-lg;
  109. }
  110. .input-group-lg > .form-control,
  111. .input-group-lg > .custom-select,
  112. .input-group-lg > .input-group-prepend > .input-group-text,
  113. .input-group-lg > .input-group-append > .input-group-text,
  114. .input-group-lg > .input-group-prepend > .btn,
  115. .input-group-lg > .input-group-append > .btn {
  116. padding: $input-padding-y-lg $input-padding-x-lg;
  117. @include font-size($input-font-size-lg);
  118. line-height: $input-line-height-lg;
  119. @include border-radius($input-border-radius-lg);
  120. }
  121. .input-group-sm > .form-control:not(textarea),
  122. .input-group-sm > .custom-select {
  123. height: $input-height-sm;
  124. }
  125. .input-group-sm > .form-control,
  126. .input-group-sm > .custom-select,
  127. .input-group-sm > .input-group-prepend > .input-group-text,
  128. .input-group-sm > .input-group-append > .input-group-text,
  129. .input-group-sm > .input-group-prepend > .btn,
  130. .input-group-sm > .input-group-append > .btn {
  131. padding: $input-padding-y-sm $input-padding-x-sm;
  132. @include font-size($input-font-size-sm);
  133. line-height: $input-line-height-sm;
  134. @include border-radius($input-border-radius-sm);
  135. }
  136. .input-group-lg > .custom-select,
  137. .input-group-sm > .custom-select {
  138. padding-right: $custom-select-padding-x + $custom-select-indicator-padding;
  139. }
  140. // Prepend and append rounded corners
  141. //
  142. // These rulesets must come after the sizing ones to properly override sm and lg
  143. // border-radius values when extending. They're more specific than we'd like
  144. // with the `.input-group >` part, but without it, we cannot override the sizing.
  145. .input-group > .input-group-prepend > .btn,
  146. .input-group > .input-group-prepend > .input-group-text,
  147. .input-group > .input-group-append:not(:last-child) > .btn,
  148. .input-group > .input-group-append:not(:last-child) > .input-group-text,
  149. .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
  150. .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
  151. @include border-right-radius(0);
  152. }
  153. .input-group > .input-group-append > .btn,
  154. .input-group > .input-group-append > .input-group-text,
  155. .input-group > .input-group-prepend:not(:first-child) > .btn,
  156. .input-group > .input-group-prepend:not(:first-child) > .input-group-text,
  157. .input-group > .input-group-prepend:first-child > .btn:not(:first-child),
  158. .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
  159. @include border-left-radius(0);
  160. }