+// We use mixins instead of placeholders as placeholders would combine the selectors when @extend-ed
+
+@mixin form-floating-active-input-styles() {
+ padding-top: $form-floating-input-padding-t;
+ padding-bottom: $form-floating-input-padding-b;
+}
+
+@mixin form-floating-active-label-styles() {
+ transform: $form-floating-label-transform;
+}
+
.form-floating {
position: relative;
&:focus,
&:not(:placeholder-shown) {
- padding-top: $form-floating-input-padding-t;
- padding-bottom: $form-floating-input-padding-b;
+ @include form-floating-active-input-styles();
}
+
// Duplicated because `:-webkit-autofill` invalidates other selectors when grouped
&:-webkit-autofill {
- padding-top: $form-floating-input-padding-t;
- padding-bottom: $form-floating-input-padding-b;
+ @include form-floating-active-input-styles();
}
}
> .form-select {
- padding-top: $form-floating-input-padding-t;
- padding-bottom: $form-floating-input-padding-b;
+ @include form-floating-active-input-styles();
padding-left: $form-floating-padding-x;
}
> .form-control-plaintext,
> .form-select {
~ label {
- transform: $form-floating-label-transform;
+ @include form-floating-active-label-styles();
}
}
// Duplicated because `:-webkit-autofill` invalidates other selectors when grouped
> .form-control:-webkit-autofill {
~ label {
- transform: $form-floating-label-transform;
+ @include form-floating-active-label-styles();
}
}
> textarea:focus,
color: $form-floating-label-disabled-color;
}
}
+
+// Todo in v6: Consider combining this with the .form-control-plaintext rules to reduce some CSS?
+.form-floating-always {
+ > .form-control {
+ @include form-floating-active-input-styles();
+
+ &::placeholder {
+ color: $input-color;
+ }
+ &:focus::placeholder {
+ color: $input-placeholder-color;
+ }
+ }
+
+ > label {
+ @include form-floating-active-label-styles();
+ }
+}
</div>
</div>`} />
+## Always floating
+
+Make any `.form-control` always use a floating label with visible placeholder with the `.form-floating-always` modifier class. Visible placeholders use the default input `color` and lighten to the placeholder color on focus. This matches them with other floating labels built with plaintext inputs and selects.
+
+<Example code={`<div class="form-floating form-floating-always mb-3">
+ <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
+ <label for="floatingInput">Email address</label>
+ </div>
+ <div class="form-floating form-floating-always">
+ <input type="password" class="form-control" id="floatingPassword" placeholder="••••••••">
+ <label for="floatingPassword">Password</label>
+ </div>`} />
+
## Layout
When working with the Bootstrap grid system, be sure to place form elements within column classes.