mixins.less 19.8 KB
Newer Older
1
2
3
//
// Mixins
// --------------------------------------------------
4

5

6
7
// Utilities
// -------------------------
8
9

// Clearfix
10
11
12
13
14
15
16
17
18
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
//
// For modern browsers
// 1. The space content is one way to avoid an Opera bug when the
//    contenteditable attribute is included anywhere else in the document.
//    Otherwise it causes space to appear at the top and bottom of elements
//    that are clearfixed.
// 2. The use of `table` rather than `block` is only necessary if using
//    `:before` to contain the top-margins of child elements.
19
.clearfix() {
20
  &:before,
21
  &:after {
22
23
    content: " "; /* 1 */
    display: table; /* 2 */
24
25
  }
  &:after {
26
    clear: both;
27
  }
28
29
}

Mark Otto's avatar
Mark Otto committed
30
31
32
// Webkit-style focus
.tab-focus() {
  // Default
33
  outline: thin dotted #333;
Mark Otto's avatar
Mark Otto committed
34
35
36
37
38
  // Webkit
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}

39
// Center-align a block level element
40
.center-block() {
41
  display: block;
42
43
  margin-left: auto;
  margin-right: auto;
44
45
46
}

// Sizing shortcuts
47
.size(@width; @height) {
48
  width: @width;
49
  height: @height;
50
}
51
.square(@size) {
52
  .size(@size; @size);
53
54
}

55
// Placeholder text
Mark Otto's avatar
Mark Otto committed
56
.placeholder(@color: @input-color-placeholder) {
57
58
59
60
  &:-moz-placeholder            { color: @color; } // Firefox 4-18
  &::-moz-placeholder           { color: @color; } // Firefox 19+
  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+
  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome
61
62
}

Mark Otto's avatar
Mark Otto committed
63
64
65
66
67
68
69
70
// Text overflow
// Requires inline-block or block for proper styling
.text-overflow() {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

71
72
// CSS image replacement
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
73
.hide-text() {
74
  font: ~"0/0" a;
75
  color: transparent;
76
  text-shadow: none;
77
  background-color: transparent;
78
  border: 0;
79
}
80

81

82

83
84
85
// CSS3 PROPERTIES
// --------------------------------------------------

86
// Single side border-radius
87
.border-top-radius(@radius) {
88
89
  border-top-right-radius: @radius;
   border-top-left-radius: @radius;
90
91
}
.border-right-radius(@radius) {
92
93
  border-bottom-right-radius: @radius;
     border-top-right-radius: @radius;
Mark Otto's avatar
Mark Otto committed
94
95
}
.border-bottom-radius(@radius) {
96
97
  border-bottom-right-radius: @radius;
   border-bottom-left-radius: @radius;
Mark Otto's avatar
Mark Otto committed
98
99
}
.border-left-radius(@radius) {
100
101
  border-bottom-left-radius: @radius;
     border-top-left-radius: @radius;
102
103
}

104
// Drop shadows
Mark Otto's avatar
Mark Otto committed
105
.box-shadow(@shadow) {
106
  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
107
          box-shadow: @shadow;
108
109
110
}

// Transitions
Mark Otto's avatar
Mark Otto committed
111
112
113
.transition(@transition) {
  -webkit-transition: @transition;
          transition: @transition;
114
}
Tunghsiao Liu's avatar
Tunghsiao Liu committed
115
116
117
118
.transition-delay(@transition-delay) {
  -webkit-transition-delay: @transition-delay;
          transition-delay: @transition-delay;
}
Tunghsiao Liu's avatar
Tunghsiao Liu committed
119
120
121
122
.transition-duration(@transition-duration) {
  -webkit-transition-duration: @transition-duration;
          transition-duration: @transition-duration;
}
123
124
125
126
127
128
.transition-transform(@transition) {
  -webkit-transition: -webkit-transform @transition;
     -moz-transition: -moz-transform @transition;
       -o-transition: -o-transform @transition;
          transition: transform @transition;
}
129

Mark Otto's avatar
Mark Otto committed
130
// Transformations
131
.rotate(@degrees) {
132
  -webkit-transform: rotate(@degrees);
133
      -ms-transform: rotate(@degrees); // IE9+
134
135
          transform: rotate(@degrees);
}
136
137
.scale(@ratio) {
  -webkit-transform: scale(@ratio);
138
      -ms-transform: scale(@ratio); // IE9+
139
          transform: scale(@ratio);
140
}
141
.translate(@x; @y) {
Mark Otto's avatar
Mark Otto committed
142
  -webkit-transform: translate(@x, @y);
143
      -ms-transform: translate(@x, @y); // IE9+
Mark Otto's avatar
Mark Otto committed
144
145
          transform: translate(@x, @y);
}
146
.skew(@x; @y) {
Mark Otto's avatar
Mark Otto committed
147
  -webkit-transform: skew(@x, @y);
148
      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
Mark Otto's avatar
Mark Otto committed
149
150
          transform: skew(@x, @y);
}
151
.translate3d(@x; @y; @z) {
152
153
  -webkit-transform: translate3d(@x, @y, @z);
          transform: translate3d(@x, @y, @z);
154
}
155

156
157
// Backface visibility
// Prevent browsers from flickering when using CSS 3D transforms.
Chris Rebert's avatar
Chris Rebert committed
158
// Default value is `visible`, but can be changed to `hidden`
159
// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples
160
.backface-visibility(@visibility){
161
162
163
  -webkit-backface-visibility: @visibility;
     -moz-backface-visibility: @visibility;
          backface-visibility: @visibility;
164
165
}

166
// Background clipping
Mark Otto's avatar
Mark Otto committed
167
.background-clip(@clip) {
168
  background-clip: @clip;
169
170
}

171
// Background sizing
172
.background-size(@size) {
173
  background-size: @size;
174
175
}

176
177
178
179
180
181
182
// Box sizing
.box-sizing(@boxmodel) {
  -webkit-box-sizing: @boxmodel;
     -moz-box-sizing: @boxmodel;
          box-sizing: @boxmodel;
}

183
184
185
186
187
// User select
// For selecting text on the page
.user-select(@select) {
  -webkit-user-select: @select;
     -moz-user-select: @select;
188
      -ms-user-select: @select; // IE10+
189
190
191
192
       -o-user-select: @select;
          user-select: @select;
}

193
// Resize anything
194
.resizable(@direction) {
195
196
197
198
  resize: @direction; // Options: horizontal, vertical, both
  overflow: auto; // Safari fix
}

199
// CSS3 Content Columns
200
.content-columns(@column-count; @column-gap: @grid-gutter-width) {
201
202
203
204
205
206
  -webkit-column-count: @column-count;
     -moz-column-count: @column-count;
          column-count: @column-count;
  -webkit-column-gap: @column-gap;
     -moz-column-gap: @column-gap;
          column-gap: @column-gap;
207
208
}

Synchro's avatar
Synchro committed
209
210
// Optional hyphenation
.hyphens(@mode: auto) {
Mark Otto's avatar
Mark Otto committed
211
  word-wrap: break-word;
Synchro's avatar
Synchro committed
212
213
  -webkit-hyphens: @mode;
     -moz-hyphens: @mode;
214
      -ms-hyphens: @mode; // IE10+
Synchro's avatar
Synchro committed
215
       -o-hyphens: @mode;
Synchro's avatar
Synchro committed
216
217
218
          hyphens: @mode;
}

219
// Opacity
220
.opacity(@opacity) {
221
222
  opacity: @opacity;
  // IE8 filter
223
  @opacity-ie: (@opacity * 100);
224
  filter: ~"alpha(opacity=@{opacity-ie})";
225
226
227
228
}



Mark Otto's avatar
Mark Otto committed
229
// GRADIENTS
230
231
// --------------------------------------------------

232
#gradient {
Mark Otto's avatar
Mark Otto committed
233
234
235
236
237

  // Horizontal gradient, from left to right
  //
  // Creates two color stops, start and end, by specifying a color and position for each color stop.
  // Color stops are not available in IE9 and below.
238
  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
Mark Otto's avatar
Mark Otto committed
239
240
241
242
    background-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+
    background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+
    background-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+
    background-image:  linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10
243
    background-repeat: repeat-x;
Mark Otto's avatar
Mark Otto committed
244
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down
245
  }
Mark Otto's avatar
Mark Otto committed
246
247
248
249
250

  // Vertical gradient, from top to bottom
  //
  // Creates two color stops, start and end, by specifying a color and position for each color stop.
  // Color stops are not available in IE9 and below.
251
  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
Mark Otto's avatar
Mark Otto committed
252
253
254
255
    background-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+
    background-image: -webkit-linear-gradient(top, @start-color, @start-percent, @end-color, @end-percent); // Safari 5.1+, Chrome 10+
    background-image:  -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+
    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10
256
    background-repeat: repeat-x;
Mark Otto's avatar
Mark Otto committed
257
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down
258
  }
Mark Otto's avatar
Mark Otto committed
259

260
  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
261
    background-repeat: repeat-x;
Mark Otto's avatar
Mark Otto committed
262
263
264
    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+
    background-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+
    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10
265
  }
266
  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
Mark Otto's avatar
Mark Otto committed
267
268
269
270
    background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));
    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
    background-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
Francisco arenas's avatar
Francisco arenas committed
271
    background-repeat: no-repeat;
Mark Otto's avatar
Mark Otto committed
272
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
Francisco arenas's avatar
Francisco arenas committed
273
  }
274
  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
Mark Otto's avatar
Mark Otto committed
275
276
277
278
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));
    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
    background-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color);
    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
279
    background-repeat: no-repeat;
Mark Otto's avatar
Mark Otto committed
280
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
281
  }
282
  .radial(@inner-color: #555; @outer-color: #333) {
Mark Otto's avatar
Mark Otto committed
283
284
285
286
    background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color));
    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
    background-image: -moz-radial-gradient(circle, @inner-color, @outer-color);
    background-image: radial-gradient(circle, @inner-color, @outer-color);
287
288
    background-repeat: no-repeat;
  }
289
  .striped(@color: #555; @angle: 45deg) {
290
291
292
293
    background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
    background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
    background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
    background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
Piotrek Okoński's avatar
Piotrek Okoński committed
294
  }
295
}
Mark Otto's avatar
Mark Otto committed
296

297
// Reset filters for IE
Mark Otto's avatar
Mark Otto committed
298
299
300
//
// When you need to remove a gradient background, don't forget to use this to reset
// the IE filter for IE9 and below.
301
.reset-filter() {
302
  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
303
}
304

305

Mark Otto's avatar
Mark Otto committed
306

Danny Keane's avatar
Danny Keane committed
307
308
309
// RETINA IMAGE SUPPORT
// --------------------------------------------------

Mark Otto's avatar
Mark Otto committed
310
// Short retina mixin for setting background-image and -size
311
.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
Mark Otto's avatar
Mark Otto committed
312
313
314
315
316
317
318
319
320
321
322
323
  background-image: url("@{file-1x}");

  @media
  only screen and (-webkit-min-device-pixel-ratio: 2),
  only screen and (   min--moz-device-pixel-ratio: 2),
  only screen and (     -o-min-device-pixel-ratio: 2/1),
  only screen and (        min-device-pixel-ratio: 2),
  only screen and (                min-resolution: 192dpi),
  only screen and (                min-resolution: 2dppx) {
    background-image: url("@{file-2x}");
    background-size: @width-1x @height-1x;
  }
Danny Keane's avatar
Danny Keane committed
324
325
}

326
327
328
329

// COMPONENT MIXINS
// --------------------------------------------------

330
// Horizontal dividers
331
332
// -------------------------
// Dividers (basically an hr) within dropdowns and nav lists
Mark Otto's avatar
Mark Otto committed
333
334
.nav-divider(@color: #e5e5e5) {
  height: 1px;
335
  margin: ((@line-height-computed / 2) - 1) 0;
Jacob Thornton's avatar
Jacob Thornton committed
336
  overflow: hidden;
Mark Otto's avatar
Mark Otto committed
337
  background-color: @color;
338
339
}

340
341
342
343
344
345
346
347
348
349
350
// Panels
// -------------------------
.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
  border-color: @border;
  .panel-heading {
    color: @heading-text-color;
    background-color: @heading-bg-color;
    border-color: @heading-border;
  }
}

Chris Rebert's avatar
Chris Rebert committed
351
352
// Alerts
// -------------------------
353
.alert-variant(@background; @border; @text-color) {
Chris Rebert's avatar
Chris Rebert committed
354
355
356
357
358
359
360
361
362
363
364
  background-color: @background;
  border-color: @border;
  color: @text-color;
  hr {
    border-top-color: darken(@border, 5%);
  }
  .alert-link {
    color: darken(@text-color, 10%);
  }
}

Fred Delrieu's avatar
Fred Delrieu committed
365
// Button pseudo states
366
367
368
// -------------------------
// Easily pump out default styles, as well as :hover, :focus, :active,
// and disabled options for all buttons
369
.btn-pseudo-states(@color; @background; @border) {
370
  color: @color;
371
372
  background-color: @background;
  border-color: @border;
373

Mark Otto's avatar
Mark Otto committed
374
  &:hover,
375
  &:focus,
376
377
  &:active,
  &.active {
378
    color: @color;
379
380
    background-color: darken(@background, 8%);
        border-color: darken(@border, 12%);
Mark Otto's avatar
Mark Otto committed
381
  }
382

383
  &.disabled,
384
  &[disabled],
385
  fieldset[disabled] & {
386
    &,
387
388
    &:hover,
    &:focus,
389
390
    &:active,
    &.active {
391
392
393
      background-color: @background;
          border-color: @border
    }
394
395
396
  }
}

Chris Rebert's avatar
Chris Rebert committed
397
398
399
400
401
402
403
404
405
406
407
408
// Labels
// -------------------------
.label-variant(@color) {
  background-color: @color;
  &[href] {
    &:hover,
    &:focus {
      background-color: darken(@color, 10%);
    }
  }
}

409
410
411
// Navbar vertical align
// -------------------------
// Vertically center elements in the navbar.
412
// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
Mark Otto's avatar
Mark Otto committed
413
.navbar-vertical-align(@element-height) {
414
415
  margin-top: ((@navbar-height - @element-height) / 2);
  margin-bottom: ((@navbar-height - @element-height) / 2);
416
417
}

418
419
420
421
422
423
424
425
426
// Progress bars
// -------------------------
.progress-bar-variant(@color) {
  background-color: @color;
  .progress-striped & {
    #gradient > .striped(@color);
  }
}

Mark Otto's avatar
Mark Otto committed
427
428
429
430
431
432
433
434
435
436
// Responsive utilities
// -------------------------
// More easily include all the states for responsive-utilities.less.
.responsive-visibility() {
  display: block !important;
  tr& { display: table-row !important; }
  th&,
  td& { display: table-cell !important; }
}

437
438
439
440
441
442
443
.responsive-invisibility() {
  display: none !important;
  tr& { display: none !important; }
  th&,
  td& { display: none !important; }
}

444
445
446
// Grid System
// -----------

447
// Centered container element
448
449
.container-fixed() {
  margin-right: auto;
Jacob Thornton's avatar
Jacob Thornton committed
450
  margin-left: auto;
451
  .clearfix();
452
453
}

454
// Creates a wrapper for a series of columns
455
.make-row(@gutter: @grid-gutter-width) {
456
  // Then clear the floated columns
457
  .clearfix();
458

459
460
461
462
463
  .container & {
    @media (min-width: @screen-small) {
      margin-left:  (@gutter / -2);
      margin-right: (@gutter / -2);
    }
Mark Otto's avatar
Mark Otto committed
464
465
  }

466
467
  // Negative margin nested rows out to align the content of columns
  .row {
468
469
    margin-left:  (@gutter / -2);
    margin-right: (@gutter / -2);
470
  }
471
}
Mark Otto's avatar
Mark Otto committed
472

473
// Generate the default columns
474
.make-column(@columns; @gutter: @grid-gutter-width) {
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
  position: relative;
  float: left;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);
  @max-width: (@screen-small - 1);

  // Calculate width based on number of columns available
  @media (max-width: @max-width) {
    width: percentage((@columns / @grid-columns));
  }
}

// Generate the small columns
491
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
492
  position: relative;
493
494
  // Prevent columns from collapsing when empty
  min-height: 1px;
495
  // Inner gutter via padding
496
497
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);
498
499

  // Calculate width based on number of columns available
500
  @media (min-width: @screen-small) {
501
    float: left;
502
503
    width: percentage((@columns / @grid-columns));
  }
504
}
Mark Otto's avatar
Mark Otto committed
505

506
// Generate the small column offsets
507
.make-sm-column-offset(@columns) {
508
  @media (min-width: @screen-small) {
509
510
511
    margin-left: percentage((@columns / @grid-columns));
  }
}
512
.make-sm-column-push(@columns) {
513
  @media (min-width: @screen-small) {
514
515
516
    left: percentage((@columns / @grid-columns));
  }
}
517
.make-sm-column-pull(@columns) {
518
  @media (min-width: @screen-small) {
519
520
    right: percentage((@columns / @grid-columns));
  }
521
}
522

523
524
// Generate the medium columns
.make-md-column(@columns; @gutter: @grid-gutter-width) {
Bass Jobsen's avatar
Bass Jobsen committed
525
526
527
528
  position: relative;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
529
530
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);
Mark Otto's avatar
Mark Otto committed
531

Bass Jobsen's avatar
Bass Jobsen committed
532
  // Calculate width based on number of columns available
533
534
  @media (min-width: @screen-medium) {
    float: left;
Bass Jobsen's avatar
Bass Jobsen committed
535
536
537
    width: percentage((@columns / @grid-columns));
  }
}
Mark Otto's avatar
Mark Otto committed
538

539
// Generate the large column offsets
540
.make-md-column-offset(@columns) {
541
542
543
544
  @media (min-width: @screen-medium) {
    margin-left: percentage((@columns / @grid-columns));
  }
}
545
.make-md-column-push(@columns) {
546
547
548
549
  @media (min-width: @screen-medium) {
    left: percentage((@columns / @grid-columns));
  }
}
550
.make-md-column-pull(@columns) {
551
552
553
554
555
  @media (min-width: @screen-medium) {
    right: percentage((@columns / @grid-columns));
  }
}

556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
// Generate the large columns
.make-lg-column(@columns; @gutter: @grid-gutter-width) {
  position: relative;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);

  // Calculate width based on number of columns available
  @media (min-width: @screen-large) {
    float: left;
    width: percentage((@columns / @grid-columns));
  }
}

// Generate the large column offsets
.make-lg-column-offset(@columns) {
  @media (min-width: @screen-large) {
    margin-left: percentage((@columns / @grid-columns));
  }
}
.make-lg-column-push(@columns) {
  @media (min-width: @screen-large) {
    left: percentage((@columns / @grid-columns));
  }
}
.make-lg-column-pull(@columns) {
  @media (min-width: @screen-large) {
    right: percentage((@columns / @grid-columns));
  }
}

Mark Otto's avatar
Mark Otto committed
589

Mark Otto's avatar
Mark Otto committed
590
591
592
593
594
// Form validation states
//
// Used in forms.less to generate the form validation CSS for warnings, errors,
// and successes.

595
.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
Mark Otto's avatar
Mark Otto committed
596
  // Color the label and help text
597
  .help-block,
Mark Otto's avatar
Mark Otto committed
598
599
600
601
  .control-label {
    color: @text-color;
  }
  // Set the border and box shadow on specific inputs to match
Mark Otto's avatar
Mark Otto committed
602
  .form-control {
Mark Otto's avatar
Mark Otto committed
603
604
605
606
607
608
609
610
    border-color: @border-color;
    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
    &:focus {
      border-color: darken(@border-color, 10%);
      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
      .box-shadow(@shadow);
    }
  }
611
612
613
614
615
  // Set validation states also for addons
  .input-group-addon {
    color: @text-color;
    border-color: @border-color;
    background-color: @background-color;
Mark Otto's avatar
Mark Otto committed
616
  }
Mark Otto's avatar
Mark Otto committed
617
}
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639

// Form control focus state
//
// Generate a customized focus state and for any input with the specified color,
// which defaults to the `@input-focus-border` variable.
//
// We highly encourage you to not customize the default value, but instead use
// this to tweak colors on an as-needed basis. This aesthetic change is based on
// WebKit's default styles, but applicable to a wider range of browsers. Its
// usability and accessibility should be taken into account with any change.
//
// Example usage: change the default blue border and shadow to white for better
// contrast against a dark gray background.

.form-control-focus(@color: @input-border-focus) {
  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
  &:focus {
    border-color: @color;
    outline: 0;
    .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
  }
}