// // 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 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; 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 { .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 { .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; } } } }