3 // --------------------------------------------------
9 // Make all forms have space below them
11 margin: 0 0 @baseLineHeight;
20 // Groups of fields with labels on top (legends)
25 margin-bottom: @baseLineHeight;
26 font-size: @baseFontSize * 1.5;
27 line-height: @baseLineHeight * 2;
30 border-bottom: 1px solid #e5e5e5;
34 font-size: @baseLineHeight * .75;
45 #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here
51 font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element)
54 // Identify controls by their labels
61 // -------------------------
63 // Shared size and type resets
67 input[type="password"],
68 input[type="datetime"],
69 input[type="datetime-local"],
81 display: inline-block;
82 height: @baseLineHeight;
84 margin-bottom: @baseLineHeight / 2;
85 font-size: @baseFontSize;
86 line-height: @baseLineHeight;
88 .border-radius(@inputBorderRadius);
89 vertical-align: middle;
92 // Reset appearance properties for textual inputs and textarea
93 // Declare width for legacy (can't be on input[type=*] selectors or it's too specific)
97 width: 206px; // plus 12px padding and 2px border
99 // Reset height since textareas have rows
106 input[type="password"],
107 input[type="datetime"],
108 input[type="datetime-local"],
113 input[type="number"],
116 input[type="search"],
120 background-color: @inputBackground;
121 border: 1px solid @inputBorder;
122 .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
123 .transition(~"border linear .2s, box-shadow linear .2s");
127 border-color: rgba(82,168,236,.8);
129 outline: thin dotted \9; /* IE6-9 */
130 .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
134 // Position radios and checkboxes better
136 input[type="checkbox"] {
138 *margin-top: 0; /* IE7 */
139 margin-top: 1px \9; /* IE8-9 */
143 // Reset width of input images, buttons, radios, checkboxes
146 input[type="submit"],
148 input[type="button"],
150 input[type="checkbox"] {
151 width: auto; // Override of generic input selector
154 // Set the height of select and file controls to match text inputs
157 height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */
158 *margin-top: 4px; /* For IE7, add top margin to align select with labels */
159 line-height: @inputHeight;
162 // Make select elements obey height by applying a border
164 width: 220px; // default input width + 10px of padding that doesn't get applied
165 border: 1px solid @inputBorder;
166 background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color
169 // Make multiple select elements height not fixed
175 // Focus for select, file, radio, and checkbox
177 input[type="file"]:focus,
178 input[type="radio"]:focus,
179 input[type="checkbox"]:focus {
185 // -------------------------
187 // Make uneditable inputs look inactive
189 .uneditable-textarea {
191 background-color: darken(@inputBackground, 1%);
192 border-color: @inputBorder;
193 .box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
197 // For text that needs to appear as an input but should not be an input
199 overflow: hidden; // prevent text from wrapping, but still cut it off like an input does
203 // Make uneditable textareas behave like a textarea
204 .uneditable-textarea {
211 // -------------------------
213 // Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector
220 // CHECKBOXES & RADIOS
221 // -------------------
223 // Indent the labels to position radios/checkboxes as hanging
226 min-height: @baseLineHeight; // clear the floating input if there is no label text
229 .radio input[type="radio"],
230 .checkbox input[type="checkbox"] {
235 // Move the options list down to align with labels
236 .controls > .radio:first-child,
237 .controls > .checkbox:first-child {
238 padding-top: 5px; // has to be padding because margin collaspes
241 // Radios and checkboxes on same line
242 // TODO v3: Convert .inline to .control-inline
245 display: inline-block;
248 vertical-align: middle;
250 .radio.inline + .radio.inline,
251 .checkbox.inline + .checkbox.inline {
252 margin-left: 10px; // space out consecutive inline controls
260 // General classes for quick sizes
261 .input-mini { width: 60px; }
262 .input-small { width: 90px; }
263 .input-medium { width: 150px; }
264 .input-large { width: 210px; }
265 .input-xlarge { width: 270px; }
266 .input-xxlarge { width: 530px; }
268 // Grid style input sizes
269 input[class*="span"],
270 select[class*="span"],
271 textarea[class*="span"],
272 .uneditable-input[class*="span"],
273 // Redeclare since the fluid row class is more specific
274 .row-fluid input[class*="span"],
275 .row-fluid select[class*="span"],
276 .row-fluid textarea[class*="span"],
277 .row-fluid .uneditable-input[class*="span"] {
281 // Ensure input-prepend/append never wraps
282 .input-append input[class*="span"],
283 .input-append .uneditable-input[class*="span"],
284 .input-prepend input[class*="span"],
285 .input-prepend .uneditable-input[class*="span"],
286 .row-fluid input[class*="span"],
287 .row-fluid select[class*="span"],
288 .row-fluid textarea[class*="span"],
289 .row-fluid .uneditable-input[class*="span"],
290 .row-fluid .input-prepend [class*="span"],
291 .row-fluid .input-append [class*="span"] {
292 display: inline-block;
297 // GRID SIZING FOR INPUTS
298 // ----------------------
301 #grid > .input(@gridColumnWidth, @gridGutterWidth);
303 // Control row for multiple inputs per line
305 .clearfix(); // Clear the float from controls
308 // Float to collapse white-space for proper grid alignment
309 .controls-row [class*="span"],
310 // Redeclare the fluid grid collapse since we undo the float for inputs
311 .row-fluid .controls-row [class*="span"] {
314 // Explicity set top padding on all checkboxes/radios, not just first-child
315 .controls-row .checkbox[class*="span"],
316 .controls-row .radio[class*="span"] {
326 // Disabled and read-only inputs
334 background-color: @inputDisabledBackground;
336 // Explicitly reset the colors here
337 input[type="radio"][disabled],
338 input[type="checkbox"][disabled],
339 input[type="radio"][readonly],
340 input[type="checkbox"][readonly] {
341 background-color: transparent;
347 // FORM FIELD FEEDBACK STATES
348 // --------------------------
351 .control-group.warning {
352 .formFieldState(@warningText, @warningText, @warningBackground);
355 .control-group.error {
356 .formFieldState(@errorText, @errorText, @errorBackground);
359 .control-group.success {
360 .formFieldState(@successText, @successText, @successBackground);
363 .control-group.info {
364 .formFieldState(@infoText, @infoText, @infoBackground);
367 // HTML5 invalid states
368 // Shares styles with the .control-group.error above
370 textarea:focus:invalid,
371 select:focus:invalid {
373 border-color: #ee5f5b;
375 border-color: darken(#ee5f5b, 10%);
376 @shadow: 0 0 6px lighten(#ee5f5b, 20%);
377 .box-shadow(@shadow);
387 padding: (@baseLineHeight - 1) 20px @baseLineHeight;
388 margin-top: @baseLineHeight;
389 margin-bottom: @baseLineHeight;
390 background-color: @formActionsBackground;
391 border-top: 1px solid #e5e5e5;
392 .clearfix(); // Adding clearfix to allow for .pull-right button containers
402 color: lighten(@textColor, 15%); // lighten the text some for contrast
406 display: block; // account for any element using help-block
407 margin-bottom: @baseLineHeight / 2;
411 display: inline-block;
413 vertical-align: middle;
422 // Allow us to put symbols and text within the input field for a cleaner look
425 display: inline-block;
426 margin-bottom: @baseLineHeight / 2;
427 vertical-align: middle;
428 font-size: 0; // white space collapse hack
429 white-space: nowrap; // Prevent span and input from separating
431 // Reset the white space collapse hack
437 font-size: @baseFontSize;
443 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
444 margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms
447 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
448 // Make input on top when focused so blue border and shadow always show
454 display: inline-block;
456 height: @baseLineHeight;
459 font-size: @baseFontSize;
461 line-height: @baseLineHeight;
463 text-shadow: 0 1px 0 @white;
464 background-color: @grayLighter;
465 border: 1px solid #ccc;
469 .btn-group > .dropdown-toggle {
474 background-color: lighten(@green, 30);
475 border-color: @green;
486 // FYI, `.btn:first-child` accounts for a button group that's prepended
487 .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
495 .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
496 + .btn-group .btn:last-child {
497 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
507 .btn-group:last-child > .dropdown-toggle {
508 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
512 // Remove all border-radius for inputs with both prepend and append
513 .input-prepend.input-append {
519 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
525 .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
530 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
532 .btn-group:first-child {
545 padding-right: 4px \9;
547 padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
548 margin-bottom: 0; // Remove the default margin on all inputs
549 .border-radius(15px);
552 /* Allow for input prepend/append in search forms */
553 .form-search .input-append .search-query,
554 .form-search .input-prepend .search-query {
555 .border-radius(0); // Override due to specificity
557 .form-search .input-append .search-query {
558 .border-radius(14px 0 0 14px);
560 .form-search .input-append .btn {
561 .border-radius(0 14px 14px 0);
563 .form-search .input-prepend .search-query {
564 .border-radius(0 14px 14px 0);
566 .form-search .input-prepend .btn {
567 .border-radius(14px 0 0 14px);
573 // HORIZONTAL & VERTICAL FORMS
574 // ---------------------------
589 display: inline-block;
592 vertical-align: middle;
594 // Re-hide hidden elements due to specifity
601 .form-search .btn-group,
602 .form-inline .btn-group {
603 display: inline-block;
605 // Remove margin for input-prepend/-append
606 .form-search .input-append,
607 .form-inline .input-append,
608 .form-search .input-prepend,
609 .form-inline .input-prepend {
612 // Inline checkbox/radio labels (remove padding on left)
614 .form-search .checkbox,
616 .form-inline .checkbox {
619 vertical-align: middle;
621 // Remove float and margin, set to inline-block
622 .form-search .radio input[type="radio"],
623 .form-search .checkbox input[type="checkbox"],
624 .form-inline .radio input[type="radio"],
625 .form-inline .checkbox input[type="checkbox"] {
632 // Margin to space out fieldsets
634 margin-bottom: @baseLineHeight / 2;
637 // Legend collapses margin, so next element is responsible for spacing
638 legend + .control-group {
639 margin-top: @baseLineHeight;
640 -webkit-margin-top-collapse: separate;
643 // Horizontal-specific styles
644 // --------------------------
647 // Increase spacing between groups
649 margin-bottom: @baseLineHeight;
652 // Float the labels left
655 width: @horizontalComponentOffset - 20;
659 // Move over all input controls and content
661 // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend
662 // don't inherit the margin of the parent, in this case .controls
663 *display: inline-block;
665 margin-left: @horizontalComponentOffset;
668 *padding-left: @horizontalComponentOffset;
671 // Remove bottom margin on block level help text since that's accounted for on .control-group
675 // And apply it only to .help-block instances that follow a form control
683 margin-top: @baseLineHeight / 2;
686 // Move over buttons in .form-actions to align with .controls
688 padding-left: @horizontalComponentOffset;