mixins.less 20.4 KB
Newer Older
1
2
3
// Mixins.less
// Snippets of reusable CSS to develop faster and keep code readable
// -----------------------------------------------------------------
4

5

6
7
8
9
// UTILITY MIXINS
// --------------------------------------------------

// Clearfix
Mark Otto's avatar
Mark Otto committed
10
// --------
11
// For clearing floats like a boss h5bp.com/q
12
.clearfix {
13
  *zoom: 1;
14
  &:before,
15
  &:after {
16
17
    display: table;
    content: "";
18
19
  }
  &:after {
20
    clear: both;
21
  }
22
23
}

Mark Otto's avatar
Mark Otto committed
24
25
26
27
// Webkit-style focus
// ------------------
.tab-focus() {
  // Default
28
  outline: thin dotted #333;
Mark Otto's avatar
Mark Otto committed
29
30
31
32
33
  // Webkit
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}

34
// Center-align a block level element
Mark Otto's avatar
Mark Otto committed
35
// ----------------------------------
36
.center-block() {
37
  display: block;
38
39
  margin-left: auto;
  margin-right: auto;
40
41
}

42
// IE7 inline-block
Mark Otto's avatar
Mark Otto committed
43
// ----------------
44
45
46
47
48
.ie7-inline-block() {
  *display: inline; /* IE7 inline-block hack */
  *zoom: 1;
}

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// IE7 likes to collapse whitespace on either side of the inline-block elements.
// Ems because we're attempting to match the width of a space character. Left
// version is for form buttons, which typically come after other elements, and
// right version is for icons, which come before. Applying both is ok, but it will
// mean that space between those elements will be .6em (~2 space characters) in IE7,
// instead of the 1 space in other browsers.
.ie7-restore-left-whitespace() {
  *margin-left: .3em;

  &:first-child {
    *margin-left: 0;
  }
}

.ie7-restore-right-whitespace() {
  *margin-right: .3em;

  &:last-child {
    *margin-left: 0;
  }
}

71
// Sizing shortcuts
72
// -------------------------
73
.size(@height, @width) {
74
  width: @width;
75
  height: @height;
76
}
77
.square(@size) {
78
  .size(@size, @size);
79
80
}

81
82
// Placeholder text
// -------------------------
83
.placeholder(@color: @placeholderText) {
84
  &:-moz-placeholder {
85
86
    color: @color;
  }
87
  &:-ms-input-placeholder {
88
89
    color: @color;
  }
90
  &::-webkit-input-placeholder {
91
92
93
94
    color: @color;
  }
}

Mark Otto's avatar
Mark Otto committed
95
96
97
98
99
100
101
102
103
// Text overflow
// -------------------------
// Requires inline-block or block for proper styling
.text-overflow() {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

104
// CSS image replacement
105
// -------------------------
106
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
107
.hide-text {
108
109
  font: 0/0 a;
  color: transparent;
110
  text-shadow: none;
111
  background-color: transparent;
112
  border: 0;
113
}
114

115

116
117
118
// FONTS
// --------------------------------------------------

119
#font {
120
121
  #family {
    .serif() {
122
      font-family: @serifFontFamily;
123
124
    }
    .sans-serif() {
125
      font-family: @sansFontFamily;
126
127
    }
    .monospace() {
128
      font-family: @monoFontFamily;
129
    }
130
  }
131
  .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
132
133
134
135
    font-size: @size;
    font-weight: @weight;
    line-height: @lineHeight;
  }
136
137
138
  .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
    #font > #family > .serif;
    #font > .shorthand(@size, @weight, @lineHeight);
139
  }
140
141
142
143
144
145
146
  .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
    #font > #family > .sans-serif;
    #font > .shorthand(@size, @weight, @lineHeight);
  }
  .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
    #font > #family > .monospace;
    #font > .shorthand(@size, @weight, @lineHeight);
147
148
149
  }
}

150

151
// FORMS
152
153
// --------------------------------------------------

154
155
156
157
// Block level inputs
.input-block-level {
  display: block;
  width: 100%;
158
159
  min-height: 28px;        // Make inputs at least the height of their button counterpart
  .box-sizing(border-box); // Makes inputs behave like true block-level elements
160
161
162
}


163
164
165
166
167
168
169
170
171
// Mixin for form field states
.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
  // Set the text color
  > label,
  .help-block,
  .help-inline {
    color: @textColor;
  }
  // Style inputs accordingly
Mark Otto's avatar
Mark Otto committed
172
173
  .checkbox,
  .radio,
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
  input,
  select,
  textarea {
    color: @textColor;
    border-color: @borderColor;
    &:focus {
      border-color: darken(@borderColor, 10%);
      .box-shadow(0 0 6px lighten(@borderColor, 20%));
    }
  }
  // Give a small background color for input-prepend/-append
  .input-prepend .add-on,
  .input-append .add-on {
    color: @textColor;
    background-color: @backgroundColor;
    border-color: @textColor;
  }
}



195
196
197
// CSS3 PROPERTIES
// --------------------------------------------------

198
// Border Radius
199
.border-radius(@radius) {
Mark Otto's avatar
Mark Otto committed
200
201
202
  -webkit-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;
203
204
205
}

// Drop shadows
206
.box-shadow(@shadow) {
Mark Otto's avatar
Mark Otto committed
207
208
209
  -webkit-box-shadow: @shadow;
     -moz-box-shadow: @shadow;
          box-shadow: @shadow;
210
211
212
}

// Transitions
Mark Otto's avatar
Mark Otto committed
213
214
215
216
217
218
.transition(@transition) {
  -webkit-transition: @transition;
     -moz-transition: @transition;
      -ms-transition: @transition;
       -o-transition: @transition;
          transition: @transition;
219
220
}

Mark Otto's avatar
Mark Otto committed
221
// Transformations
222
.rotate(@degrees) {
223
224
  -webkit-transform: rotate(@degrees);
     -moz-transform: rotate(@degrees);
Mark Otto's avatar
Mark Otto committed
225
226
      -ms-transform: rotate(@degrees);
       -o-transform: rotate(@degrees);
227
228
          transform: rotate(@degrees);
}
229
230
231
232
233
234
.scale(@ratio) {
  -webkit-transform: scale(@ratio);
     -moz-transform: scale(@ratio);
      -ms-transform: scale(@ratio);
       -o-transform: scale(@ratio);
          transform: scale(@ratio);
235
}
236
.translate(@x, @y) {
Mark Otto's avatar
Mark Otto committed
237
238
239
240
241
242
  -webkit-transform: translate(@x, @y);
     -moz-transform: translate(@x, @y);
      -ms-transform: translate(@x, @y);
       -o-transform: translate(@x, @y);
          transform: translate(@x, @y);
}
243
.skew(@x, @y) {
Mark Otto's avatar
Mark Otto committed
244
245
246
247
248
249
  -webkit-transform: skew(@x, @y);
     -moz-transform: skew(@x, @y);
      -ms-transform: skew(@x, @y);
       -o-transform: skew(@x, @y);
          transform: skew(@x, @y);
}
250
.translate3d(@x, @y, @z) {
251
252
253
254
255
256
  -webkit-transform: translate(@x, @y, @z);
     -moz-transform: translate(@x, @y, @z);
      -ms-transform: translate(@x, @y, @z);
       -o-transform: translate(@x, @y, @z);
          transform: translate(@x, @y, @z);
}
257

258
259
260
261
// Backface visibility
// Prevent browsers from flickering when using CSS 3D transforms.
// Default value is `visible`, but can be changed to `hidden
// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples
262
.backface-visibility(@visibility){
263
	-webkit-backface-visibility: @visibility;
264
265
266
	   -moz-backface-visibility: @visibility;
	    -ms-backface-visibility: @visibility;
	        backface-visibility: @visibility;
267
268
}

269
// Background clipping
270
// Heads up: FF 3.6 and under need "padding" instead of "padding-box"
Mark Otto's avatar
Mark Otto committed
271
272
273
274
.background-clip(@clip) {
  -webkit-background-clip: @clip;
     -moz-background-clip: @clip;
          background-clip: @clip;
275
276
}

277
// Background sizing
Mark Otto's avatar
Mark Otto committed
278
279
280
281
282
.background-size(@size){
  -webkit-background-size: @size;
     -moz-background-size: @size;
       -o-background-size: @size;
          background-size: @size;
283
284
285
}


286
287
288
289
// Box sizing
.box-sizing(@boxmodel) {
  -webkit-box-sizing: @boxmodel;
     -moz-box-sizing: @boxmodel;
290
      -ms-box-sizing: @boxmodel;
291
292
293
          box-sizing: @boxmodel;
}

294
295
296
297
298
// User select
// For selecting text on the page
.user-select(@select) {
  -webkit-user-select: @select;
     -moz-user-select: @select;
Han Lin Yap's avatar
Han Lin Yap committed
299
      -ms-user-select: @select;
300
301
302
303
       -o-user-select: @select;
          user-select: @select;
}

304
// Resize anything
305
.resizable(@direction) {
306
307
308
309
  resize: @direction; // Options: horizontal, vertical, both
  overflow: auto; // Safari fix
}

310
// CSS3 Content Columns
311
.content-columns(@columnCount, @columnGap: @gridGutterWidth) {
312
313
  -webkit-column-count: @columnCount;
     -moz-column-count: @columnCount;
314
315
          column-count: @columnCount;
  -webkit-column-gap: @columnGap;
316
     -moz-column-gap: @columnGap;
317
          column-gap: @columnGap;
318
319
}

Synchro's avatar
Synchro committed
320
321
// Optional hyphenation
.hyphens(@mode: auto) {
Mark Otto's avatar
Mark Otto committed
322
  word-wrap: break-word;
Synchro's avatar
Synchro committed
323
324
325
  -webkit-hyphens: @mode;
     -moz-hyphens: @mode;
      -ms-hyphens: @mode;
Synchro's avatar
Synchro committed
326
       -o-hyphens: @mode;
Synchro's avatar
Synchro committed
327
328
329
          hyphens: @mode;
}

330
// Opacity
331
.opacity(@opacity) {
332
  opacity: @opacity / 100;
Alec Rust's avatar
Alec Rust committed
333
  filter: ~"alpha(opacity=@{opacity})";
334
335
336
337
338
339
340
}



// BACKGROUNDS
// --------------------------------------------------

341
342
343
344
// Add an alphatransparency value to any background or border color (via Elyse Holladay)
#translucent {
  .background(@color: @white, @alpha: 1) {
    background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
345
346
347
  }
  .border(@color: @white, @alpha: 1) {
    border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
348
    .background-clip(padding-box);
349
  }
350
351
}

Mark Otto's avatar
Mark Otto committed
352
// Gradient Bar Colors for buttons and alerts
353
.gradientBar(@primaryColor, @secondaryColor) {
354
  #gradient > .vertical(@primaryColor, @secondaryColor);
355
356
357
358
  border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
  border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
}

359
360
// Gradients
#gradient {
361
  .horizontal(@startColor: #555, @endColor: #333) {
362
363
364
    background-color: @endColor;
    background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
    background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
365
    background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
366
367
368
    background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
    background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
    background-image: linear-gradient(left, @startColor, @endColor); // Le standard
369
    background-repeat: repeat-x;
370
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down
371
  }
372
  .vertical(@startColor: #555, @endColor: #333) {
373
    background-color: mix(@startColor, @endColor, 60%);
Mark Otto's avatar
Mark Otto committed
374
375
    background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
    background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
376
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
Mark Otto's avatar
Mark Otto committed
377
378
379
    background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
    background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
    background-image: linear-gradient(top, @startColor, @endColor); // The standard
380
    background-repeat: repeat-x;
381
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down
382
  }
383
  .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
384
385
    background-color: @endColor;
    background-repeat: repeat-x;
386
387
388
389
390
    background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
    background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10
    background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
    background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
    background-image: linear-gradient(@deg, @startColor, @endColor); // The standard
391
  }
sankage's avatar
sankage committed
392
  .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
393
    background-color: mix(@midColor, @endColor, 80%);
394
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
sankage's avatar
sankage committed
395
    background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
Mark Otto's avatar
Mark Otto committed
396
    background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
sankage's avatar
sankage committed
397
398
399
    background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);
    background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
    background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
400
    background-repeat: no-repeat;
401
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
402
  }
403
  .radial(@innerColor: #555, @outerColor: #333)  {
404
405
406
407
408
    background-color: @outerColor;
    background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor));
    background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor);
    background-image: -moz-radial-gradient(circle, @innerColor, @outerColor);
    background-image: -ms-radial-gradient(circle, @innerColor, @outerColor);
409
    background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
410
411
    background-repeat: no-repeat;
  }
412
  .striped(@color, @angle: -45deg) {
Piotrek Okoński's avatar
Piotrek Okoński committed
413
    background-color: @color;
414
415
416
417
418
419
    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: -ms-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: -o-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
420
  }
421
}
422
423
// Reset filters for IE
.reset-filter() {
424
  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
425
}
426

427

428
429
430
431

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

432
// Horizontal dividers
433
434
// -------------------------
// Dividers (basically an hr) within dropdowns and nav lists
435
.nav-divider(@top: #e5e5e5, @bottom: @white) {
436
437
438
439
440
  // IE7 needs a set width since we gave a height. Restricting just
  // to IE7 to keep the 1px left/right space in other browsers.
  // It is unclear where IE is getting the extra space that we need
  // to negative-margin away, but so it goes.
  *width: 100%;
Jacob Thornton's avatar
Jacob Thornton committed
441
442
  height: 1px;
  margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px
443
  *margin: -5px 0 5px;
Jacob Thornton's avatar
Jacob Thornton committed
444
  overflow: hidden;
445
446
  background-color: @top;
  border-bottom: 1px solid @bottom;
447
448
}

449
// Button backgrounds
450
// ------------------
451
452
453
.buttonBackground(@startColor, @endColor) {
  // gradientBar will set the background to a pleasing blend of these, to support IE<=9
  .gradientBar(@startColor, @endColor);
454
  *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */
Jacob Thornton's avatar
Jacob Thornton committed
455
  .reset-filter();
456
457

  // in these cases the gradient won't cover the background, so we override
458
  &:hover, &:active, &.active, &.disabled, &[disabled] {
459
    background-color: @endColor;
460
    *background-color: darken(@endColor, 5%);
461
462
463
464
465
466
467
468
469
  }

  // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
  &:active,
  &.active {
    background-color: darken(@endColor, 10%) e("\9");
  }
}

470
471
472
473
474
475
476
477
478
// Navbar vertical align
// -------------------------
// Vertically center elements in the navbar.
// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin.
.navbarVerticalAlign(@elementHeight) {
  margin-top: (@navbarHeight - @elementHeight) / 2;
}

// Popover arrows
479
// -------------------------
480
481
// For tipsies and popovers
#popoverArrow {
482
  .top(@arrowWidth: 5px, @color: @black) {
483
484
485
486
487
    bottom: 0;
    left: 50%;
    margin-left: -@arrowWidth;
    border-left: @arrowWidth solid transparent;
    border-right: @arrowWidth solid transparent;
488
    border-top: @arrowWidth solid @color;
489
  }
490
  .left(@arrowWidth: 5px, @color: @black) {
491
492
493
494
495
    top: 50%;
    right: 0;
    margin-top: -@arrowWidth;
    border-top: @arrowWidth solid transparent;
    border-bottom: @arrowWidth solid transparent;
496
    border-left: @arrowWidth solid @color;
497
  }
498
  .bottom(@arrowWidth: 5px, @color: @black) {
499
500
501
502
503
    top: 0;
    left: 50%;
    margin-left: -@arrowWidth;
    border-left: @arrowWidth solid transparent;
    border-right: @arrowWidth solid transparent;
504
    border-bottom: @arrowWidth solid @color;
505
  }
506
  .right(@arrowWidth: 5px, @color: @black) {
507
508
509
510
511
    top: 50%;
    left: 0;
    margin-top: -@arrowWidth;
    border-top: @arrowWidth solid transparent;
    border-bottom: @arrowWidth solid transparent;
512
    border-right: @arrowWidth solid @color;
513
514
  }
}
515
516
517
518

// Grid System
// -----------

519
// Centered container element
520
521
.container-fixed() {
  margin-right: auto;
Jacob Thornton's avatar
Jacob Thornton committed
522
  margin-left: auto;
523
524
525
  .clearfix();
}

526
// Table columns
527
528
529
530
531
532
.tableColumns(@columnSpan: 1) {
  float: none; // undo default grid column styles
  width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells
  margin-left: 0; // undo default grid column styles
}

533
534
535
536
537
538
// Make a Grid
// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
.makeRow() {
  margin-left: @gridGutterWidth * -1;
  .clearfix();
}
539
.makeColumn(@columns: 1, @offset: 0) {
540
  float: left;
541
  margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2);
542
543
544
545
  width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
}

// The Grid
546
547
548
549
#grid {

  .core (@gridColumnWidth, @gridGutterWidth) {

550
551
552
553
554
    .spanX (@index) when (@index > 0) {
      (~".span@{index}") { .span(@index); }
      .spanX(@index - 1);
    }
    .spanX (0) {}
555

556
557
558
    .offsetX (@index) when (@index > 0) {
      (~".offset@{index}") { .offset(@index); }
      .offsetX(@index - 1);
559
    }
560
    .offsetX (0) {}
561
562

    .offset (@columns) {
563
      margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
564
565
    }

566
567
568
569
    .span (@columns) {
      width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
    }

570
571
572
573
574
575
576
577
578
579
    .row {
      margin-left: @gridGutterWidth * -1;
      .clearfix();
    }

    [class*="span"] {
      float: left;
      margin-left: @gridGutterWidth;
    }

580
    // Set the container width, and override it for fixed navbars in media queries
581
582
    .container,
    .navbar-fixed-top .container,
583
584
    .navbar-fixed-bottom .container { .span(@gridColumns); }

585
    // generate .spanX and .offsetX
586
587
    .spanX (@gridColumns);
    .offsetX (@gridColumns);
588
589
590
591
592

  }

  .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {

593
    .spanX (@index) when (@index > 0) {
594
      (~".span@{index}") { .span(@index); }
595
596
597
598
      .spanX(@index - 1);
    }
    .spanX (0) {}

Igor Rzegocki's avatar
Igor Rzegocki committed
599
    .offsetX (@index) when (@index > 0) {
600
      (~'.offset@{index}, .row-fluid .offset@{index}:first-child') { .offset(@index); }
Igor Rzegocki's avatar
Igor Rzegocki committed
601
602
603
604
605
606
607
608
609
      .offsetX(@index - 1);
    }
    .offsetX (0) {}

    .offset (@columns) {
      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + @fluidGridGutterWidth;
	  *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
    }

610
    .span (@columns) {
611
      width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
612
      *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
613
614
615
616
617
    }

    .row-fluid {
      width: 100%;
      .clearfix();
618
      [class*="span"] {
619
        .input-block-level();
620
621
        float: left;
        margin-left: @fluidGridGutterWidth;
622
        *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
623
      }
624
      [class*="span"]:first-child {
625
626
        margin-left: 0;
      }
627

Igor Rzegocki's avatar
Igor Rzegocki committed
628
      // generate .spanX and .offsetX
629
      .spanX (@gridColumns);
Igor Rzegocki's avatar
Igor Rzegocki committed
630
      .offsetX (@gridColumns);
631
632
633
634
635
636
    }

  }

  .input(@gridColumnWidth, @gridGutterWidth) {

637
638
639
640
641
642
    .spanX (@index) when (@index > 0) {
      (~"input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index}") { .span(@index); }
      .spanX(@index - 1);
    }
    .spanX (0) {}

643
644
645
646
647
648
649
    .span(@columns) {
      width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 10;
    }

    input,
    textarea,
    .uneditable-input {
650
      margin-left: 0; // override margin-left from core grid system
651
652
    }

653
654
655
    // generate .spanX
    .spanX (@gridColumns);

656
657
  }

658
}