// // Forms // -------------------------------------------------- // GENERAL STYLES // -------------- // Make all forms have space below them form margin: 0 0 $baseLineHeight fieldset padding: 0 margin: 0 border: 0 // Groups of fields with labels on top (legends) legend display: block width: 100% padding: 0 margin-bottom: $baseLineHeight font-size: $baseFontSize * 1.5 line-height: $baseLineHeight * 2 color: $grayDark border: 0 border-bottom: 1px solid #e5e5e5 // Small small font-size: $baseLineHeight * 0.75 color: $grayLight // Set font for forms label, input, button, select, textarea +font-shorthand($baseFontSize, normal, $baseLineHeight) // Set size, weight, line-height here input, button, select, text-area font-family: $baseFontFamily // And only set font-family here for those that need it (note the missing label element) // Identify controls by their labels label display: block margin-bottom: 5px // Form controls // ------------------------- // Shared size and type resets select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input display: inline-block height: $baseLineHeight padding: 4px 6px margin-bottom: 9px font-size: $baseFontSize line-height: $baseLineHeight color: $gray +border-radius($inputBorderRadius) // Reset appearance properties for textual inputs and textarea // Declare width for legacy (can't be on input[type=*] selectors or it's too specific) input, textarea width: 210px // Reset height since textareas have rows textarea height: auto // Everything else textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input background-color: $inputBackground border: 1px solid $inputBorder +box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.075)) $transition: border linear 0.2s, box-shadow linear 0.2s +transition($transition) // Focus state &:focus border-color: rgba(82, 168, 236, 0.8) outline: 0 outline: thin dotted \9 /* IE6-9 */ $shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6) +box-shadow($shadow) //Position radios and checkboxes better input[type="radio"], input[type="checkbox"] margin: 4px 0 0 *margin-top: 0 /* IE7 */ margin-top: 1px \9 /* IE8-9 */ line-height: normal cursor: pointer // Reset width of input buttons, radios, checkboxes input[type="file"], input[type="submit"], input[type="reset"], input[type="button"], input[type="radio"], input[type="checkbox"] width: auto // Override of generic input selector // Set the height of select and file controls to match text inputs select, input[type="file"] height: 30px /* In IE7, the height of the select element cannot be changed by height, only font-size */ *margin-top: 4px /* For IE7, add top margin to align select with labels */ line-height: 30px // Make select elements obey height by applying a border select width: 220px // default input width + 10px of padding that doesn't get applied border: 1px solid #bbb background-color: $inputBackground // Chrome on Linux and Mobile Safari need background-color // Make multiple select elements height not fixed select[multiple], select[size] height: auto // Focus for select, file, radio, and checkbox select:focus, input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus +tab-focus // Uneditable inputs // ------------------------- // Make uneditable inputs look inactive .uneditable-input, .uneditable-textarea color: $grayLight background-color: darken($inputBackground, 1%) border-color: $inputBorder +box-shadow(inset 0 1px 2px rgba(0,0,0,.025)) cursor: not-allowed // For text that needs to appear as an input but should not be an input .uneditable-input overflow: hidden // prevent text from wrapping, but still cut it off like an input does white-space: nowrap // Make uneditable textareas behave like a textarea .uneditable-textarea width: auto height: auto // Placeholder // ------------------------- // Placeholder text gets special styles; can't be bundled together though for some reason input, textarea +placeholder // CHECKBOXES & RADIOS // ------------------- // Indent the labels to position radios/checkboxes as hanging .radio, .checkbox min-height: 18px // clear the floating input if there is no label text padding-left: 18px .radio input[type="radio"], .checkbox input[type="checkbox"] float: left margin-left: -18px // Move the options list down to align with labels .controls > .radio:first-child, .controls > .checkbox:first-child padding-top: 5px // has to be padding because margin collaspes // Radios and checkboxes on same line .radio.inline, .checkbox.inline display: inline-block padding-top: 5px margin-bottom: 0 vertical-align: middle .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline margin-left: 10px // space out consecutive inline controls // INPUT SIZES // ----------- // General classes for quick sizes .input-mini width: 60px .input-small width: 90px .input-medium width: 150px .input-large width: 210px .input-xlarge width: 270px .input-xxlarge width: 530px // Grid style input sizes input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"] float: none margin-left: 0 // Ensure input-prepend/append never wraps .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] display: inline-block // GRID SIZING FOR INPUTS // ---------------------- // Grid sizes +input-grid-generate($gridColumnWidth, $gridGutterWidth) // Control row for multiple inputs per line .controls-row +clearfix // Clear the float from controls .controls-row [class*="span"] float: left // Float to collapse white-space for proper grid alignment // DISABLED STATE // -------------- // Disabled and read-only inputs input[disabled], select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] cursor: not-allowed background-color: $inputDisabledBackground // Explicitly reset the colors here input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"][readonly], input[type="checkbox"][readonly] background-color: transparent // FORM FIELD FEEDBACK STATES // -------------------------- .control-group.warning +form-field-state($warningText, $warningText, $warningBackground) .control-group.error +form-field-state($errorText, $errorText, $errorBackground) .control-group.success +form-field-state($successText, $successText, $successBackground) // HTML5 invalid states // Shares styles with the .control-group.error above input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid color: #b94a48 border-color: #ee5f5b &:focus border-color: darken(#ee5f5b, 10%) +box-shadow(0 0 6px lighten(#ee5f5b, 20%)) // FORM ACTIONS // ------------ .form-actions padding: ($baseLineHeight - 1) 20px $baseLineHeight margin-top: $baseLineHeight margin-bottom: $baseLineHeight background-color: $formActionsBackground border-top: 1px solid #e5e5e5 +clearfix // Adding clearfix to allow for .pull-right button containers // HELP TEXT // --------- .help-block, .help-inline color: lighten($textColor, 15%) // lighten the text some for contrast .help-block display: block // account for any element using help-block margin-bottom: $baseLineHeight / 2 .help-inline display: inline-block +ie7-inline-block vertical-align: middle padding-left: 5px // INPUT GROUPS // ------------ // Allow us to put symbols and text within the input field for a cleaner look .input-append, .input-prepend margin-bottom: 5px font-size: 0 white-space: nowrap // Prevent span and input from separating input, select, .uneditable-input position: relative // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness margin-bottom: 0 // prevent bottom margin from screwing up alignment in stacked forms *margin-left: 0 font-size: $baseFontSize vertical-align: top +border-radius(0 $inputBorderRadius $inputBorderRadius 0) // Make input on top when focused so blue border and shadow always show &:focus z-index: 2 .add-on display: inline-block width: auto height: $baseLineHeight min-width: 16px padding: 4px 5px font-size: $baseFontSize font-weight: normal line-height: $baseLineHeight text-align: center text-shadow: 0 1px 0 $white background-color: $grayLighter border: 1px solid #ccc .add-on, .btn margin-left: -1px vertical-align: top +border-radius(0) .active background-color: lighten($green, 30) border-color: $green .input-prepend .add-on, .btn margin-right: -1px .add-on:first-child, .btn:first-child +border-radius($inputBorderRadius 0 0 $inputBorderRadius) .input-append input, select, .uneditable-input +border-radius($inputBorderRadius 0 0 $inputBorderRadius) .add-on:last-child, .btn:last-child +border-radius(0 $inputBorderRadius $inputBorderRadius 0) // Remove all border-radius for inputs with both prepend and append .input-prepend.input-append input, select, .uneditable-input +border-radius(0) .add-on:first-child, .btn:first-child margin-right: -1px +border-radius($inputBorderRadius 0 0 $inputBorderRadius) .add-on:last-child, .btn:last-child margin-left: -1px +border-radius(0 $inputBorderRadius $inputBorderRadius 0) // SEARCH FORM // ----------- input.search-query padding-right: 14px padding-right: 4px \9 padding-left: 14px padding-left: 4px \9 /* IE7-8 doesn't have border-radius, so don't indent the padding */ margin-bottom: 0 // Remove the default margin on all inputs +border-radius(15px) // Allow for input prepend/append in search forms .form-search .input-append .search-query, .form-search .input-prepend .search-query +border-radius(0) // Override due to specificity .form-search .input-append .search-query +border-radius(14px 0 0 14px) .form-search .input-append .btn +border-radius(0 14px 14px 0) .form-search .input-prepend .search-query +border-radius(0 14px 14px 0) .form-search .input-prepend .btn +border-radius(14px 0 0 14px) // HORIZONTAL & VERTICAL FORMS // --------------------------- // Common properties // ----------------- .form-search, .form-inline, .form-horizontal input, textarea, select, .help-inline, .uneditable-input, .input-prepend, .input-append display: inline-block +ie7-inline-block margin-bottom: 0 vertical-align: middle // Re-hide hidden elements due to specifity .hide display: none .form-search label, .form-inline label, .form-search .btn-group, .form-inline .btn-group display: inline-block // Remove margin for input-prepend/-append .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend margin-bottom: 0 // Inline checkbox/radio labels (remove padding on left) .form-search .radio, .form-inline .radio, .form-search .checkbox, .form-inline .checkbox padding-left: 0 margin-bottom: 0 vertical-align: middle // Remove float and margin, set to inline-block .form-search .radio input[type="radio"], .form-search .checkbox input[type="checkbox"], .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] float: left margin-right: 3px margin-left: 0 // Margin to space out fieldsets .control-group margin-bottom: $baseLineHeight / 2 // Legend collapses margin, so next element is responsible for spacing legend + .control-group margin-top: $baseLineHeight -webkit-margin-top-collapse: separate // Horizontal-specific styles // -------------------------- .form-horizontal // Increase spacing between groups .control-group margin-bottom: $baseLineHeight +clearfix // Float the labels left .control-label float: left width: 140px padding-top: 5px text-align: right // Move over all input controls and content .controls // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend // don't inherit the margin of the parent, in this case .controls *display: inline-block *padding-left: 20px margin-left: 160px *margin-left: 0 &:first-child *padding-left: 160px // Remove bottom margin on block level help text since that's accounted for on .control-group .help-block margin-top: $baseLineHeight / 2 margin-bottom: 0 // Move over buttons in .form-actions to align with .controls .form-actions padding-left: 160px