// must be broken out for reuse - webkit selector breaks firefox @mixin label-static($label-top, $static-font-size, $static-line-height) { label.control-label { top: $label-top; left: 0; // must repeat because the selector above is more specific than the general label sizing //font-size: $static-font-size; //line-height: $static-line-height; } } @mixin label-size-variant($placeholder-font-size, $vertical-padding, $line-height, $static-font-size, $static-line-height, $help-block-font-size) { //.form-control { // @include material-placeholder { // font-size: $placeholder-font-size; // line-height: $line-height; // font-weight: 400; // } // // // margin-bottom must be specified to give help-block vertical space. // // $see also form-group padding-bottom (and size variants) re: collapsible margins. These work together. // margin-bottom: $vertical-padding; //} // generic labels used anywhere in the form (not control-label) .checkbox label, .radio label, label { //font-size: $placeholder-font-size; //line-height: $line-height; //font-weight: 400; } // smaller focused or static size label.control-label { //font-size: $static-font-size; //line-height: $static-line-height; //margin: 16px 0 0 0; // std and lg } .help-block { //margin-top: 0; // allow the input margin to set-off the top of the help-block //font-size: $help-block-font-size; } } @mixin mdb-form-color($label-color, $border-color) { // Use the BS provided mixin for the bulk of the color @include form-control-validation($label-color); // Set the border and box shadow on specific inputs to match .form-control { border-color: $border-color; } // Set validation states also for addons .input-group-addon { border-color: $border-color; } label { color: $label-color; } } @mixin mdb-form-control-validation($name, $color) { // e.g. has-danger &.has-#{$name} { // override BS and keep the border-color normal/grey so that focus animation draws attention .form-control { border-color: $input-border-color; } &.is-focused { // on focus set borders and labels to the validation color @include mdb-form-color($color, $color); // underline animation color on focus .mdb-form-control-decorator { &::before, &::after { @include gradient-vertical($color, $input-border-color); } } } } } @mixin mdb-form-group-size-variant($parent, $placeholder-font-size, $label-top-margin, $vertical-padding, $line-height, $label-as-placeholder-shim) { $static-font-size: ceil(($mdb-label-static-size-ratio * $placeholder-font-size)) !default; $static-line-height: ($mdb-label-static-size-ratio * $line-height) !default; $label-as-placeholder-top: -1 * ($vertical-padding + $label-as-placeholder-shim) !default; $label-top: $label-as-placeholder-top - ($placeholder-font-size + $vertical-padding) !default; $help-block-font-size: ceil(($mdb-help-block-size-ratio * $placeholder-font-size)) !default; $help-block-line-height: ($mdb-help-block-size-ratio * $line-height) !default; // this is outside a form-group @if not $parent { @include label-size-variant($placeholder-font-size, $vertical-padding, $line-height, $static-font-size, $static-line-height, $help-block-font-size); } @else { // this is inside a form-group, may be .mdb-form-group.mdb-form-group-sm or .mdb-form-group.mdb-form-group-lg #{$parent} { @include label-size-variant($placeholder-font-size, $vertical-padding, $line-height, $static-font-size, $static-line-height, $help-block-font-size); // form-group padding-bottom // upon collapsing margins, the largest margin is honored which collapses the form-control margin-bottom, // so the form-control margin-bottom must also be expressed as form-group padding //padding-bottom: $vertical-padding; // FIXME: need to avoid top margin http://v4-alpha.getbootstrap.com/content/reboot/#approach // form-group margin-top must be large enough for the label and the label's top padding since label is absolutely positioned //margin: ($label-top-margin + $static-font-size) 0 0 0; // old, try padding below //padding-top: ($label-top-margin + $static-font-size); // larger labels as placeholders &.label-floating, &.label-placeholder { label.control-label { top: $label-as-placeholder-top; // place the floating label to look like a placeholder with input padding //font-size: $placeholder-font-size; //line-height: $line-height; } } // static, focused, or autofill floating labels &.label-static, &.label-floating.is-focused, &.label-floating:not(.is-empty) { @include label-static($label-top, $static-font-size, $static-line-height); } // #559 Fix for webkit/chrome autofill - rule must be separate because it breaks firefox otherwise #731 &.label-floating input.form-control:-webkit-autofill ~ label.control-label { @include label-static($label-top, $static-font-size, $static-line-height); } } } } @include mdb-form-color($mdb-label-color, $input-border-color); @include mdb-form-control-validation(warning, $brand-warning); @include mdb-form-control-validation(danger, $brand-danger); @include mdb-form-control-validation(success, $brand-success); @include mdb-form-control-validation(info, $brand-info); // ----- // Inputs // // Reference http://www.google.com/design/spec/components/text-fields.html // MDL implementation: http://www.getmdl.io/components/index.html#textfields-section .form-control { // The border bottom should be static in all states, the decorator will be animated over this. &, &:focus, .mdb-form-group.is-focused & { border: 0; border-bottom: $input-border-width solid $input-border-color; } &[disabled], fieldset[disabled] & { border-bottom: $input-border-width dotted $input-border-color; } } // Focus underline animation ================================= .mdb-form-control-decorator { position: relative; top: (-1 * $input-border-width); // move the top up enough to overlay the border from the input display: block; &::before, &::after { position: absolute; width: 0; height: $input-border-width; content: ""; @include gradient-vertical($brand-primary, $input-border-color); transition: 0.3s ease all; // focused state - it transitions the width of each (before and after) to 50% creating the center out effect .form-control:focus ~ &, .mdb-form-group.is-focused .form-control ~ & { width: 50%; } } &::before { left: 50%; } &::after { right: 50%; } } // End: Focus underline animation ================================= // ----- // Labels with mdb-form-group signalled state // // Reference http://www.google.com/design/spec/components/text-fields.html // MDL implementation: http://www.getmdl.io/components/index.html#textfields-section //.variations(unquote(" label.control-label"), color, $mdb-input-placeholder-color); // default label color variations .mdb-form-group { position: relative; // ----- // Labels with form-group signalled state // // Reference http://www.google.com/design/spec/components/text-fields.html // MDL implementation: http://www.getmdl.io/components/index.html#textfields-section &.label-static, &.label-placeholder, &.label-floating { label.control-label { //position: absolute; //pointer-events: none; //transition: 0.3s ease all; } } // hint to browser for optimization // TODO: evaluate effectiveness - looking for community feedback &.label-floating label.control-label { //will-change: left, top, contents; } // hide label-placeholders when the field is not empty &.label-placeholder:not(.is-empty) { label.control-label { display: none; } } // Help blocks - position: absolute approach - uses no vertical space, text wrapping - not so good. .help-block { //position: absolute; // do not use position: absolute because width/wrapping isn't automatic and overflows occur //display: none; } // form-group is-focused display &.is-focused { label, label.control-label { color: $brand-primary; } &.label-placeholder { label, label.control-label { //color: $mdb-input-placeholder-color; } } //.help-block { // display: block; //} } //textarea { // resize: none; //} } select { &, &.form-control { // Use vendor prefixes as `appearance` isn't part of the CSS spec. OSX doesn't obey the border-radius: 0 without this. -moz-appearance: none; -webkit-appearance: none; } } // default floating size/location without a form-group (will skip form-group styles, and just render default sizing variation) @include mdb-form-group-size-variant(null, $font-size-base, $mdb-label-top-margin-base, $mdb-input-padding-y-base, $line-height, $mdb-label-as-placeholder-shim-base); // default floating size/location with a form-group (need margin etc from a default form-group) @include mdb-form-group-size-variant(unquote(".mdb-form-group"), $font-size-base, $mdb-label-top-margin-base, $mdb-input-padding-y-base, $line-height, $mdb-label-as-placeholder-shim-base); // sm floating size/location @include mdb-form-group-size-variant(unquote(".mdb-form-group.mdb-form-group-sm"), $font-size-sm, $mdb-label-top-margin-sm, $mdb-input-padding-y-sm, $line-height-sm, $mdb-label-as-placeholder-shim-sm); // lg floating size/location @include mdb-form-group-size-variant(unquote(".mdb-form-group.mdb-form-group-lg"), $font-size-lg, $mdb-label-top-margin-lg, $mdb-input-padding-y-lg, $line-height-lg, $mdb-label-as-placeholder-shim-lg); // Input files - hide actual input - requires specific markup in the sample. //.mdb-form-group input[type=file] { // opacity: 0; // position: absolute; // top: 0; // right: 0; // bottom: 0; // left: 0; // width: 100%; // height: 100%; // z-index: 100; //} // I don't think this was in use... //legend { // border-bottom: 0; //} // // //.form-horizontal { // // // Consistent vertical alignment of radios and checkboxes // .radio, // .checkbox, // .radio-inline, // .checkbox-inline { // padding-top: 0; // } // // .radio { // margin-bottom: 10px; // } // // label { // text-align: right; // } // // label.control-label { // margin: 0; // } //}