Transitioned label styles to be indicated on the form-group

This commit is contained in:
Kevin Ross 2015-11-17 15:26:19 -06:00
parent 3c6f83dec0
commit 564106a5ec
15 changed files with 1322 additions and 274 deletions

View File

@ -1973,12 +1973,15 @@
<div class="col-lg-4 col-lg-offset-1"> <div class="col-lg-4 col-lg-offset-1">
<form class="bs-component"> <form class="bs-component">
<div class="form-group"> <div class="form-group label-floating">
<input class="form-control floating-label" id="focusedInput1" type="text" placeholder="Write something to make the label float"> <label class="control-label" for="focusedInput1">Write something to make the label float</label>
<input class="form-control" id="focusedInput1" type="text">
</div> </div>
<div class="form-group"> <div class="form-group label-floating">
<input class="form-control floating-label" id="focusedInput2" type="text" placeholder="Focus to show the help-block" data-hint="You should really write something here"> <label class="control-label" for="focusedInput2">Focus to show the help-block</label>
<input class="form-control" id="focusedInput2" type="text">
<p class="help-block">You should really write something here</p>
</div> </div>
<div class="form-group"> <div class="form-group">
@ -2027,8 +2030,8 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group label-floating">
<label class="control-label floating-label" for="addon2">Floating label addon <small>(right only)</small></label> <label class="control-label" for="addon2">Floating label addon <small>(right only)</small></label>
<div class="input-group"> <div class="input-group">
<input type="text" id="addon2" class="form-control"> <input type="text" id="addon2" class="form-control">
<span class="input-group-btn"> <span class="input-group-btn">

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

239
dist/css/material.css vendored
View File

@ -4975,13 +4975,13 @@ legend {
font-size: 24px; font-size: 24px;
} }
output { output {
padding-top: 9px; padding-top: 8px;
font-size: 16px; font-size: 16px;
line-height: 1.42857143; line-height: 1.42857143;
} }
.form-control { .form-control {
height: 40px; height: 38px;
padding: 8px 0px; padding: 7px 0px;
font-size: 16px; font-size: 16px;
line-height: 1.42857143; line-height: 1.42857143;
} }
@ -4990,7 +4990,7 @@ output {
input[type="time"].form-control, input[type="time"].form-control,
input[type="datetime-local"].form-control, input[type="datetime-local"].form-control,
input[type="month"].form-control { input[type="month"].form-control {
line-height: 40px; line-height: 38px;
} }
input[type="date"].input-sm, input[type="date"].input-sm,
input[type="time"].input-sm, input[type="time"].input-sm,
@ -5000,7 +5000,7 @@ output {
.input-group-sm input[type="time"], .input-group-sm input[type="time"],
.input-group-sm input[type="datetime-local"], .input-group-sm input[type="datetime-local"],
.input-group-sm input[type="month"] { .input-group-sm input[type="month"] {
line-height: 26px; line-height: 24px;
} }
input[type="date"].input-lg, input[type="date"].input-lg,
input[type="time"].input-lg, input[type="time"].input-lg,
@ -5010,7 +5010,7 @@ output {
.input-group-lg input[type="time"], .input-group-lg input[type="time"],
.input-group-lg input[type="datetime-local"], .input-group-lg input[type="datetime-local"],
.input-group-lg input[type="month"] { .input-group-lg input[type="month"] {
line-height: 46px; line-height: 44px;
} }
} }
.radio label, .radio label,
@ -5018,79 +5018,79 @@ output {
min-height: 22px; min-height: 22px;
} }
.form-control-static { .form-control-static {
padding-top: 9px; padding-top: 8px;
padding-bottom: 9px; padding-bottom: 8px;
min-height: 38px; min-height: 38px;
} }
.input-sm '.input-sm' { .input-sm '.input-sm' {
height: 26px; height: 24px;
padding: 4px 0px; padding: 3px 0px;
font-size: 11px; font-size: 11px;
line-height: 1.5; line-height: 1.5;
border-radius: 3px; border-radius: 3px;
} }
.input-sm select'.input-sm' { .input-sm select'.input-sm' {
height: 26px; height: 24px;
line-height: 26px; line-height: 24px;
} }
.input-sm textarea'.input-sm', .input-sm textarea'.input-sm',
.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 {
height: 26px; height: 24px;
padding: 4px 0px; padding: 3px 0px;
font-size: 11px; font-size: 11px;
line-height: 1.5; line-height: 1.5;
} }
.form-group-sm select.form-control { .form-group-sm select.form-control {
height: 26px; height: 24px;
line-height: 26px; line-height: 24px;
} }
.form-group-sm textarea.form-control, .form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control { .form-group-sm select[multiple].form-control {
height: auto; height: auto;
} }
.form-group-sm .form-control-static { .form-group-sm .form-control-static {
height: 26px; height: 24px;
min-height: 33px; min-height: 33px;
padding: 5px 0px; padding: 4px 0px;
font-size: 11px; font-size: 11px;
line-height: 1.5; line-height: 1.5;
} }
.input-lg '.input-lg' { .input-lg '.input-lg' {
height: 46px; height: 44px;
padding: 10px 0px; padding: 9px 0px;
font-size: 18px; font-size: 18px;
line-height: 1.3333333; line-height: 1.3333333;
border-radius: 6px; border-radius: 6px;
} }
.input-lg select'.input-lg' { .input-lg select'.input-lg' {
height: 46px; height: 44px;
line-height: 46px; line-height: 44px;
} }
.input-lg textarea'.input-lg', .input-lg textarea'.input-lg',
.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 {
height: 46px; height: 44px;
padding: 10px 0px; padding: 9px 0px;
font-size: 18px; font-size: 18px;
line-height: 1.3333333; line-height: 1.3333333;
} }
.form-group-lg select.form-control { .form-group-lg select.form-control {
height: 46px; height: 44px;
line-height: 46px; line-height: 44px;
} }
.form-group-lg textarea.form-control, .form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control { .form-group-lg select[multiple].form-control {
height: auto; height: auto;
} }
.form-group-lg .form-control-static { .form-group-lg .form-control-static {
height: 46px; height: 44px;
min-height: 40px; min-height: 40px;
padding: 11px 0px; padding: 10px 0px;
font-size: 18px; font-size: 18px;
line-height: 1.3333333; line-height: 1.3333333;
} }
@ -5098,26 +5098,26 @@ output {
.form-horizontal .checkbox, .form-horizontal .checkbox,
.form-horizontal .radio-inline, .form-horizontal .radio-inline,
.form-horizontal .checkbox-inline { .form-horizontal .checkbox-inline {
padding-top: 9px; padding-top: 8px;
} }
.form-horizontal .radio, .form-horizontal .radio,
.form-horizontal .checkbox { .form-horizontal .checkbox {
min-height: 31px; min-height: 30px;
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.form-horizontal .control-label { .form-horizontal .control-label {
padding-top: 9px; padding-top: 8px;
} }
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.form-horizontal .form-group-lg .control-label { .form-horizontal .form-group-lg .control-label {
padding-top: 14.333333px; padding-top: 12.9999997px;
font-size: 18px; font-size: 18px;
} }
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.form-horizontal .form-group-sm .control-label { .form-horizontal .form-group-sm .control-label {
padding-top: 5px; padding-top: 4px;
font-size: 11px; font-size: 11px;
} }
} }
@ -5166,8 +5166,9 @@ fieldset[disabled] .form-control {
background-color: rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 0);
} }
.form-group { .form-group {
border: solid 1px red;
position: relative; position: relative;
margin: 28px 0 0 0;
padding-bottom: 7px;
} }
.form-group .form-control::-moz-placeholder { .form-group .form-control::-moz-placeholder {
color: #BDBDBD; color: #BDBDBD;
@ -5181,16 +5182,21 @@ fieldset[disabled] .form-control {
color: #BDBDBD; color: #BDBDBD;
font-weight: normal; font-weight: normal;
} }
.form-group.label-static label.control-label,
.form-group.label-placeholder label.control-label,
.form-group.label-floating label.control-label {
position: absolute;
left: 0px;
pointer-events: none;
transition: 0.3s ease all;
}
.form-group label.control-label { .form-group label.control-label {
color: #BDBDBD; color: #BDBDBD;
font-weight: normal; font-weight: normal;
margin: 16px 0 0 0; margin: 16px 0 0 0;
} }
.form-group label.control-label.floating-label { .form-group.label-placeholder:not(.is-empty) label.control-label {
position: absolute; display: none;
pointer-events: none;
left: 0px;
transition: 0.3s ease all;
} }
.form-group label.control-label, .form-group label.control-label,
.form-group-default label.control-label { .form-group-default label.control-label {
@ -5362,8 +5368,93 @@ fieldset[disabled] .form-control {
.form-group-material-blue-grey.is-focused label.control-label { .form-group-material-blue-grey.is-focused label.control-label {
color: #607d8b; color: #607d8b;
} }
.form-group.is-focused.label-placeholder label.control-label,
.form-group-default.is-focused.label-placeholder label.control-label {
color: #BDBDBD;
}
.form-group-black.is-focused.label-placeholder label.control-label {
color: #000000;
}
.form-group-white.is-focused.label-placeholder label.control-label {
color: #ffffff;
}
.form-group-inverse.is-focused.label-placeholder label.control-label {
color: #3f51b5;
}
.form-group-primary.is-focused.label-placeholder label.control-label {
color: #009688;
}
.form-group-success.is-focused.label-placeholder label.control-label {
color: #4caf50;
}
.form-group-info.is-focused.label-placeholder label.control-label {
color: #03a9f4;
}
.form-group-warning.is-focused.label-placeholder label.control-label {
color: #ff5722;
}
.form-group-danger.is-focused.label-placeholder label.control-label {
color: #f44336;
}
.form-group-material-red.is-focused.label-placeholder label.control-label {
color: #f44336;
}
.form-group-material-pink.is-focused.label-placeholder label.control-label {
color: #e91e63;
}
.form-group-material-purple.is-focused.label-placeholder label.control-label {
color: #9c27b0;
}
.form-group-material-deep-purple.is-focused.label-placeholder label.control-label {
color: #673ab7;
}
.form-group-material-indigo.is-focused.label-placeholder label.control-label {
color: #3f51b5;
}
.form-group-material-blue.is-focused.label-placeholder label.control-label {
color: #2196f3;
}
.form-group-material-light-blue.is-focused.label-placeholder label.control-label {
color: #03a9f4;
}
.form-group-material-cyan.is-focused.label-placeholder label.control-label {
color: #00bcd4;
}
.form-group-material-teal.is-focused.label-placeholder label.control-label {
color: #009688;
}
.form-group-material-green.is-focused.label-placeholder label.control-label {
color: #4caf50;
}
.form-group-material-light-green.is-focused.label-placeholder label.control-label {
color: #8bc34a;
}
.form-group-material-lime.is-focused.label-placeholder label.control-label {
color: #cddc39;
}
.form-group-material-yellow.is-focused.label-placeholder label.control-label {
color: #ffeb3b;
}
.form-group-material-amber.is-focused.label-placeholder label.control-label {
color: #ffc107;
}
.form-group-material-orange.is-focused.label-placeholder label.control-label {
color: #ff9800;
}
.form-group-material-deep-orange.is-focused.label-placeholder label.control-label {
color: #ff5722;
}
.form-group-material-brown.is-focused.label-placeholder label.control-label {
color: #795548;
}
.form-group-material-grey.is-focused.label-placeholder label.control-label {
color: #9e9e9e;
}
.form-group-material-blue-grey.is-focused.label-placeholder label.control-label {
color: #607d8b;
}
.form-group .form-control { .form-group .form-control {
margin-bottom: 8px; margin-bottom: 7px;
} }
.form-group .form-control::-moz-placeholder { .form-group .form-control::-moz-placeholder {
font-size: 16px; font-size: 16px;
@ -5382,19 +5473,23 @@ fieldset[disabled] .form-control {
font-size: 12px; font-size: 12px;
line-height: 1.07142857; line-height: 1.07142857;
} }
.form-group label.control-label.floating-label { .form-group.label-floating label.control-label,
top: -8px; .form-group.label-placeholder label.control-label {
top: -7px;
font-size: 16px; font-size: 16px;
line-height: 1.42857143; line-height: 1.42857143;
} }
.form-group.is-focused label.control-label.floating-label, .form-group.label-static label.control-label,
.form-group:not(.is-empty) label.control-label.floating-label { .form-group.label-floating.is-focused label.control-label,
top: -32px; .form-group.label-floating:not(.is-empty) label.control-label {
font-size: 12px; top: -30px;
line-height: 1.07142857; }
.form-group.form-group-sm {
margin: 21px 0 0 0;
padding-bottom: 3px;
} }
.form-group.form-group-sm .form-control { .form-group.form-group-sm .form-control {
margin-bottom: 4px; margin-bottom: 3px;
} }
.form-group.form-group-sm .form-control::-moz-placeholder { .form-group.form-group-sm .form-control::-moz-placeholder {
font-size: 11px; font-size: 11px;
@ -5413,19 +5508,23 @@ fieldset[disabled] .form-control {
font-size: 9px; font-size: 9px;
line-height: 1.125; line-height: 1.125;
} }
.form-group.form-group-sm label.control-label.floating-label { .form-group.form-group-sm.label-floating label.control-label,
top: -12px; .form-group.form-group-sm.label-placeholder label.control-label {
top: -11px;
font-size: 11px; font-size: 11px;
line-height: 1.5; line-height: 1.5;
} }
.form-group.form-group-sm.is-focused label.control-label.floating-label, .form-group.form-group-sm.label-static label.control-label,
.form-group.form-group-sm:not(.is-empty) label.control-label.floating-label { .form-group.form-group-sm.label-floating.is-focused label.control-label,
top: -27px; .form-group.form-group-sm.label-floating:not(.is-empty) label.control-label {
font-size: 9px; top: -25px;
line-height: 1.125; }
.form-group.form-group-lg {
margin: 30px 0 0 0;
padding-bottom: 9px;
} }
.form-group.form-group-lg .form-control { .form-group.form-group-lg .form-control {
margin-bottom: 10px; margin-bottom: 9px;
} }
.form-group.form-group-lg .form-control::-moz-placeholder { .form-group.form-group-lg .form-control::-moz-placeholder {
font-size: 18px; font-size: 18px;
@ -5444,16 +5543,16 @@ fieldset[disabled] .form-control {
font-size: 14px; font-size: 14px;
line-height: 0.99999998; line-height: 0.99999998;
} }
.form-group.form-group-lg label.control-label.floating-label { .form-group.form-group-lg.label-floating label.control-label,
top: -6px; .form-group.form-group-lg.label-placeholder label.control-label {
top: -5px;
font-size: 18px; font-size: 18px;
line-height: 1.3333333; line-height: 1.3333333;
} }
.form-group.form-group-lg.is-focused label.control-label.floating-label, .form-group.form-group-lg.label-static label.control-label,
.form-group.form-group-lg:not(.is-empty) label.control-label.floating-label { .form-group.form-group-lg.label-floating.is-focused label.control-label,
top: -34px; .form-group.form-group-lg.label-floating:not(.is-empty) label.control-label {
font-size: 14px; top: -32px;
line-height: 0.99999998;
} }
.form-group .help-block { .form-group .help-block {
position: absolute; position: absolute;
@ -5613,13 +5712,13 @@ select.form-control[multiple],
height: 85px; height: 85px;
} }
.input-group-btn .btn { .input-group-btn .btn {
margin: 0 0 8px 0; margin: 0 0 7px 0;
} }
.form-group.form-group-sm .input-group-btn .btn { .form-group.form-group-sm .input-group-btn .btn {
margin: 0 0 4px 0; margin: 0 0 3px 0;
} }
.form-group.form-group-lg .input-group-btn .btn { .form-group.form-group-lg .input-group-btn .btn {
margin: 0 0 10px 0; margin: 0 0 9px 0;
} }
.input-group .input-group-btn { .input-group .input-group-btn {
padding: 0 12px; padding: 0 12px;
@ -8523,10 +8622,10 @@ hr.on-light {
border: 0px; border: 0px;
background: transparent; background: transparent;
} }
.selectize-control.single .selectize-input.floating-label-fix input, .selectize-control.single .selectize-input.label-floating-fix input,
.selectize-control.multi .selectize-input.floating-label-fix input, .selectize-control.multi .selectize-input.label-floating-fix input,
.selectize-control.single .selectize-input.input-active.floating-label-fix input, .selectize-control.single .selectize-input.input-active.label-floating-fix input,
.selectize-control.multi .selectize-input.input-active.floating-label-fix input { .selectize-control.multi .selectize-input.input-active.label-floating-fix input {
opacity: 0; opacity: 0;
} }
.selectize-control.single .selectize-input > div, .selectize-control.single .selectize-input > div,

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

35
dist/js/material.js vendored
View File

@ -103,7 +103,7 @@
} }
}); });
// Legacy - Add floating label if using old shorthand <input class="floating-label" placeholder="foo"> // Legacy - Add label-floating if using old shorthand <input class="floating-label" placeholder="foo">
if ($input.hasClass("floating-label")) { if ($input.hasClass("floating-label")) {
var placeholder = $input.attr("placeholder"); var placeholder = $input.attr("placeholder");
$input.attr("placeholder", null).removeClass("floating-label"); $input.attr("placeholder", null).removeClass("floating-label");
@ -112,23 +112,24 @@
if(id) { if(id) {
forAttribute = "for='" + id + "'"; forAttribute = "for='" + id + "'";
} }
$input.after("<label " + forAttribute + "class='control-label floating-label'>" + placeholder + "</label>"); $formGroup.addClass('label-floating');
} $input.after("<label " + forAttribute + "class='control-label'>" + placeholder + "</label>");
else {
// If it has a label, based on the way the css is written with the adjacent sibling selector `~`,
// we need the label to be *after* the input for it to work properly. (we use these infrequently now that
// .is-focused and .is-empty is standardized on the .form-group.
// @see: http://stackoverflow.com/questions/1817792/is-there-a-previous-sibling-selector
// Attach it to the same parent, regardless (not necessarily after input) which could cause problems,
// but this is up to the user.
var $label = $formGroup.find("label.floating-label");
if($label.length > 0){
var $labelParent = $label.parent(); // likely the form-group, but may not be in the case of input-groups
$label.detach();
$labelParent.append($label);
//$input.after($label);
}
} }
//else {
// // If it has a label, based on the way the css is written with the adjacent sibling selector `~`,
// // we need the label to be *after* the input for it to work properly. (we use these infrequently now that
// // .is-focused and .is-empty is standardized on the .form-group.
// // @see: http://stackoverflow.com/questions/1817792/is-there-a-previous-sibling-selector
// // Attach it to the same parent, regardless (not necessarily after input) which could cause problems,
// // but this is up to the user.
// var $label = $formGroup.find("label.control-label");
// if($label.length > 0){
// var $labelParent = $label.parent(); // likely the form-group, but may not be in the case of input-groups
// $label.detach();
// $labelParent.append($label);
// //$input.after($label);
// }
//}
// Set as empty if is empty (damn I must improve this...) // Set as empty if is empty (damn I must improve this...)
if ($input.val() === null || $input.val() == "undefined" || $input.val() === "") { if ($input.val() === null || $input.val() == "undefined" || $input.val() === "") {

View File

@ -366,40 +366,55 @@
</h1> </h1>
<div class="inputs"> <div class="inputs">
<h2>Input <h2>Input label styles
<small>default sizing</small> <small>default sizing</small>
</h2> </h2>
<div class="form-group"> <div class="form-group label-static">
<label for="i2" class="control-label">Static label</label> <label for="i2" class="control-label">label-static</label>
<input type="email" class="form-control" id="i2" placeholder="Placeholder text"> <input type="email" class="form-control" id="i2" placeholder="placeholder attribute">
<p class="help-block">This is a hint as a <code>p.help-block.hint</code></p> <p class="help-block">This is a hint as a <code>p.help-block.hint</code></p>
</div> </div>
<div class="form-group"> <div class="form-group label-floating">
<label for="i5" class="control-label floating-label">Floating label</label> <label for="i5" class="control-label">label-floating</label>
<input type="email" class="form-control" id="i5"> <input type="email" class="form-control" id="i5">
<span class="help-block">This is a hint as a <code>span.help-block.hint</code></span> <span class="help-block">This is a hint as a <code>span.help-block.hint</code></span>
</div> </div>
<div class="form-group label-placeholder">
<label for="i5p" class="control-label">label-placeholder</label>
<input type="email" class="form-control" id="i5p">
<span class="help-block">This is a hint as a <code>span.help-block.hint</code></span>
</div>
<form>
<div class="form-group">
<label for="i5ps" class="control-label col-lg-2">Column label</label>
<div class="col-lg-10">
<input type="email" class="form-control" id="i5ps" placeholder="placeholder attribute">
<span class="help-block">This is a hint as a <code>span.help-block.hint</code></span>
</div>
</div>
</form>
<h2>Input - floating labels <h2>Input - floating labels
<small>form-group sizing</small> <small>form-group sizing</small>
</h2> </h2>
<div class="form-group form-group-sm"> <div class="form-group form-group-sm label-floating">
<label for="i4" class="control-label floating-label">Email address form-group-sm</label> <label for="i4" class="control-label">Email address form-group-sm</label>
<input type="email" class="form-control" id="i4"> <input type="email" class="form-control" id="i4">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group"> <div class="form-group label-floating">
<label for="i5i" class="control-label floating-label">Email address default size</label> <label for="i5i" class="control-label">Email address default size</label>
<input type="email" class="form-control" id="i5i"> <input type="email" class="form-control" id="i5i">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group form-group-lg"> <div class="form-group form-group-lg label-floating">
<label for="i6" class="control-label floating-label">Email address form-group-lg</label> <label for="i6" class="control-label">Email address form-group-lg</label>
<input type="email" class="form-control" id="i6"> <input type="email" class="form-control" id="i6">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
@ -408,19 +423,19 @@
<small>form-group sizing</small> <small>form-group sizing</small>
</h2> </h2>
<div class="form-group form-group-sm"> <div class="form-group form-group-sm label-static">
<label for="si4" class="control-label">Email address form-group-sm</label> <label for="si4" class="control-label">Email address form-group-sm</label>
<input type="email" class="form-control" id="si4" placeholder="Placeholder"> <input type="email" class="form-control" id="si4" placeholder="Placeholder">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group"> <div class="form-group label-static">
<label for="si5i" class="control-label">Email address default size</label> <label for="si5i" class="control-label">Email address default size</label>
<input type="email" class="form-control" id="si5i" placeholder="Placeholder"> <input type="email" class="form-control" id="si5i" placeholder="Placeholder">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group form-group-lg"> <div class="form-group form-group-lg label-static">
<label for="si6" class="control-label">Email address form-group-lg</label> <label for="si6" class="control-label">Email address form-group-lg</label>
<input type="email" class="form-control" id="si6" placeholder="Placeholder"> <input type="email" class="form-control" id="si6" placeholder="Placeholder">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
@ -431,17 +446,20 @@
</h2> </h2>
<div class="form-group form-group-sm"> <div class="form-group form-group-sm">
<input type="email" class="form-control" placeholder="Placeholder form-group-sm"> <label for="si4n" class="control-label">Email address form-group-sm</label>
<input type="email" class="form-control" id="si4n" placeholder="Placeholder">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="email" class="form-control" placeholder="Placeholder"> <label for="si5in" class="control-label">Email address default size</label>
<input type="email" class="form-control" id="si5in" placeholder="Placeholder">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group form-group-lg"> <div class="form-group form-group-lg">
<input type="email" class="form-control" placeholder="Placeholder form-group-lg"> <label for="si6n" class="control-label">Email address form-group-lg</label>
<input type="email" class="form-control" id="si6n" placeholder="Placeholder">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
@ -449,20 +467,20 @@
<h2>Input - <h2>Input -
<small>floating label feedback variants</small> <small>floating label feedback variants</small>
</h2> </h2>
<div class="form-group has-success"> <div class="form-group has-success label-floating">
<label for="f1" class="control-label floating-label">Email address has-success</label> <label for="f1" class="control-label">Email address has-success</label>
<input type="email" class="form-control" id="f1"> <input type="email" class="form-control" id="f1">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group has-warning"> <div class="form-group has-warning label-floating">
<label for="f2" class="control-label floating-label">Email address has-warning</label> <label for="f2" class="control-label">Email address has-warning</label>
<input type="email" class="form-control" id="f2"> <input type="email" class="form-control" id="f2">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
<div class="form-group has-error"> <div class="form-group has-error label-floating">
<label for="f3" class="control-label floating-label">Email address has-error</label> <label for="f3" class="control-label">Email address has-error</label>
<input type="email" class="form-control" id="f3"> <input type="email" class="form-control" id="f3">
<span class="help-block">Please enter a valid email address</span> <span class="help-block">Please enter a valid email address</span>
</div> </div>
@ -474,52 +492,61 @@
<h2>Textarea</h2> <h2>Textarea</h2>
<div class="form-group"> <div class="form-group label-floating">
<label for="t1" class="control-label floating-label">Floating label</label> <label for="t1" class="control-label">Floating label</label>
<textarea id="t1" class="form-control"></textarea> <textarea id="t1" class="form-control"></textarea>
</div> </div>
<div class="form-group"> <div class="form-group">
<textarea class="form-control" placeholder="placeholder without label"></textarea> <textarea class="form-control" placeholder="placeholder without label"></textarea>
</div> </div>
<div class="form-group">
<textarea class="form-control floating-label" placeholder="legacy floating label as placeholder"></textarea> <!-- legacy markup -->
</div> <textarea class="form-control floating-label" placeholder="legacy floating label as placeholder"></textarea>
<h2>Validation</h2> <h2>Validation</h2>
<div class="form-group"> <div class="form-group label-floating">
<input type="email" class="form-control floating-label" placeholder="email"> <label for="111">email</label>
<input type="email" class="form-control" id="111">
</div> </div>
<div class="form-group"> <div class="form-group label-floating">
<input type="number" class="form-control floating-label" placeholder="number"> <label for="222">number</label>
<input type="number" class="form-control" id="222">
</div> </div>
<h2>Disabled</h2> <h2>Disabled</h2>
<div class="form-group"> <div class="form-group label-floating">
<input disabled type="text" class="form-control floating-label" placeholder="email"> <label for="333">email</label>
<input disabled type="text" class="form-control" id="333">
</div> </div>
<div class="form-group"> <div class="form-group label-floating">
<input disabled type="text" class="form-control floating-label" placeholder="number"> <label for="444">number</label>
<input disabled type="text" class="form-control" id="444">
</div> </div>
<h2>Hints</h2> <h2>Hints</h2>
<div class="form-group"> <div class="form-group label-floating">
<input type="text" class="form-control floating-label" data-hint="Write here something cool" placeholder="label"> <label for="555">label</label>
<input type="text" class="form-control" id="555">
<p class="help-block">Some helpful hint</p>
</div> </div>
<div class="form-group"> <div class="form-group label-floating">
<input type="email" class="form-control floating-label" data-hint="A valid email should contain an @ symbol" placeholder="label"> <label for="676">label</label>
<input type="email" class="form-control" id="676">
<p class="help-block">A valid email contains an @ character</p>
</div> </div>
<h2>Styling</h2> <h2>Styling</h2>
<div class="form-group has-error"> <div class="form-group has-success">
<input type="text" class="form-control form-control-success" placeholder="label"> <input type="text" class="form-control" placeholder="placeholder">
</div> </div>
<div class="form-group has-error"> <div class="form-group has-success label-floating">
<input type="text" class="form-control form-control-success floating-label" placeholder="floating label"> <label for="777">floating label</label>
<input type="text" class="form-control" id="777">
</div> </div>
</div> </div>
</div> </div>

View File

@ -66,57 +66,63 @@
} }
} }
.form-group-size-variant(@placeholder-font-size, @vertical-padding, @line-height, @label-as-placeholder-shim){ .form-group-size-variant(@placeholder-font-size, @label-top-margin, @vertical-padding, @line-height, @label-as-placeholder-shim){
@static-font-size: ceil((@floating-label-size-ratio * @placeholder-font-size)); @static-font-size: ceil((@label-floating-size-ratio * @placeholder-font-size));
@static-line-height: (@floating-label-size-ratio * @line-height); @static-line-height: (@label-floating-size-ratio * @line-height);
@label-as-placeholder-top: -1 * (@vertical-padding + @label-as-placeholder-shim); @label-as-placeholder-top: -1 * (@vertical-padding + @label-as-placeholder-shim);
//@label-as-placeholder-top: -1 * (@line-height * @static-font-size); way too much on anything but sm @label-top: @label-as-placeholder-top - (@placeholder-font-size + @vertical-padding);
@help-block-font-size: ceil((@help-block-size-ratio * @placeholder-font-size)); @help-block-font-size: ceil((@help-block-size-ratio * @placeholder-font-size));
@help-block-line-height: (@help-block-size-ratio * @line-height); @help-block-line-height: (@help-block-size-ratio * @line-height);
// 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;
.form-control { .form-control {
.material-placeholder({ .material-placeholder({
font-size: @placeholder-font-size; font-size: @placeholder-font-size;
}); });
margin-bottom: @vertical-padding; margin-bottom: @vertical-padding; // must be specified to give help-block vertical space
//border: 1px solid;
} }
// upon collapsing margins, the largest margin is honored which collapses the form-control margin, so the form-control margin
// must also be expressed as form-group padding
padding-bottom: @vertical-padding;
.help-block { .help-block {
margin-top: 0px; // allow the input margin to set-off the top of the help-block margin-top: 0px; // allow the input margin to set-off the top of the help-block
font-size: @help-block-font-size; font-size: @help-block-font-size;
//border: 1px solid;
} }
label.control-label { // static label // smaller focused or static size
font-size: @static-font-size; // static (smaller of the two) label.control-label {
font-size: @static-font-size;
line-height: @static-line-height; line-height: @static-line-height;
&.floating-label { // as placeholder (full 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 top: @label-as-placeholder-top; // place the floating label to look like a placeholder with input padding
font-size: @placeholder-font-size; font-size: @placeholder-font-size;
line-height: @line-height; line-height: @line-height;
} }
//border: 1px solid;
} }
// sizing of focused/open/labels // static or focused floating labels
&.is-focused, &.label-static,
&:not(.is-empty) { &.label-floating.is-focused,
label.control-label.floating-label { &.label-floating:not(.is-empty) {
top: @label-as-placeholder-top - (@placeholder-font-size + @vertical-padding); label.control-label {
font-size: @static-font-size; top: @label-top;
line-height: @static-line-height;
} }
} }
} }
.form-group { .form-group {
border: solid 1px red; //border: solid 1px red;
position: relative; position: relative;
// ---- // ----
@ -134,34 +140,45 @@
// Reference http://www.google.com/design/spec/components/text-fields.html // Reference http://www.google.com/design/spec/components/text-fields.html
// MDL implementation: http://www.getmdl.io/components/index.html#textfields-section // MDL implementation: http://www.getmdl.io/components/index.html#textfields-section
label.control-label { // static label &.label-static,
&.label-placeholder,
// same label properties as form-group placeholder. could be shared with a ruleset but makes sass conversion painful &.label-floating {
color: @input-placeholder-color; label.control-label {
font-weight: normal;
margin: 16px 0 0 0; // std and lg
&.floating-label {
position: absolute; position: absolute;
pointer-events: none;
left: 0px; left: 0px;
pointer-events: none;
transition: 0.3s ease all; transition: 0.3s ease all;
} }
} }
label.control-label {
// same label properties as form-group placeholder
color: @input-placeholder-color;
font-weight: normal;
margin: 16px 0 0 0; // std and lg
}
// hide label-placeholders when the field is not empty
&.label-placeholder:not(.is-empty){
label.control-label{
display: none;
}
}
.variations(~" label.control-label", color, @input-placeholder-color); // default label color variations .variations(~" label.control-label", color, @input-placeholder-color); // default label color variations
.variations(~".is-focused label.control-label", color, @input-default); // focused label color variations .variations(~".is-focused label.control-label", color, @input-default); // focused label color variations
.variations(~".is-focused.label-placeholder label.control-label", color, @input-placeholder-color); // default label color variations
// default floating size/location // default floating size/location
.form-group-size-variant(@md-input-font-size-base, @md-input-padding-base-vertical, @md-input-line-height-base, @md-label-as-placeholder-shim-base); .form-group-size-variant(@md-input-font-size-base, @md-label-top-margin-base, @md-input-padding-base-vertical, @md-input-line-height-base, @md-label-as-placeholder-shim-base);
// sm floating size/location // sm floating size/location
&.form-group-sm { &.form-group-sm {
.form-group-size-variant(@md-input-font-size-small, @md-input-padding-small-vertical, @md-input-line-height-small, @md-label-as-placeholder-shim-small); .form-group-size-variant(@md-input-font-size-small, @md-label-top-margin-small, @md-input-padding-small-vertical, @md-input-line-height-small, @md-label-as-placeholder-shim-small);
} }
// lg floating size/location // lg floating size/location
&.form-group-lg { &.form-group-lg {
.form-group-size-variant(@md-input-font-size-large, @md-input-padding-large-vertical, @md-input-line-height-large, @md-label-as-placeholder-shim-large); .form-group-size-variant(@md-input-font-size-large, @md-label-top-margin-large, @md-input-padding-large-vertical, @md-input-line-height-large, @md-label-as-placeholder-shim-large);
} }
// Hints - position: absolute approach - uses no vertical space, text wrapping - not so good. // Hints - position: absolute approach - uses no vertical space, text wrapping - not so good.

View File

@ -37,7 +37,7 @@
border: 0px; border: 0px;
background: transparent; background: transparent;
} }
&.floating-label-fix input { &.label-floating-fix input {
opacity: 0; opacity: 0;
} }
> div, > .item { > div, > .item {

View File

@ -84,7 +84,7 @@
// -------------------- // --------------------
// inputs // inputs
@input-placeholder-color: #BDBDBD; @input-placeholder-color: #BDBDBD;
@floating-label-size-ratio: 75 / 100; @label-floating-size-ratio: 75 / 100;
@help-block-size-ratio: 75 / 100; @help-block-size-ratio: 75 / 100;
@input-underline-color: #D2D2D2; @input-underline-color: #D2D2D2;
@ -93,9 +93,9 @@
@md-input-font-size-small: ceil((@font-size-base * 0.75)); // ~12px @md-input-font-size-small: ceil((@font-size-base * 0.75)); // ~12px
// size when static or floating with focus i.e. 16px // size when static or floating with focus i.e. 16px
//@md-input-label-font-size-base: ceil((@floating-label-size-ratio * @md-input-font-size-base)); //@md-input-label-font-size-base: ceil((@label-floating-size-ratio * @md-input-font-size-base));
//@md-input-label-font-size-small:ceil(( @floating-label-size-ratio * @md-input-font-size-small)); //@md-input-label-font-size-small:ceil(( @label-floating-size-ratio * @md-input-font-size-small));
//@md-input-label-font-size-large: ceil((@floating-label-size-ratio * @md-input-font-size-large)); //@md-input-label-font-size-large: ceil((@label-floating-size-ratio * @md-input-font-size-large));
//** Unit-less `line-height` for use in components like buttons. //** Unit-less `line-height` for use in components like buttons.
@md-input-line-height-base: 1.428571429; // 20/14 @md-input-line-height-base: 1.428571429; // 20/14
@ -105,17 +105,20 @@
@md-input-line-height-small: 1.5; @md-input-line-height-small: 1.5;
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start). //## 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; // was 6. @md-input-padding-base-vertical: 8px - 1px; // was 6.
@md-input-padding-base-horizontal: 0px; // was 12. @md-input-padding-base-horizontal: 0px; // was 12.
@md-label-as-placeholder-shim-base: 0px; // manual adjustment of label top when positioned as placeholder @md-label-as-placeholder-shim-base: 0px; // manual adjustment of label top when positioned as placeholder
@md-label-top-margin-base: 16px;
@md-input-padding-large-vertical: 10px; // 10 @md-input-padding-large-vertical: 10px - 1px; // 10
@md-input-padding-large-horizontal: 0px; // 16 @md-input-padding-large-horizontal: 0px; // 16
@md-label-as-placeholder-shim-large: -4px; // manual adjustment of label top when positioned as placeholder @md-label-as-placeholder-shim-large: -4px; // manual adjustment of label top when positioned as placeholder
@md-label-top-margin-large: 16px;
@md-input-padding-small-vertical: 4px; // 5 @md-input-padding-small-vertical: 4px - 1px; // 5
@md-input-padding-small-horizontal: 0px; // 10 @md-input-padding-small-horizontal: 0px; // 10
@md-label-as-placeholder-shim-small: 8px; // manual adjustment of label top when positioned as placeholder @md-label-as-placeholder-shim-small: 8px; // manual adjustment of label top when positioned as placeholder
@md-label-top-margin-small: 12px;
@md-input-padding-xs-vertical: 2px; // 1 @md-input-padding-xs-vertical: 2px; // 1
@md-input-padding-xs-horizontal: 0px; // 5 @md-input-padding-xs-horizontal: 0px; // 5

View File

@ -103,7 +103,7 @@
} }
}); });
// Legacy - Add floating label if using old shorthand <input class="floating-label" placeholder="foo"> // Legacy - Add label-floating if using old shorthand <input class="floating-label" placeholder="foo">
if ($input.hasClass("floating-label")) { if ($input.hasClass("floating-label")) {
var placeholder = $input.attr("placeholder"); var placeholder = $input.attr("placeholder");
$input.attr("placeholder", null).removeClass("floating-label"); $input.attr("placeholder", null).removeClass("floating-label");
@ -112,23 +112,24 @@
if(id) { if(id) {
forAttribute = "for='" + id + "'"; forAttribute = "for='" + id + "'";
} }
$input.after("<label " + forAttribute + "class='control-label floating-label'>" + placeholder + "</label>"); $formGroup.addClass('label-floating');
} $input.after("<label " + forAttribute + "class='control-label'>" + placeholder + "</label>");
else {
// If it has a label, based on the way the css is written with the adjacent sibling selector `~`,
// we need the label to be *after* the input for it to work properly. (we use these infrequently now that
// .is-focused and .is-empty is standardized on the .form-group.
// @see: http://stackoverflow.com/questions/1817792/is-there-a-previous-sibling-selector
// Attach it to the same parent, regardless (not necessarily after input) which could cause problems,
// but this is up to the user.
var $label = $formGroup.find("label.floating-label");
if($label.length > 0){
var $labelParent = $label.parent(); // likely the form-group, but may not be in the case of input-groups
$label.detach();
$labelParent.append($label);
//$input.after($label);
}
} }
//else {
// // If it has a label, based on the way the css is written with the adjacent sibling selector `~`,
// // we need the label to be *after* the input for it to work properly. (we use these infrequently now that
// // .is-focused and .is-empty is standardized on the .form-group.
// // @see: http://stackoverflow.com/questions/1817792/is-there-a-previous-sibling-selector
// // Attach it to the same parent, regardless (not necessarily after input) which could cause problems,
// // but this is up to the user.
// var $label = $formGroup.find("label.control-label");
// if($label.length > 0){
// var $labelParent = $label.parent(); // likely the form-group, but may not be in the case of input-groups
// $label.detach();
// $labelParent.append($label);
// //$input.after($label);
// }
//}
// Set as empty if is empty (damn I must improve this...) // Set as empty if is empty (damn I must improve this...)
if ($input.val() === null || $input.val() == "undefined" || $input.val() === "") { if ($input.val() === null || $input.val() == "undefined" || $input.val() === "") {