]> jfr.im git - z_archive/KronOS.git/blame - public/less/forms.less
Fixing filestructure again
[z_archive/KronOS.git] / public / less / forms.less
CommitLineData
59c06b17
CS
1//
2// Forms
3// --------------------------------------------------
4
5
6// GENERAL STYLES
7// --------------
8
9// Make all forms have space below them
10form {
11 margin: 0 0 @baseLineHeight;
12}
13
14fieldset {
15 padding: 0;
16 margin: 0;
17 border: 0;
18}
19
20// Groups of fields with labels on top (legends)
21legend {
22 display: block;
23 width: 100%;
24 padding: 0;
25 margin-bottom: @baseLineHeight;
26 font-size: @baseFontSize * 1.5;
27 line-height: @baseLineHeight * 2;
28 color: @grayDark;
29 border: 0;
30 border-bottom: 1px solid #e5e5e5;
31
32 // Small
33 small {
34 font-size: @baseLineHeight * .75;
35 color: @grayLight;
36 }
37}
38
39// Set font for forms
40label,
41input,
42button,
43select,
44textarea {
45 #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here
46}
47input,
48button,
49select,
50textarea {
51 font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element)
52}
53
54// Identify controls by their labels
55label {
56 display: block;
57 margin-bottom: 5px;
58}
59
60// Form controls
61// -------------------------
62
63// Shared size and type resets
64select,
65textarea,
66input[type="text"],
67input[type="password"],
68input[type="datetime"],
69input[type="datetime-local"],
70input[type="date"],
71input[type="month"],
72input[type="time"],
73input[type="week"],
74input[type="number"],
75input[type="email"],
76input[type="url"],
77input[type="search"],
78input[type="tel"],
79input[type="color"],
80.uneditable-input {
81 display: inline-block;
82 height: @baseLineHeight;
83 padding: 4px 6px;
84 margin-bottom: 9px;
85 font-size: @baseFontSize;
86 line-height: @baseLineHeight;
87 color: @gray;
88 .border-radius(@inputBorderRadius);
89}
90
91// Reset appearance properties for textual inputs and textarea
92// Declare width for legacy (can't be on input[type=*] selectors or it's too specific)
93input,
94textarea,
95.uneditable-input {
96 width: 206px; // plus 12px padding and 2px border
97}
98// Reset height since textareas have rows
99textarea {
100 height: auto;
101}
102// Everything else
103textarea,
104input[type="text"],
105input[type="password"],
106input[type="datetime"],
107input[type="datetime-local"],
108input[type="date"],
109input[type="month"],
110input[type="time"],
111input[type="week"],
112input[type="number"],
113input[type="email"],
114input[type="url"],
115input[type="search"],
116input[type="tel"],
117input[type="color"],
118.uneditable-input {
119 background-color: @inputBackground;
120 border: 1px solid @inputBorder;
121 .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
122 .transition(~"border linear .2s, box-shadow linear .2s");
123
124 // Focus state
125 &:focus {
126 border-color: rgba(82,168,236,.8);
127 outline: 0;
128 outline: thin dotted \9; /* IE6-9 */
129 .box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6));
130 }
131}
132
133// Position radios and checkboxes better
134input[type="radio"],
135input[type="checkbox"] {
136 margin: 4px 0 0;
137 *margin-top: 0; /* IE7 */
138 margin-top: 1px \9; /* IE8-9 */
139 line-height: normal;
140 cursor: pointer;
141}
142
143// Reset width of input images, buttons, radios, checkboxes
144input[type="file"],
145input[type="image"],
146input[type="submit"],
147input[type="reset"],
148input[type="button"],
149input[type="radio"],
150input[type="checkbox"] {
151 width: auto; // Override of generic input selector
152}
153
154// Set the height of select and file controls to match text inputs
155select,
156input[type="file"] {
157 height: 30px; /* 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: 30px;
160}
161
162// Make select elements obey height by applying a border
163select {
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
167}
168
169// Make multiple select elements height not fixed
170select[multiple],
171select[size] {
172 height: auto;
173}
174
175// Focus for select, file, radio, and checkbox
176select:focus,
177input[type="file"]:focus,
178input[type="radio"]:focus,
179input[type="checkbox"]:focus {
180 .tab-focus();
181}
182
183
184// Uneditable inputs
185// -------------------------
186
187// Make uneditable inputs look inactive
188.uneditable-input,
189.uneditable-textarea {
190 color: @grayLight;
191 background-color: darken(@inputBackground, 1%);
192 border-color: @inputBorder;
193 .box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
194 cursor: not-allowed;
195}
196
197// For text that needs to appear as an input but should not be an input
198.uneditable-input {
199 overflow: hidden; // prevent text from wrapping, but still cut it off like an input does
200 white-space: nowrap;
201}
202
203// Make uneditable textareas behave like a textarea
204.uneditable-textarea {
205 width: auto;
206 height: auto;
207}
208
209
210// Placeholder
211// -------------------------
212
213// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn’t understand a selector
214input,
215textarea {
216 .placeholder();
217}
218
219
220// CHECKBOXES & RADIOS
221// -------------------
222
223// Indent the labels to position radios/checkboxes as hanging
224.radio,
225.checkbox {
226 min-height: 18px; // clear the floating input if there is no label text
227 padding-left: 18px;
228}
229.radio input[type="radio"],
230.checkbox input[type="checkbox"] {
231 float: left;
232 margin-left: -18px;
233}
234
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
239}
240
241// Radios and checkboxes on same line
242// TODO v3: Convert .inline to .control-inline
243.radio.inline,
244.checkbox.inline {
245 display: inline-block;
246 padding-top: 5px;
247 margin-bottom: 0;
248 vertical-align: middle;
249}
250.radio.inline + .radio.inline,
251.checkbox.inline + .checkbox.inline {
252 margin-left: 10px; // space out consecutive inline controls
253}
254
255
256
257// INPUT SIZES
258// -----------
259
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; }
267
268// Grid style input sizes
269input[class*="span"],
270select[class*="span"],
271textarea[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"] {
278 float: none;
279 margin-left: 0;
280}
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;
293}
294
295
296
297// GRID SIZING FOR INPUTS
298// ----------------------
299
300// Grid sizes
301#grid > .input(@gridColumnWidth, @gridGutterWidth);
302
303// Control row for multiple inputs per line
304.controls-row {
305 .clearfix(); // Clear the float from controls
306}
307.controls-row [class*="span"] {
308 float: left; // Float to collapse white-space for proper grid alignment
309}
310
311
312
313
314// DISABLED STATE
315// --------------
316
317// Disabled and read-only inputs
318input[disabled],
319select[disabled],
320textarea[disabled],
321input[readonly],
322select[readonly],
323textarea[readonly] {
324 cursor: not-allowed;
325 background-color: @inputDisabledBackground;
326}
327// Explicitly reset the colors here
328input[type="radio"][disabled],
329input[type="checkbox"][disabled],
330input[type="radio"][readonly],
331input[type="checkbox"][readonly] {
332 background-color: transparent;
333}
334
335
336
337
338// FORM FIELD FEEDBACK STATES
339// --------------------------
340
341// Warning
342.control-group.warning {
343 .formFieldState(@warningText, @warningText, @warningBackground);
344}
345// Error
346.control-group.error {
347 .formFieldState(@errorText, @errorText, @errorBackground);
348}
349// Success
350.control-group.success {
351 .formFieldState(@successText, @successText, @successBackground);
352}
353// Success
354.control-group.info {
355 .formFieldState(@infoText, @infoText, @infoBackground);
356}
357
358// HTML5 invalid states
359// Shares styles with the .control-group.error above
360input:focus:required:invalid,
361textarea:focus:required:invalid,
362select:focus:required:invalid {
363 color: #b94a48;
364 border-color: #ee5f5b;
365 &:focus {
366 border-color: darken(#ee5f5b, 10%);
367 .box-shadow(0 0 6px lighten(#ee5f5b, 20%));
368 }
369}
370
371
372
373// FORM ACTIONS
374// ------------
375
376.form-actions {
377 padding: (@baseLineHeight - 1) 20px @baseLineHeight;
378 margin-top: @baseLineHeight;
379 margin-bottom: @baseLineHeight;
380 background-color: @formActionsBackground;
381 border-top: 1px solid #e5e5e5;
382 .clearfix(); // Adding clearfix to allow for .pull-right button containers
383}
384
385
386
387// HELP TEXT
388// ---------
389
390.help-block,
391.help-inline {
392 color: lighten(@textColor, 15%); // lighten the text some for contrast
393}
394
395.help-block {
396 display: block; // account for any element using help-block
397 margin-bottom: @baseLineHeight / 2;
398}
399
400.help-inline {
401 display: inline-block;
402 .ie7-inline-block();
403 vertical-align: middle;
404 padding-left: 5px;
405}
406
407
408
409// INPUT GROUPS
410// ------------
411
412// Allow us to put symbols and text within the input field for a cleaner look
413.input-append,
414.input-prepend {
415 margin-bottom: 5px;
416 font-size: 0;
417 white-space: nowrap; // Prevent span and input from separating
418
419 input,
420 select,
421 .uneditable-input {
422 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
423 margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms
424 *margin-left: 0;
425 font-size: @baseFontSize;
426 vertical-align: top;
427 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
428 // Make input on top when focused so blue border and shadow always show
429 &:focus {
430 z-index: 2;
431 }
432 }
433 .add-on {
434 display: inline-block;
435 width: auto;
436 height: @baseLineHeight;
437 min-width: 16px;
438 padding: 4px 5px;
439 font-size: @baseFontSize;
440 font-weight: normal;
441 line-height: @baseLineHeight;
442 text-align: center;
443 text-shadow: 0 1px 0 @white;
444 background-color: @grayLighter;
445 border: 1px solid #ccc;
446 }
447 .add-on,
448 .btn {
449 vertical-align: top;
450 .border-radius(0);
451 }
452 .active {
453 background-color: lighten(@green, 30);
454 border-color: @green;
455 }
456}
457.input-prepend {
458 .add-on,
459 .btn {
460 margin-right: -1px;
461 }
462 .add-on:first-child,
463 .btn:first-child {
464 .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
465 }
466}
467.input-append {
468 input,
469 select,
470 .uneditable-input {
471 .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
472 }
473 .add-on,
474 .btn {
475 margin-left: -1px;
476 }
477 .add-on:last-child,
478 .btn:last-child {
479 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
480 }
481}
482// Remove all border-radius for inputs with both prepend and append
483.input-prepend.input-append {
484 input,
485 select,
486 .uneditable-input {
487 .border-radius(0);
488 }
489 .add-on:first-child,
490 .btn:first-child {
491 margin-right: -1px;
492 .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
493 }
494 .add-on:last-child,
495 .btn:last-child {
496 margin-left: -1px;
497 .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
498 }
499}
500
501
502
503// SEARCH FORM
504// -----------
505
506input.search-query {
507 padding-right: 14px;
508 padding-right: 4px \9;
509 padding-left: 14px;
510 padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
511 margin-bottom: 0; // Remove the default margin on all inputs
512 .border-radius(15px);
513}
514
515/* Allow for input prepend/append in search forms */
516.form-search .input-append .search-query,
517.form-search .input-prepend .search-query {
518 .border-radius(0); // Override due to specificity
519}
520.form-search .input-append .search-query {
521 .border-radius(14px 0 0 14px);
522}
523.form-search .input-append .btn {
524 .border-radius(0 14px 14px 0);
525}
526.form-search .input-prepend .search-query {
527 .border-radius(0 14px 14px 0);
528}
529.form-search .input-prepend .btn {
530 .border-radius(14px 0 0 14px);
531}
532
533
534
535
536// HORIZONTAL & VERTICAL FORMS
537// ---------------------------
538
539// Common properties
540// -----------------
541
542.form-search,
543.form-inline,
544.form-horizontal {
545 input,
546 textarea,
547 select,
548 .help-inline,
549 .uneditable-input,
550 .input-prepend,
551 .input-append {
552 display: inline-block;
553 .ie7-inline-block();
554 margin-bottom: 0;
555 vertical-align: middle;
556 }
557 // Re-hide hidden elements due to specifity
558 .hide {
559 display: none;
560 }
561}
562.form-search label,
563.form-inline label,
564.form-search .btn-group,
565.form-inline .btn-group {
566 display: inline-block;
567}
568// Remove margin for input-prepend/-append
569.form-search .input-append,
570.form-inline .input-append,
571.form-search .input-prepend,
572.form-inline .input-prepend {
573 margin-bottom: 0;
574}
575// Inline checkbox/radio labels (remove padding on left)
576.form-search .radio,
577.form-search .checkbox,
578.form-inline .radio,
579.form-inline .checkbox {
580 padding-left: 0;
581 margin-bottom: 0;
582 vertical-align: middle;
583}
584// Remove float and margin, set to inline-block
585.form-search .radio input[type="radio"],
586.form-search .checkbox input[type="checkbox"],
587.form-inline .radio input[type="radio"],
588.form-inline .checkbox input[type="checkbox"] {
589 float: left;
590 margin-right: 3px;
591 margin-left: 0;
592}
593
594
595// Margin to space out fieldsets
596.control-group {
597 margin-bottom: @baseLineHeight / 2;
598}
599
600// Legend collapses margin, so next element is responsible for spacing
601legend + .control-group {
602 margin-top: @baseLineHeight;
603 -webkit-margin-top-collapse: separate;
604}
605
606// Horizontal-specific styles
607// --------------------------
608
609.form-horizontal {
610 // Increase spacing between groups
611 .control-group {
612 margin-bottom: @baseLineHeight;
613 .clearfix();
614 }
615 // Float the labels left
616 .control-label {
617 float: left;
618 width: @horizontalComponentOffset - 20;
619 padding-top: 5px;
620 text-align: right;
621 }
622 // Move over all input controls and content
623 .controls {
624 // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend
625 // don't inherit the margin of the parent, in this case .controls
626 *display: inline-block;
627 *padding-left: 20px;
628 margin-left: @horizontalComponentOffset;
629 *margin-left: 0;
630 &:first-child {
631 *padding-left: @horizontalComponentOffset;
632 }
633 }
634 // Remove bottom margin on block level help text since that's accounted for on .control-group
635 .help-block {
636 margin-bottom: 0;
637 }
638 // And apply it only to .help-block instances that follow a form control
639 input,
640 select,
641 textarea {
642 + .help-block {
643 margin-top: @baseLineHeight / 2;
644 }
645 }
646 // Move over buttons in .form-actions to align with .controls
647 .form-actions {
648 padding-left: @horizontalComponentOffset;
649 }
650}