UNPKG

elemental

Version:
294 lines (216 loc) 4.8 kB
// // Forms // ============================== // Labels // ------------------------------ .FormLabel { .transition( color @form-animation-duration ); color: @form-label-color; display: inline-block; margin-bottom: @spacing-sm; } // Groups // ------------------------------ .FormField { margin-bottom: @spacing-md; position: relative; } // Form Rows // ------------------------------ .FormRow { &:extend(.u-clearfix all); } @media (min-width: @screen-sm) { .FormRow { margin: 0 -(@input-padding-horizontal / 2) @spacing-md; min-width: 100%; > .FormField { display: block; // override .Form--horizontal styles inside .FormRow float: left; padding: 0 (@input-padding-horizontal / 2); // sizes &.one-half, &.two-quarters, &.three-sixths { width: 50%; } &.one-quarter { width: 25%; } &.three-quarters { width: 75%; } &.one-third, &.two-sixths { width: 33.333%; } &.two-thirds, &.four-sixths { width: 66.666%; } &.one-fifth { width: 20%; } &.two-fifths { width: 40%; } &.three-fifths { width: 60%; } &.four-fifths { width: 80%; } &.one-sixth { width: 16.666%; } &.five-sixths { width: 83.333%; } } } // inside a form field .FormField .FormRow { margin-bottom: 0; } } // Validation // ------------------------------ // message .form-validation { .animation( formValidationMessage @form-animation-duration ease ); font-size: @font-size-xs; margin-top: .5em; overflow: hidden; .is-invalid & { color: @app-danger; } .is-valid & { color: @app-success; } } @-webkit-keyframes formValidationMessage { from { max-height: 0; opacity: 0; } to { max-height: @font-size-base; opacity: 1; } } @keyframes formValidationMessage { from { max-height: 0; opacity: 0; } to { max-height: @font-size-base; opacity: 1; } } // effects on other elements .FormField.is-invalid { .FormLabel { color: @app-danger; } .FormInput { border-color: @app-danger; &:focus { border-color: @app-danger; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px fade(@app-danger, 10%); } } } .FormField.is-valid { .FormLabel { color: @app-success; } .FormInput { border-color: @app-success; &:focus { border-color: @app-success; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px fade(@app-success, 10%); } } } // ============================== // Field Types // ============================== // Checkbox & Radio // ------------------------------ .Checkbox, .Radio { display: block; margin-bottom: .5em; } // fix alignment with checkbox label // margin top is innefective on checkboxes .Checkbox__input { position: relative; top: -1px; } .Checkbox__label, .Radio__label { margin-left: .5em; } .inline-controls > .Checkbox, .inline-controls > .Radio, .Checkbox--inline, .Radio--inline { display: inline-block; margin-right: 1em; } .Checkbox--disabled, .Radio--disabled { color: @control-disabled-color; } @media (min-width: @screen-sm) { .Checkbox, .Radio { line-height: @component-height; } } // ============================== // Form Types // ============================== // Horizontal Form // ------------------------------ // 1. ensure stacking on mobile // 2. add spacing above the element when it's stacked. no need to remove at // higher break-points because it becomes a table cell, which aren't // effected by margin .Form--horizontal { .FormLabel { display: block; // 1 &:not(:first-child) { margin-top: @spacing-md; // 2 } } } @media (min-width: @screen-sm) { .Form--horizontal { // Make the wrapper behave like a table .FormField { display: table; table-layout: fixed; width: 100%; &.offset-absent-label { padding-left: @form-label-width; } } // Fix the label width to allow the field to stretch .FormLabel { display: table-cell; line-height: @component-height; margin-bottom: 0; vertical-align: top; width: @form-label-width; &:not(:first-child) { padding-left: @grid-gutter-width; } } // reset styles when using rows inside .Form--horizontal .FormRow > .FormField { display: block; margin-bottom: 0; min-width: 0; > .FormLabel { display: block; } .FormInput { margin: 0; width: 100%; } } } } // Inline Form // ------------------------------ @media (min-width: @screen-sm) { .Form--inline { .Checkbox, .Radio, .FormField { display: inline-block; padding-left: .25em; padding-right: .25em; vertical-align: top; &:first-child { padding-left: 0; } &:last-child { padding-right: 0; } } .Checkbox, .Radio { line-height: 2.4em; margin: 0 @input-padding-horizontal; } .FormLabel { .u-hidden-visually(); } } }