normalized placeholders with labels, moved placeholder content generation to mixin, updated sass conversion

This commit is contained in:
Kevin Ross 2015-11-10 13:36:15 -06:00
parent 21b49987d8
commit 9bbd049fea
18 changed files with 878 additions and 555 deletions

View File

@ -35,7 +35,7 @@ module.exports = function (grunt) {
files: [{ files: [{
expand: true, expand: true,
cwd: "less", cwd: "less",
src: ["*.less", "!_mixins.less", "!_mixins-fullpalette.less"], src: ["*.less", "!_mixins.less", "!_mixins-fullpalette.less", "!_mixins-shared.less"],
ext: ".scss", ext: ".scss",
dest: "sass" dest: "sass"
}], }],
@ -104,6 +104,12 @@ module.exports = function (grunt) {
order: 24 order: 24
}, },
// material-placehorder
{ // Multi-line replacement - https://regex101.com/r/eS2vQ3/2
pattern: /.material-placeholder\({$\n([\s\S]+?)}\);$\n/mg,
replacement: "@include material-placeholder {\n$1\n}\n",
order: 24
},
// fix calc references // fix calc references
{ // https://regex101.com/r/aZ8iI5/1 { // https://regex101.com/r/aZ8iI5/1

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

110
dist/css/material.css vendored
View File

@ -2571,7 +2571,7 @@ Then, run this script to get the list.
box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
} }
body { body {
background-color: #eeeeee; background-color: #EEEEEE;
} }
body.inverse { body.inverse {
background: #333333; background: #333333;
@ -2655,7 +2655,7 @@ body .well-default,
body .jumbotron-default, body .jumbotron-default,
.container .jumbotron-default, .container .jumbotron-default,
.container-fluid .jumbotron-default { .container-fluid .jumbotron-default {
background-color: #ffffff; background-color: #FFF;
} }
body .well-black, body .well-black,
.container .well-black, .container .well-black,
@ -4921,19 +4921,19 @@ output {
padding-bottom: 9px; padding-bottom: 9px;
min-height: 38px; min-height: 38px;
} }
.input-sm { .input-sm '.input-sm' {
height: 26px; height: 26px;
padding: 4px 0px; padding: 4px 0px;
font-size: 11px; font-size: 11px;
line-height: 1.5; line-height: 1.5;
border-radius: 3px; border-radius: 3px;
} }
select.input-sm { .input-sm select'.input-sm' {
height: 26px; height: 26px;
line-height: 26px; line-height: 26px;
} }
textarea.input-sm, .input-sm textarea'.input-sm',
select[multiple].input-sm { .input-sm select[multiple]'.input-sm' {
height: auto; height: auto;
} }
.form-group-sm .form-control { .form-group-sm .form-control {
@ -4957,19 +4957,19 @@ select[multiple].input-sm {
font-size: 11px; font-size: 11px;
line-height: 1.5; line-height: 1.5;
} }
.input-lg { .input-lg '.input-lg' {
height: 42px; height: 42px;
padding: 8px 0px; padding: 8px 0px;
font-size: 18px; font-size: 18px;
line-height: 1.3333333; line-height: 1.3333333;
border-radius: 6px; border-radius: 6px;
} }
select.input-lg { .input-lg select'.input-lg' {
height: 42px; height: 42px;
line-height: 42px; line-height: 42px;
} }
textarea.input-lg, .input-lg textarea'.input-lg',
select[multiple].input-lg { .input-lg select[multiple]'.input-lg' {
height: auto; height: auto;
} }
.form-group-lg .form-control { .form-group-lg .form-control {
@ -5022,7 +5022,7 @@ select[multiple].input-lg {
} }
.form-control { .form-control {
border: 0; border: 0;
background-image: linear-gradient(#009688, #009688), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);
background-size: 0 2px, 100% 1px; background-size: 0 2px, 100% 1px;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center bottom, center calc(100% - 1px); background-position: center bottom, center calc(100% - 1px);
@ -5031,7 +5031,7 @@ select[multiple].input-lg {
} }
.form-group.is-focused .form-control { .form-group.is-focused .form-control {
outline: none; outline: none;
background-image: linear-gradient(#009688, #009688), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);
background-size: 100% 2px, 100% 1px; background-size: 100% 2px, 100% 1px;
box-shadow: none; box-shadow: none;
transition-duration: 0.3s; transition-duration: 0.3s;
@ -5039,6 +5039,21 @@ select[multiple].input-lg {
.form-group.is-focused .form-control .material-input:after { .form-group.is-focused .form-control .material-input:after {
background-color: #009688; background-color: #009688;
} }
.form-control::-moz-placeholder {
color: #BDBDBD;
font-size: 16px;
font-weight: normal;
}
.form-control:-ms-input-placeholder {
color: #BDBDBD;
font-size: 16px;
font-weight: normal;
}
.form-control::-webkit-input-placeholder {
color: #BDBDBD;
font-size: 16px;
font-weight: normal;
}
fieldset[disabled] .form-control:textarea, fieldset[disabled] .form-control:textarea,
.form-control:textarea { .form-control:textarea {
height: 40px; height: 40px;
@ -5068,13 +5083,14 @@ fieldset[disabled] .form-control {
position: relative; position: relative;
} }
.form-group label.control-label { .form-group label.control-label {
color: #BDBDBD;
font-size: 12px; font-size: 12px;
font-weight: normal; font-weight: normal;
margin: 16px 0 0 0; margin: 16px 0 0 0;
} }
.form-group label.control-label, .form-group label.control-label,
.form-group-default label.control-label { .form-group-default label.control-label {
color: #bdbdbd; color: #BDBDBD;
} }
.form-group-black label.control-label { .form-group-black label.control-label {
color: #000000; color: #000000;
@ -5259,94 +5275,94 @@ fieldset[disabled] .form-control {
} }
.form-group.is-focused .form-control, .form-group.is-focused .form-control,
.form-group-default.is-focused .form-control { .form-group-default.is-focused .form-control {
background-image: linear-gradient(#009688, #009688), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-black.is-focused .form-control { .form-group-black.is-focused .form-control {
background-image: linear-gradient(#000000, #000000), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#000000, #000000), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-white.is-focused .form-control { .form-group-white.is-focused .form-control {
background-image: linear-gradient(#ffffff, #ffffff), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#ffffff, #ffffff), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-inverse.is-focused .form-control { .form-group-inverse.is-focused .form-control {
background-image: linear-gradient(#3f51b5, #3f51b5), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#3f51b5, #3f51b5), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-primary.is-focused .form-control { .form-group-primary.is-focused .form-control {
background-image: linear-gradient(#009688, #009688), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-success.is-focused .form-control { .form-group-success.is-focused .form-control {
background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-info.is-focused .form-control { .form-group-info.is-focused .form-control {
background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-warning.is-focused .form-control { .form-group-warning.is-focused .form-control {
background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-danger.is-focused .form-control { .form-group-danger.is-focused .form-control {
background-image: linear-gradient(#f44336, #f44336), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#f44336, #f44336), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-red.is-focused .form-control { .form-group-material-red.is-focused .form-control {
background-image: linear-gradient(#f44336, #f44336), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#f44336, #f44336), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-pink.is-focused .form-control { .form-group-material-pink.is-focused .form-control {
background-image: linear-gradient(#e91e63, #e91e63), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#e91e63, #e91e63), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-purple.is-focused .form-control { .form-group-material-purple.is-focused .form-control {
background-image: linear-gradient(#9c27b0, #9c27b0), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#9c27b0, #9c27b0), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-deep-purple.is-focused .form-control { .form-group-material-deep-purple.is-focused .form-control {
background-image: linear-gradient(#673ab7, #673ab7), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#673ab7, #673ab7), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-indigo.is-focused .form-control { .form-group-material-indigo.is-focused .form-control {
background-image: linear-gradient(#3f51b5, #3f51b5), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#3f51b5, #3f51b5), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-blue.is-focused .form-control { .form-group-material-blue.is-focused .form-control {
background-image: linear-gradient(#2196f3, #2196f3), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#2196f3, #2196f3), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-light-blue.is-focused .form-control { .form-group-material-light-blue.is-focused .form-control {
background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-cyan.is-focused .form-control { .form-group-material-cyan.is-focused .form-control {
background-image: linear-gradient(#00bcd4, #00bcd4), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#00bcd4, #00bcd4), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-teal.is-focused .form-control { .form-group-material-teal.is-focused .form-control {
background-image: linear-gradient(#009688, #009688), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-green.is-focused .form-control { .form-group-material-green.is-focused .form-control {
background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-light-green.is-focused .form-control { .form-group-material-light-green.is-focused .form-control {
background-image: linear-gradient(#8bc34a, #8bc34a), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#8bc34a, #8bc34a), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-lime.is-focused .form-control { .form-group-material-lime.is-focused .form-control {
background-image: linear-gradient(#cddc39, #cddc39), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#cddc39, #cddc39), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-yellow.is-focused .form-control { .form-group-material-yellow.is-focused .form-control {
background-image: linear-gradient(#ffeb3b, #ffeb3b), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#ffeb3b, #ffeb3b), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-amber.is-focused .form-control { .form-group-material-amber.is-focused .form-control {
background-image: linear-gradient(#ffc107, #ffc107), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#ffc107, #ffc107), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-orange.is-focused .form-control { .form-group-material-orange.is-focused .form-control {
background-image: linear-gradient(#ff9800, #ff9800), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#ff9800, #ff9800), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-deep-orange.is-focused .form-control { .form-group-material-deep-orange.is-focused .form-control {
background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-brown.is-focused .form-control { .form-group-material-brown.is-focused .form-control {
background-image: linear-gradient(#795548, #795548), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#795548, #795548), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-grey.is-focused .form-control { .form-group-material-grey.is-focused .form-control {
background-image: linear-gradient(#9e9e9e, #9e9e9e), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#9e9e9e, #9e9e9e), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group-material-blue-grey.is-focused .form-control { .form-group-material-blue-grey.is-focused .form-control {
background-image: linear-gradient(#607d8b, #607d8b), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#607d8b, #607d8b), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group.has-warning .form-control { .form-group.has-warning .form-control {
box-shadow: none; box-shadow: none;
} }
.form-group.has-warning.is-focused .form-control { .form-group.has-warning.is-focused .form-control {
background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group.has-warning label.control-label, .form-group.has-warning label.control-label,
.form-group.has-warning .help-block { .form-group.has-warning .help-block {
@ -5356,7 +5372,7 @@ fieldset[disabled] .form-control {
box-shadow: none; box-shadow: none;
} }
.form-group.has-error.is-focused .form-control { .form-group.has-error.is-focused .form-control {
background-image: linear-gradient(#f44336, #f44336), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#f44336, #f44336), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group.has-error label.control-label, .form-group.has-error label.control-label,
.form-group.has-error .help-block { .form-group.has-error .help-block {
@ -5366,7 +5382,7 @@ fieldset[disabled] .form-control {
box-shadow: none; box-shadow: none;
} }
.form-group.has-success.is-focused .form-control { .form-group.has-success.is-focused .form-control {
background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group.has-success label.control-label, .form-group.has-success label.control-label,
.form-group.has-success .help-block { .form-group.has-success .help-block {
@ -5376,7 +5392,7 @@ fieldset[disabled] .form-control {
box-shadow: none; box-shadow: none;
} }
.form-group.has-info.is-focused .form-control { .form-group.has-info.is-focused .form-control {
background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#d2d2d2, #d2d2d2); background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#D2D2D2, #D2D2D2);
} }
.form-group.has-info label.control-label, .form-group.has-info label.control-label,
.form-group.has-info .help-block { .form-group.has-info .help-block {
@ -7500,7 +7516,7 @@ icon-material-blue-grey {
/**************************************************************************/ /**************************************************************************/
border-radius: 2px; border-radius: 2px;
color: rgba(0, 0, 0, 0.84); color: rgba(0, 0, 0, 0.84);
background: #ffffff; background: #fff;
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
} }
.card .card-height-indicator { .card .card-height-indicator {
@ -7529,7 +7545,7 @@ icon-material-blue-grey {
position: absolute; position: absolute;
bottom: 16px; bottom: 16px;
left: 18px; left: 18px;
color: #ffffff; color: #fff;
font-size: 2em; font-size: 2em;
} }
.card .card-body { .card .card-body {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -81,20 +81,25 @@ output {
// Relative text size, padding, and border-radii changes for form controls. For // Relative text size, padding, and border-radii changes for form controls. For
// horizontal sizing, wrap controls in the predefined grid classes. `<select>` // horizontal sizing, wrap controls in the predefined grid classes. `<select>`
// element gets special love because it's special, and that's a fact! // element gets special love because it's special, and that's a fact!
.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
height: @input-height;
padding: @padding-vertical @padding-horizontal;
font-size: @font-size;
line-height: @line-height;
border-radius: @border-radius;
select& { // mixin pulled from bootstrap and altered for less/sass compatibility
.input-size(@parent, @input-height, @padding-vertical, @padding-horizontal, @font-size, @line-height, @border-radius) {
@{parent} {
height: @input-height;
padding: @padding-vertical @padding-horizontal;
font-size: @font-size;
line-height: @line-height;
border-radius: @border-radius;
}
select@{parent} {
height: @input-height; height: @input-height;
line-height: @input-height; line-height: @input-height;
} }
textarea&, textarea@{parent},
select[multiple]& { select[multiple]@{parent} {
height: auto; height: auto;
} }
} }
@ -109,7 +114,7 @@ output {
// The `.form-group-* form-control` variations are sadly duplicated to avoid the // The `.form-group-* form-control` variations are sadly duplicated to avoid the
// issue documented in https://github.com/twbs/bootstrap/issues/15074. // issue documented in https://github.com/twbs/bootstrap/issues/15074.
.input-sm { .input-sm {
.input-size(@md-input-height-small; @md-input-padding-small-vertical; @md-input-padding-small-horizontal; @md-input-font-size-small; @md-input-line-height-small; @md-input-border-radius-small); .input-size('.input-sm', @md-input-height-small, @md-input-padding-small-vertical, @md-input-padding-small-horizontal, @md-input-font-size-small, @md-input-line-height-small, @md-input-border-radius-small);
} }
.form-group-sm { .form-group-sm {
.form-control { .form-control {
@ -136,7 +141,7 @@ output {
} }
.input-lg { .input-lg {
.input-size(@md-input-height-large; @md-input-padding-large-vertical; @md-input-padding-large-horizontal; @md-input-font-size-large; @md-input-line-height-large; @md-input-border-radius-large); .input-size('.input-lg', @md-input-height-large, @md-input-padding-large-vertical, @md-input-padding-large-horizontal, @md-input-font-size-large, @md-input-line-height-large, @md-input-border-radius-large);
} }
.form-group-lg { .form-group-lg {
.form-control { .form-control {

View File

@ -3,7 +3,7 @@
// usage: .form-group-validation-state(@input-danger); // usage: .form-group-validation-state(@input-danger);
.form-group-validation-state(@name, @color) { .form-group-validation-state(@name, @color) {
&.@{name} { // e.g. has-error &.@{name} { // e.g. has-error
.form-control { .form-control {
box-shadow: none; box-shadow: none;
} }
@ -38,10 +38,27 @@
} }
} }
.material-placeholder() { .material-placeholder({
color: @input-placeholder-color; color: @input-placeholder-color;
font-size: @md-input-font-size-base; font-size: @md-input-font-size-base;
} font-weight: normal;
});
//&::-moz-placeholder {
// color: @input-placeholder-color;
// font-size: @md-input-font-size-base;
// font-weight: normal;
//}
//&:-ms-input-placeholder {
// color: @input-placeholder-color;
// font-size: @md-input-font-size-base;
// font-weight: normal;
//}
//&::-webkit-input-placeholder {
// color: @input-placeholder-color;
// font-size: @md-input-font-size-base;
// font-weight: normal;
//}
fieldset[disabled] &, fieldset[disabled] &,
& { & {
@ -75,17 +92,21 @@
position: relative; position: relative;
// Labels // Labels
label.control-label { label.control-label { // static label
font-size: @md-input-label-font-size-base; // 12px same as focused size of floating
// same label properties as form-group placeholder. could be shared with a ruleset but makes sass conversion painful
color: @input-placeholder-color;
font-size: @floating-label-size-ratio * @md-input-font-size-base; // same as focused size of floating
font-weight: normal; font-weight: normal;
margin: 16px 0 0 0; // std and lg margin: 16px 0 0 0; // std and lg
} }
.variations(~" label.control-label", color, @input-placeholder-color); .variations(~" label.control-label", color, @input-placeholder-color); // default label color variations
.variations(~".is-focused label.control-label", color, @input-default); .variations(~".is-focused label.control-label", color, @input-default); // focused label color variations
// sm // sm
&.form-group-sm { &.form-group-sm {
label.control-label { label.control-label { // static label
font-size: @floating-label-size-ratio * @md-input-font-size-small; // same as focused size of floating font-size: @floating-label-size-ratio * @md-input-font-size-small; // same as focused size of floating
margin: 12px 0 0 0; // sm only margin: 12px 0 0 0; // sm only
} }
@ -93,7 +114,7 @@
// lg // lg
&.form-group-lg { &.form-group-lg {
label.control-label { label.control-label { // static label
font-size: @floating-label-size-ratio * @md-input-font-size-large; // same as focused size of floating font-size: @floating-label-size-ratio * @md-input-font-size-large; // same as focused size of floating
} }
} }
@ -116,7 +137,6 @@
background-image: linear-gradient(@material-color, @material-color), linear-gradient(@input-underline-color, @input-underline-color); background-image: linear-gradient(@material-color, @material-color), linear-gradient(@input-underline-color, @input-underline-color);
}); });
.form-group-validation-state(has-warning, @input-warning); .form-group-validation-state(has-warning, @input-warning);
.form-group-validation-state(has-error, @input-danger); .form-group-validation-state(has-error, @input-danger);
.form-group-validation-state(has-success, @input-success); .form-group-validation-state(has-success, @input-success);
@ -219,7 +239,6 @@ label.control-label.floating-label {
} }
} }
// Input files (kinda hack) // Input files (kinda hack)
.form-group input[type=file] { .form-group input[type=file] {
opacity: 0; opacity: 0;
@ -237,11 +256,9 @@ label.control-label.floating-label {
fieldset[disabled] .form-control:disabled, fieldset[disabled] .form-control:disabled,
.form-group .form-control:disabled, .form-group .form-control:disabled,
.form-control:disabled, .form-control:disabled,
fieldset[disabled] .form-control:focus:disabled, fieldset[disabled] .form-control:focus:disabled,
.form-group .form-control:focus:disabled, .form-group .form-control:focus:disabled,
.form-control:focus:disabled, .form-control:focus:disabled,
.form-group.is-focused fieldset[disabled] .form-control:disabled, .form-group.is-focused fieldset[disabled] .form-control:disabled,
.form-group.is-focused .form-group .form-control:disabled, .form-group.is-focused .form-group .form-control:disabled,
.form-group.is-focused .form-control:disabled { .form-group.is-focused .form-control:disabled {

View File

@ -1,27 +1,4 @@
// usage: .variations(~" .check", color, transparent); @import '_mixins-shared.less';
.variations(@extra, @property, @default) {
.generic-variations(@extra, @default, {
@{property}: @material-color;
});
}
.background-variations(@extra, @default) {
.generic-variations(@extra, @default, {
background-color: @material-color;
& when (@material-color = @btn-default) {
color: @lightbg-text;
}
& when not (@material-color = @btn-default) {
color: @material-text-color;
}
});
}
.text-variations(@extra, @default) {
.generic-variations(@extra, @default, {
color: @material-color;
});
}
// //
// To use this mixin you should pass a function as final parameter to define // To use this mixin you should pass a function as final parameter to define

31
less/_mixins-shared.less Executable file
View File

@ -0,0 +1,31 @@
// Placeholder text
.material-placeholder(@rules) {
&::-moz-placeholder { @rules(); } // Firefox
&:-ms-input-placeholder { @rules(); } // Internet Explorer 10+
&::-webkit-input-placeholder { @rules(); } // Safari and Chrome
}
// usage: .variations(~" .check", color, transparent);
.variations(@extra, @property, @default) {
.generic-variations(@extra, @default, {
@{property}: @material-color;
});
}
.background-variations(@extra, @default) {
.generic-variations(@extra, @default, {
background-color: @material-color;
& when (@material-color = @btn-default) {
color: @lightbg-text;
}
& when not (@material-color = @btn-default) {
color: @material-text-color;
}
});
}
.text-variations(@extra, @default) {
.generic-variations(@extra, @default, {
color: @material-color;
});
}

View File

@ -1,34 +1,4 @@
// Placeholder text @import '_mixins-shared.less';
.material-placeholder(@func) {
&::-moz-placeholder { @func(); } // Firefox
&:-ms-input-placeholder { @func(); } // Internet Explorer 10+
&::-webkit-input-placeholder { @func(); } // Safari and Chrome
}
// usage: .variations(~" .check", color, transparent);
.variations(@extra, @property, @default) {
.generic-variations(@extra, @default, {
@{property}: @material-color;
});
}
.background-variations(@extra, @default) {
.generic-variations(@extra, @default, {
background-color: @material-color;
& when (@material-color = @btn-default) {
color: @lightbg-text;
}
& when not (@material-color = @btn-default) {
color: @material-text-color;
}
});
}
.text-variations(@extra, @default) {
.generic-variations(@extra, @default, {
color: @material-color;
});
}
// //
// To use this mixin you should pass a function as final parameter to define // To use this mixin you should pass a function as final parameter to define

View File

@ -38,7 +38,7 @@
"grunt-contrib-copy": "^0.6.0", "grunt-contrib-copy": "^0.6.0",
"grunt-contrib-jasmine": "^0.8.0", "grunt-contrib-jasmine": "^0.8.0",
"grunt-contrib-jshint": "^0.10.0", "grunt-contrib-jshint": "^0.10.0",
"grunt-contrib-less": "^0.11.4", "grunt-contrib-less": "^1.1.0",
"grunt-contrib-sass": "^0.8.1", "grunt-contrib-sass": "^0.8.1",
"grunt-contrib-uglify": "^0.6.0", "grunt-contrib-uglify": "^0.6.0",
"grunt-contrib-watch": "^0.6.1", "grunt-contrib-watch": "^0.6.1",

218
sass/_inputs-size.scss Normal file
View File

@ -0,0 +1,218 @@
// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
//
// Forms - sizing - material - mirrors bootstrap/forms.less with custom sizing
//
// NOTE: this is intentionally kept structurally _identical_ to the bootstrap/forms.less file to make it easier
// to identify differences in sizing approaches to form inputs.
// --------------------------------------------------
legend {
margin-bottom: $md-input-line-height-computed;
font-size: ($md-input-font-size-base * 1.5);
}
// Adjust output element
output {
padding-top: ($md-input-padding-base-vertical + 1);
font-size: $md-input-font-size-base;
line-height: $md-input-line-height-base;
}
.form-control {
height: $md-input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
padding: $md-input-padding-base-vertical $md-input-padding-base-horizontal;
font-size: $md-input-font-size-base;
line-height: $md-input-line-height-base;
}
// Special styles for iOS temporal inputs
//
// In Mobile Safari, setting `display: block` on temporal inputs causes the
// text within the input to become vertically misaligned. As a workaround, we
// set a pixel line-height that matches the given height of the input, but only
// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
//
// Note that as of 8.3, iOS doesn't support `datetime` or `week`.
@media screen and (-webkit-min-device-pixel-ratio: 0) {
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
&.form-control {
line-height: $md-input-height-base;
}
&.input-sm,
.input-group-sm & {
line-height: $md-input-height-small;
}
&.input-lg,
.input-group-lg & {
line-height: $md-input-height-large;
}
}
}
.radio,
.checkbox {
label {
min-height: $md-input-line-height-computed; // Ensure the input doesn't jump when there is no text
}
}
// Static form control text
//
// Apply class to a `p` element to make any string of text align with labels in
// a horizontal form layout.
.form-control-static {
// Size it appropriately next to real form controls
padding-top: ($md-input-padding-base-vertical + 1);
padding-bottom: ($md-input-padding-base-vertical + 1);
min-height: ($md-input-line-height-computed + $md-input-font-size-base);
}
// Form control sizing
//
// Relative text size, padding, and border-radii changes for form controls. For
// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
// element gets special love because it's special, and that's a fact!
@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius){
#{$parent} {
height: $input-height;
padding: $padding-vertical $padding-horizontal;
font-size: $font-size;
line-height: $line-height;
border-radius: $border-radius;
}
select#{$parent} {
height: $input-height;
line-height: $input-height;
}
textarea#{$parent},
select[multiple]#{$parent} {
height: auto;
}
}
// Form control sizing
//
// Build on `.form-control` with modifier classes to decrease or increase the
// height and font-size of form controls.
//
// The `.form-group-* form-control` variations are sadly duplicated to avoid the
// issue documented in https://github.com/twbs/bootstrap/issues/15074.
.input-sm {
@include input-size('.input-sm', $md-input-height-small, $md-input-padding-small-vertical, $md-input-padding-small-horizontal, $md-input-font-size-small, $md-input-line-height-small, $md-input-border-radius-small);
}
.form-group-sm {
.form-control {
height: $md-input-height-small;
padding: $md-input-padding-small-vertical $md-input-padding-small-horizontal;
font-size: $md-input-font-size-small;
line-height: $md-input-line-height-small;
}
select.form-control {
height: $md-input-height-small;
line-height: $md-input-height-small;
}
textarea.form-control,
select[multiple].form-control {
height: auto;
}
.form-control-static {
height: $md-input-height-small;
min-height: ($md-input-line-height-computed + $md-input-font-size-small);
padding: ($md-input-padding-small-vertical + 1) $md-input-padding-small-horizontal;
font-size: $md-input-font-size-small;
line-height: $md-input-line-height-small;
}
}
.input-lg {
@include input-size('.input-lg', $md-input-height-large, $md-input-padding-large-vertical, $md-input-padding-large-horizontal, $md-input-font-size-large, $md-input-line-height-large, $md-input-border-radius-large);
}
.form-group-lg {
.form-control {
height: $md-input-height-large;
padding: $md-input-padding-large-vertical $md-input-padding-large-horizontal;
font-size: $md-input-font-size-large;
line-height: $md-input-line-height-large;
}
select.form-control {
height: $md-input-height-large;
line-height: $md-input-height-large;
}
textarea.form-control,
select[multiple].form-control {
height: auto;
}
.form-control-static {
height: $md-input-height-large;
min-height: ($md-input-line-height-computed + $md-input-font-size-large);
padding: ($md-input-padding-large-vertical + 1) $md-input-padding-large-horizontal;
font-size: $md-input-font-size-large;
line-height: $md-input-line-height-large;
}
}
.form-horizontal {
// Consistent vertical alignment of radios and checkboxes
//
// Labels also get some reset styles, but that is scoped to a media query below.
.radio,
.checkbox,
.radio-inline,
.checkbox-inline {
padding-top: ($md-input-padding-base-vertical + 1); // Default padding plus a border
}
// Account for padding we're adding to ensure the alignment and of help text
// and other content below items
.radio,
.checkbox {
min-height: ($md-input-line-height-computed + ($md-input-padding-base-vertical + 1));
}
// Reset spacing and right align labels, but scope to media queries so that
// labels on narrow viewports stack the same as a default form example.
@media (min-width: $screen-sm-min) {
.control-label {
padding-top: ($md-input-padding-base-vertical + 1); // Default padding plus a border
}
}
// Form group sizes
//
// Quick utility class for applying `.input-lg` and `.input-sm` styles to the
// inputs and labels within a `.form-group`.
.form-group-lg {
@media (min-width: $screen-sm-min) {
.control-label {
padding-top: (($md-input-padding-large-vertical * $md-input-line-height-large) + 1);
font-size: $md-input-font-size-large;
}
}
}
.form-group-sm {
@media (min-width: $screen-sm-min) {
.control-label {
padding-top: ($md-input-padding-small-vertical + 1);
font-size: $md-input-font-size-small;
}
}
}
}

View File

@ -1,17 +1,16 @@
// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten. // This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
@import '_inputs-size';
// usage: @include form-group-validation-state($input-danger); // usage: @include form-group-validation-state($input-danger);
@mixin form-group-validation-state($name, $color){ @mixin form-group-validation-state($name, $color){
&.#{$name} { // e.g. has-error &.#{$name} { // e.g. has-error
.form-control { .form-control {
box-shadow: none; box-shadow: none;
} }
.material-input:focus, &.is-focused .form-control {
.form-control:focus,
&.focus .form-control {
background-image: linear-gradient($color, $color), linear-gradient($input-underline-color, $input-underline-color); background-image: linear-gradient($color, $color), linear-gradient($input-underline-color, $input-underline-color);
box-shadow: none;
} }
label.control-label, label.control-label,
.help-block { .help-block {
@ -26,26 +25,53 @@
background-size: 0 2px, 100% 1px; background-size: 0 2px, 100% 1px;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center bottom, center calc(100% - 1px); background-position: center bottom, center calc(100% - 1px);
background-color: transparent;
background-color: rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 0);
transition: background 0s ease-out; transition: background 0s ease-out;
&::-webkit-input-placeholder {
color: $input-placeholder-color; .form-group.is-focused & {
} outline: none;
&::-moz-placeholder { background-image: linear-gradient($primary, $primary), linear-gradient($input-underline-color, $input-underline-color);
color: $input-placeholder-color; background-size: 100% 2px, 100% 1px;
} box-shadow: none;
&:-ms-input-placeholder { transition-duration: 0.3s;
color: $input-placeholder-color;
.material-input:after {
background-color: $input-default;
}
} }
fieldset[disabled] &, & { @include material-placeholder {
color: $input-placeholder-color;
font-size: $md-input-font-size-base;
font-weight: normal;
}
//&::-moz-placeholder {
// color: $input-placeholder-color;
// font-size: $md-input-font-size-base;
// font-weight: normal;
//}
//&:-ms-input-placeholder {
// color: $input-placeholder-color;
// font-size: $md-input-font-size-base;
// font-weight: normal;
//}
//&::-webkit-input-placeholder {
// color: $input-placeholder-color;
// font-size: $md-input-font-size-base;
// font-weight: normal;
//}
fieldset[disabled] &,
& {
&:textarea { &:textarea {
height: 40px; height: 40px;
} }
&, &:focus, &.focus { &,
padding: 0; .form-group.is-focused & {
//padding: 0;
float: none; float: none;
border: 0; border: 0;
box-shadow: none; box-shadow: none;
@ -60,37 +86,40 @@
&[disabled], &[disabled],
&[readonly], &[readonly],
fieldset[disabled] & { fieldset[disabled] & {
background-color: transparent; //background-color: transparent;
background-color: rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 0);
} }
&:focus,
&.focus {
outline: none;
background-image: linear-gradient($primary, $primary), linear-gradient($input-underline-color, $input-underline-color);
background-size: 100% 2px, 100% 1px;
box-shadow: none;
transition-duration: 0.3s;
}
&:focus ~ .material-input:after,
&.focus ~ .material-input:after {
background-color: $input-default;
}
&:invalid {
background-image: linear-gradient($input-danger, $input-danger), linear-gradient($input-underline-color, $input-underline-color);
}
} }
.form-group { .form-group {
position: relative; position: relative;
label { // Labels
//color: $input-placeholder-color; label.control-label { // static label
font-size: $floating-label-size-ratio * $font-size-base; // same as focused size of floating
// same label properties as form-group placeholder. could be shared with a ruleset but makes sass conversion painful
color: $input-placeholder-color;
font-size: $md-input-font-size-base;
font-weight: normal; font-weight: normal;
padding-left: 0px;
margin: 16px 0 0 0; // std and lg
}
//.variations(unquote(" label.control-label"), color, $input-placeholder-color); // FIXME: not sure if necessary
//.variations(unquote(".is-focused label.control-label"), color, $input-default);
// sm
&.form-group-sm {
label.control-label { // static label
font-size: $floating-label-size-ratio * $md-input-font-size-small; // same as focused size of floating FIXME shouldn't this be full size?
margin: 12px 0 0 0; // sm only
}
}
// lg
&.form-group-lg {
label.control-label { // static label
font-size: $floating-label-size-ratio * $md-input-font-size-large; // same as focused size of floating FIXME shouldn't this be full size?
}
} }
// Hints // Hints
@ -100,40 +129,20 @@
display: none; display: none;
} }
&.focus { &.is-focused {
.hint { .hint {
display: block; display: block;
} }
} }
@include variations(unquote(" label.control-label"), color, $lightbg-text); // SASS conversion note: please mirror any content change in _mixins-shared.scss bg-img-variations-content
@include variations(unquote(".focus label.control-label"), color, $input-default); @include bg-img-variations(unquote(".is-focused .form-control"), $primary);
@include form-group-validation-state(has-warning, $input-warning); @include form-group-validation-state(has-warning, $input-warning);
@include form-group-validation-state(has-error, $input-danger); @include form-group-validation-state(has-error, $input-danger);
@include form-group-validation-state(has-success, $input-success); @include form-group-validation-state(has-success, $input-success);
@include form-group-validation-state(has-info, $input-info); @include form-group-validation-state(has-info, $input-info);
// sm
&.form-group-sm {
label {
font-size: $floating-label-size-ratio * $font-size-small; // same as focused size of floating
}
.form-control {
padding-left: 0px;
}
}
// lg
&.form-group-lg {
label {
font-size: $floating-label-size-ratio * $font-size-large; // same as focused size of floating
}
.form-control {
padding-left: 0px;
}
}
textarea { textarea {
resize: none; resize: none;
} }
@ -149,48 +158,68 @@
select { select {
appearance: none; appearance: none;
} }
// SASS conversion note: please mirror any content change in _mixins-shared.scss bg-img-variations-content
@include bg-img-variations(unquote(" .form-control:focus"), $primary);
} }
@mixin input-floating-label-size($name, $size){ select.form-control {
border: 0;
box-shadow: none;
border-radius: 0;
.form-group.is-focused & {
box-shadow: none;
border-color: #757575;
}
&[multiple] {
&,
.form-group.is-focused & {
height: 85px;
}
}
}
// Reference http://www.google.com/design/spec/components/text-fields.html
// MDL implementation: http://www.getmdl.io/components/index.html#textfields-section
// this is for input-sm and input-lg directly on input. Recommended way is form-group-sm and form-group-lg instead.
@mixin input-size-floating-label($name, $size){
.form-control.#{$name} ~ & { .form-control.#{$name} ~ & {
font-size: $size; font-size: $size;
top: 7px; top: 7px;
} }
.form-control.#{$name}:focus ~ &, .form-group.is-focused .form-control.#{$name} ~ .form-group.is-focused &,
.form-control.#{$name}:not(.empty) ~ & { .form-group.is-empty .form-control.#{$name} ~ .form-group.is-empty & {
top: $floating-label-size-ratio * -$size; top: $floating-label-size-ratio * -$size;
font-size: $floating-label-size-ratio * $size; font-size: $floating-label-size-ratio * $size;
} }
} }
// Do not nest .floating-label inside .form-group - it messes with ~ // Do not nest label.floating-label inside .form-group - it messes with ~ selector
label.floating-label { label.control-label.floating-label {
font-size: $font-size-base; // Input sizes font-size: $md-input-font-size-base; // Input sizes
position: absolute; position: absolute;
pointer-events: none; pointer-events: none;
left: 0px; left: 0px;
top: 5px; top: -1 * $md-input-padding-base-vertical; // place the floating label to look like a placeholder with input padding
transition: 0.3s ease all; transition: 0.3s ease all;
.form-group.is-focused & {
label.control-label {
font-size: $md-input-label-font-size-base; // 12px
}
}
// sizing // sizing
.form-control:focus ~ &, .form-group.is-focused &,
.form-control:not(.empty) ~ & { .form-group:not(.is-empty) & {
top: $floating-label-size-ratio * -$font-size-base; top: -1 * ($md-input-label-font-size-base + $md-input-padding-base-vertical); // FIXME this needs to be calculated and moved up to .is-focused !!!
font-size: $floating-label-size-ratio * $font-size-base; font-size: $md-input-label-font-size-base;
} }
@include input-floating-label-size(input-sm, $font-size-small); @include input-size-floating-label(input-sm, $md-input-font-size-small);
@include input-floating-label-size(input-lg, $font-size-large); @include input-size-floating-label(input-lg, $md-input-font-size-large);
.form-control:not(.empty):invalid ~ &, // FIXME: where does the invalid class come from? it isnt' bs3.
.form-control.focus:invalid ~ & {
color: $input-danger;
}
} }
.input-group { .input-group {
@ -211,22 +240,6 @@ label.floating-label {
} }
} }
select[multiple].form-control {
&, &:focus, &.focus {
height: 85px;
}
}
select.form-control {
border: 0;
box-shadow: none;
border-radius: 0;
&:focus, &.focus {
box-shadow: none;
border-color: #757575;
}
}
// Input files (kinda hack) // Input files (kinda hack)
.form-group input[type=file] { .form-group input[type=file] {
opacity: 0; opacity: 0;
@ -247,8 +260,8 @@ fieldset[disabled] .form-control:disabled,
fieldset[disabled] .form-control:focus:disabled, fieldset[disabled] .form-control:focus:disabled,
.form-group .form-control:focus:disabled, .form-group .form-control:focus:disabled,
.form-control:focus:disabled, .form-control:focus:disabled,
fieldset[disabled] .form-control.focus:disabled, .form-group.is-focused fieldset[disabled] .form-control:disabled,
.form-group .form-control.focus:disabled, .form-group.is-focused .form-group .form-control:disabled,
.form-control.focus:disabled { .form-group.is-focused .form-control:disabled {
border: 0; border: 0;
} }

View File

@ -76,10 +76,68 @@ $font-size-base: 14px !default;
$font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px $font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px
$font-size-small: ceil(($font-size-base * 0.85)) !default; // ~12px $font-size-small: ceil(($font-size-base * 0.85)) !default; // ~12px
$screen-sm: 768px !default;
$screen-sm-min: $screen-sm !default;
// Global Material variables // Global Material variables
$material-border-radius: 2px !default; $material-border-radius: 2px !default;
// --------------------
// inputs
$input-placeholder-color: #BDBDBD !default;
$floating-label-size-ratio: 75 / 100 !default;
$input-underline-color: #D2D2D2 !default; $input-underline-color: #D2D2D2 !default;
$md-input-font-size-base: 16px !default;
$md-input-font-size-large: ceil(($font-size-base * 1.25)) !default; // ~20px
$md-input-font-size-small: ceil(($font-size-base * 0.75)) !default; // ~12px
// size when static or floating with focus i.e. 16px
$md-input-label-font-size-base: $floating-label-size-ratio * $md-input-font-size-base !default;
//** Unit-less `line-height` for use in components like buttons.
$md-input-line-height-base: 1.428571429 !default; // 20/14
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
$md-input-line-height-computed: floor(($md-input-font-size-base * $md-input-line-height-base)) !default; // ~20px
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
$md-input-padding-base-vertical: 8px !default; // was 6.
$md-input-padding-base-horizontal: 0px !default; // was 12.
$md-input-padding-large-vertical: 8px !default; // 10
$md-input-padding-large-horizontal: 0px !default; // 16
$md-input-padding-small-vertical: 4px !default; // 5
$md-input-padding-small-horizontal: 0px !default; // 10
$md-input-padding-xs-vertical: 2px !default; // 1
$md-input-padding-xs-horizontal: 0px !default; // 5
$md-input-line-height-large: 1.3333333 !default; // extra decimals for Win 8.1 Chrome
$md-input-line-height-small: 1.5 !default;
$md-input-border-radius-base: 4px !default;
$md-input-border-radius-large: 6px !default;
$md-input-border-radius-small: 3px !default;
//** Default `.form-control` height
$md-input-height-base: ($md-input-line-height-computed + ($md-input-padding-base-vertical * 2) + 2) !default;
//** Large `.form-control` height
$md-input-height-large: (ceil($md-input-font-size-large * $md-input-line-height-large) + ($md-input-padding-large-vertical * 2) + 2) !default;
//** Small `.form-control` height
$md-input-height-small: (floor($md-input-font-size-small * $md-input-line-height-small) + ($md-input-padding-small-vertical * 2) + 2) !default;
// Card // Card
$card-body-text: $lightbg-text !default; $card-body-text: $lightbg-text !default;
$card-body-background: #fff !default; $card-body-background: #fff !default;
@ -97,10 +155,6 @@ $checkbox-animation-check: 0.3s !default;
$popover-background: rgba(101, 101, 101, 0.9) !default; $popover-background: rgba(101, 101, 101, 0.9) !default;
$popover-color: #ececec !default; $popover-color: #ececec !default;
// Inputs
$input-placeholder-color: #BDBDBD !default;
$floating-label-size-ratio: 70 / 100 !default;
// Dropdown Menu // Dropdown Menu
$dropdown-radius: 2px !default; $dropdown-radius: 2px !default;
$dropdown-font-size: 16px !default; $dropdown-font-size: 16px !default;