]> jfr.im git - z_archive/KronOS.git/blob - public/less/forms.less
Fixing filestructure again
[z_archive/KronOS.git] / public / less / forms.less
1 //
2 // Forms
3 // --------------------------------------------------
4
5
6 // GENERAL STYLES
7 // --------------
8
9 // Make all forms have space below them
10 form {
11 margin: 0 0 @baseLineHeight;
12 }
13
14 fieldset {
15 padding: 0;
16 margin: 0;
17 border: 0;
18 }
19
20 // Groups of fields with labels on top (legends)
21 legend {
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
40 label,
41 input,
42 button,
43 select,
44 textarea {
45 #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here
46 }
47 input,
48 button,
49 select,
50 textarea {
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
55 label {
56 display: block;
57 margin-bottom: 5px;
58 }
59
60 // Form controls
61 // -------------------------
62
63 // Shared size and type resets
64 select,
65 textarea,
66 input[type="text"],
67 input[type="password"],
68 input[type="datetime"],
69 input[type="datetime-local"],
70 input[type="date"],
71 input[type="month"],
72 input[type="time"],
73 input[type="week"],
74 input[type="number"],
75 input[type="email"],
76 input[type="url"],
77 input[type="search"],
78 input[type="tel"],
79 input[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)
93 input,
94 textarea,
95 .uneditable-input {
96 width: 206px; // plus 12px padding and 2px border
97 }
98 // Reset height since textareas have rows
99 textarea {
100 height: auto;
101 }
102 // Everything else
103 textarea,
104 input[type="text"],
105 input[type="password"],
106 input[type="datetime"],
107 input[type="datetime-local"],
108 input[type="date"],
109 input[type="month"],
110 input[type="time"],
111 input[type="week"],
112 input[type="number"],
113 input[type="email"],
114 input[type="url"],
115 input[type="search"],
116 input[type="tel"],
117 input[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
134 input[type="radio"],
135 input[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
144 input[type="file"],
145 input[type="image"],
146 input[type="submit"],
147 input[type="reset"],
148 input[type="button"],
149 input[type="radio"],
150 input[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
155 select,
156 input[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
163 select {
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
170 select[multiple],
171 select[size] {
172 height: auto;
173 }
174
175 // Focus for select, file, radio, and checkbox
176 select:focus,
177 input[type="file"]:focus,
178 input[type="radio"]:focus,
179 input[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
214 input,
215 textarea {
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
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"] {
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
318 input[disabled],
319 select[disabled],
320 textarea[disabled],
321 input[readonly],
322 select[readonly],
323 textarea[readonly] {
324 cursor: not-allowed;
325 background-color: @inputDisabledBackground;
326 }
327 // Explicitly reset the colors here
328 input[type="radio"][disabled],
329 input[type="checkbox"][disabled],
330 input[type="radio"][readonly],
331 input[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
360 input:focus:required:invalid,
361 textarea:focus:required:invalid,
362 select: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
506 input.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
601 legend + .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 }