// label variations .label { border-radius: $border-radius-small; //@include variations(unquote(".label"), unquote(""), background-color, $grey); } // 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; //color: $mdb-input-placeholder-color; //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; //color: $mdb-input-placeholder-color; //font-weight: 400; } // smaller focused or static size label.control-label { //font-size: $static-font-size; //line-height: $static-line-height; //color: $mdb-input-placeholder-color; //font-weight: 400; //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-group-validation-state($name, $color) { &.#{$name} { // e.g. has-error .form-control { //box-shadow: none; // replaced with variable } &.is-focused .form-control { background-image: linear-gradient($color, $color), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color); } label.control-label, .help-block { color: $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); } // this is inside a form-group, may be .mdb-form-group.mdb-form-group-sm or .mdb-form-group.mdb-form-group-lg @else { #{$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); } } } } // ----- // 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 //, //.mdb-form-group .form-control { border: 0; // replaced with vars //border-radius: 0; //box-shadow: none; //background-color: rgba(0, 0, 0, 0); background-image: linear-gradient($brand-primary, $brand-primary), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color); background-size: 0 2px, 100% 1px; background-repeat: no-repeat; background-position: center bottom, center calc(100% - 1px); transition: background 0s ease-out; //float: none; // why? //&:textarea { // height: 40px; //} .mdb-form-group.is-focused & { outline: none; background-image: linear-gradient($brand-primary, $brand-primary), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color); background-size: 100% 2px, 100% 1px; //box-shadow: none; replaced with var transition-duration: 0.3s; .text-input-decorator:after { background-color: $brand-primary; } } //&[readonly], //&[disabled], //fieldset[disabled] & { // background-color: rgba(0, 0, 0, 0); // replaced with $input-bg-disabled //} &[disabled], fieldset[disabled] & { background-image: none; border-bottom: 1px dotted $mdb-input-underline-color; } } // ----- // 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; } } @include mdb-form-group-validation-state(has-warning, $brand-warning); @include mdb-form-group-validation-state(has-error, $brand-danger); @include mdb-form-group-validation-state(has-success, $brand-success); @include mdb-form-group-validation-state(has-info, $brand-info); textarea { //resize: none; & ~ .form-control-highlight { //margin-top: -11px; } } select { //appearance: none; // Fix for OS X & ~ .text-input-decorator:after { //display: 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); select.form-control { //border: 0; //box-shadow: none; //border-radius: 0; .mdb-form-group.is-focused & { //box-shadow: none; //border-color: $mdb-input-underline-color; } &[multiple] { &, .mdb-form-group.is-focused & { //height: 85px; } } } // 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; // } //}