mixins.less 21.9 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: 5px, @width: 5px) {
74
  width: @width;
75
  height: @height;
76
77
}
.square(@size: 5px) {
78
  .size(@size, @size);
79
80
}

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

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

101
102
103
104
105


// FONTS
// --------------------------------------------------

106
#font {
107
108
  #family {
    .serif() {
Mark Otto's avatar
Mark Otto committed
109
      font-family: Georgia, "Times New Roman", Times, serif;
110
111
112
113
114
    }
    .sans-serif() {
      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    }
    .monospace() {
Jacob Thornton's avatar
Jacob Thornton committed
115
      font-family: Menlo, Monaco, "Courier New", monospace;
116
    }
117
  }
118
  .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
119
120
121
122
    font-size: @size;
    font-weight: @weight;
    line-height: @lineHeight;
  }
123
124
125
  .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
    #font > #family > .serif;
    #font > .shorthand(@size, @weight, @lineHeight);
126
  }
127
128
129
130
131
132
133
  .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);
134
135
136
  }
}

137
138
139
140
141
142
143


// GRID SYSTEM
// --------------------------------------------------

// Site container
// -------------------------
144
.container-fixed() {
145
  margin-left: auto;
Mark Otto's avatar
Mark Otto committed
146
  margin-right: auto;
147
148
  .clearfix();
}
149

150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
// Le grid system
// -------------------------
#gridSystem {
  // Setup the mixins to be used
  .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, @columns) {
    width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
  } 
  .offset(@gridColumnWidth, @gridGutterWidth, @columns) {
    margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)) + (@gridGutterWidth * 2);
  }
  .gridColumn(@gridGutterWidth) {
    float: left;
    margin-left: @gridGutterWidth;
  }
  // Take these values and mixins, and make 'em do their thang
  .generate(@gridColumns, @gridColumnWidth, @gridGutterWidth) {
    // Row surrounds the columns
    .row {
      margin-left: @gridGutterWidth * -1;
      .clearfix();
    }
    // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks @dhg)
    [class*="span"] {
      #gridSystem > .gridColumn(@gridGutterWidth);
    }
    // Default columns
    .span1     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 1); }
    .span2     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 2); }
    .span3     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 3); }
    .span4     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 4); }
    .span5     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 5); }
    .span6     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 6); }
    .span7     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 7); }
    .span8     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 8); }
    .span9     { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 9); }
    .span10    { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 10); }
    .span11    { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 11); }
187
188
    .span12    { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 12); }
    .container { #gridSystem > .columns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, @gridColumns); }
189
190
191
192
193
194
195
196
197
198
199
200
201
    // Offset column options
    .offset1   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 1); }
    .offset2   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 2); }
    .offset3   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 3); }
    .offset4   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 4); }
    .offset5   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 5); }
    .offset6   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 6); }
    .offset7   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 7); }
    .offset8   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 8); }
    .offset9   { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 9); }
    .offset10  { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 10); }
    .offset11  { #gridSystem > .offset(@gridColumnWidth, @gridGutterWidth, 11); }
  }
202
}
203
204
205
206
207
208
209

// Fluid grid system
// -------------------------
#fluidGridSystem {
  // Setup the mixins to be used
  .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, @columns) {
    width: 1% * (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
210
  }
211
212
213
214
215
  .gridColumn(@fluidGridGutterWidth) {
    float: left;
    margin-left: @fluidGridGutterWidth;
  }
  // Take these values and mixins, and make 'em do their thang
216
  .generate(@gridColumns, @fluidGridColumnWidth, @fluidGridGutterWidth) {
217
218
219
220
221
222
    // Row surrounds the columns
    .row-fluid {
      width: 100%;
      .clearfix();

      // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks @dhg)
223
      > [class*="span"] {
224
225
        #fluidGridSystem > .gridColumn(@fluidGridGutterWidth);
      }
226
      > [class*="span"]:first-child {
227
228
229
        margin-left: 0;
      }
      // Default columns
230
231
232
233
234
235
236
237
238
239
240
241
      > .span1     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 1); }
      > .span2     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 2); }
      > .span3     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 3); }
      > .span4     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 4); }
      > .span5     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 5); }
      > .span6     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 6); }
      > .span7     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 7); }
      > .span8     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 8); }
      > .span9     { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 9); }
      > .span10    { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 10); }
      > .span11    { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 11); }
      > .span12    { #fluidGridSystem > .columns(@fluidGridGutterWidth, @fluidGridColumnWidth, 12); }
242
243
    }
  }
244
}
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269

// Input grid system
// -------------------------
#inputGridSystem {
  .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, @columns) {
    width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 10;
  }
  .generate(@gridColumns, @gridColumnWidth, @gridGutterWidth) {
    input,
    textarea,
    .uneditable-input {
      &.span1     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 1); }
      &.span2     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 2); }
      &.span3     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 3); }
      &.span4     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 4); }
      &.span5     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 5); }
      &.span6     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 6); }
      &.span7     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 7); }
      &.span8     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 8); }
      &.span9     { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 9); }
      &.span10    { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 10); }
      &.span11    { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 11); }
      &.span12    { #inputGridSystem > .inputColumns(@gridGutterWidth, @gridColumnWidth, @gridRowWidth, 12); }
    }
  }
270
271
}

272
273
274
275
276
277
278
279
280
281
282
283
284
// Make a Grid
// -------------------------
// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
.makeRow() {
  margin-left: @gridGutterWidth * -1;
  .clearfix();
}
.makeColumn(@columns: 1) {
  float: left;
  margin-left: @gridGutterWidth;
  width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
}

285
286


287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
// Form field states (used in forms.less)
// --------------------------------------------------

// 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
  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;
  }
}



320
321
322
// CSS3 PROPERTIES
// --------------------------------------------------

323
324
325
// Border Radius
.border-radius(@radius: 5px) {
  -webkit-border-radius: @radius;
326
     -moz-border-radius: @radius;
327
          border-radius: @radius;
328
329
330
331
332
}

// Drop shadows
.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
  -webkit-box-shadow: @shadow;
333
     -moz-box-shadow: @shadow;
334
          box-shadow: @shadow;
335
336
337
338
}

// Transitions
.transition(@transition) {
339
340
341
342
343
344
345
  -webkit-transition: @transition;
     -moz-transition: @transition;
      -ms-transition: @transition;
       -o-transition: @transition;
          transition: @transition;
}

Mark Otto's avatar
Mark Otto committed
346
// Transformations
347
.rotate(@degrees) {
348
349
  -webkit-transform: rotate(@degrees);
     -moz-transform: rotate(@degrees);
Mark Otto's avatar
Mark Otto committed
350
351
      -ms-transform: rotate(@degrees);
       -o-transform: rotate(@degrees);
352
353
          transform: rotate(@degrees);
}
354
355
356
357
358
359
.scale(@ratio) {
  -webkit-transform: scale(@ratio);
     -moz-transform: scale(@ratio);
      -ms-transform: scale(@ratio);
       -o-transform: scale(@ratio);
          transform: scale(@ratio);
360
}
Mark Otto's avatar
Mark Otto committed
361
362
363
364
365
366
367
.translate(@x: 0, @y: 0) {
  -webkit-transform: translate(@x, @y);
     -moz-transform: translate(@x, @y);
      -ms-transform: translate(@x, @y);
       -o-transform: translate(@x, @y);
          transform: translate(@x, @y);
}
Mark Otto's avatar
Mark Otto committed
368
369
370
371
372
373
374
.skew(@x: 0, @y: 0) {
  -webkit-transform: skew(@x, @y);
     -moz-transform: skew(@x, @y);
      -ms-transform: skew(@x, @y);
       -o-transform: skew(@x, @y);
          transform: skew(@x, @y);
}
375
376
377
378
379
380
381
.translate3d(@x: 0, @y: 0, @z: 0) {
  -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);
}
382

383
// Background clipping
384
// Heads up: FF 3.6 and under need "padding" instead of "padding-box"
385
.background-clip(@clip) {
386
  -webkit-background-clip: @clip;
387
     -moz-background-clip: @clip;
388
          background-clip: @clip;
389
390
}

391
392
393
394
395
396
397
398
399
// Background sizing
.background-size(@size){
  -webkit-background-size: @size;
     -moz-background-size: @size;
       -o-background-size: @size;
          background-size: @size;
}


400
401
402
403
404
405
406
// Box sizing
.box-sizing(@boxmodel) {
  -webkit-box-sizing: @boxmodel;
     -moz-box-sizing: @boxmodel;
          box-sizing: @boxmodel;
}

407
408
409
410
411
412
413
414
415
// User select
// For selecting text on the page
.user-select(@select) {
  -webkit-user-select: @select;
     -moz-user-select: @select;
       -o-user-select: @select;
          user-select: @select;
}

416
417
418
419
420
421
// Resize anything
.resizable(@direction: both) {
  resize: @direction; // Options: horizontal, vertical, both
  overflow: auto; // Safari fix
}

422
// CSS3 Content Columns
423
.content-columns(@columnCount, @columnGap: @gridColumnGutter) {
424
425
  -webkit-column-count: @columnCount;
     -moz-column-count: @columnCount;
426
427
          column-count: @columnCount;
  -webkit-column-gap: @columnGap;
428
     -moz-column-gap: @columnGap;
429
          column-gap: @columnGap;
430
431
}

432
433
// Opacity
.opacity(@opacity: 100) {
434
435
  opacity: @opacity / 100;
   filter: e(%("alpha(opacity=%d)", @opacity));
436
437
438
439
440
441
442
}



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

443
444
445
446
// 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);
447
448
449
  }
  .border(@color: @white, @alpha: 1) {
    border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
450
    .background-clip(padding-box);
451
  }
452
453
}

Mark Otto's avatar
Mark Otto committed
454
// Gradient Bar Colors for buttons and alerts
455
.gradientBar(@primaryColor, @secondaryColor) {
456
  #gradient > .vertical(@primaryColor, @secondaryColor);
457
458
459
460
  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%);
}

461
462
// Gradients
#gradient {
463
  .horizontal(@startColor: #555, @endColor: #333) {
464
465
466
    background-color: @endColor;
    background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
    background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
467
    background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
468
469
470
    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
471
    background-repeat: repeat-x;
472
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down
473
  }
474
  .vertical(@startColor: #555, @endColor: #333) {
475
    background-color: mix(@startColor, @endColor, 60%);
Mark Otto's avatar
Mark Otto committed
476
477
    background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
    background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
478
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
Mark Otto's avatar
Mark Otto committed
479
480
481
    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
482
    background-repeat: repeat-x;
483
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
484
  }
485
  .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
486
487
    background-color: @endColor;
    background-repeat: repeat-x;
488
489
490
491
492
    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
493
  }
sankage's avatar
sankage committed
494
  .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
495
    background-color: mix(@midColor, @endColor, 80%);
496
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
sankage's avatar
sankage committed
497
    background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
Mark Otto's avatar
Mark Otto committed
498
    background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
sankage's avatar
sankage committed
499
500
501
    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);
502
    background-repeat: no-repeat;
503
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback
504
  }
505
  .radial(@innerColor: #555, @outerColor: #333)  {
506
507
508
509
510
    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);
511
    background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
512
513
    background-repeat: no-repeat;
  }
514
  .striped(@color, @angle: -45deg) {
Piotrek Okoński's avatar
Piotrek Okoński committed
515
    background-color: @color;
516
517
518
519
520
521
    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
522
  }
523
}
524
525
526
527
// Reset filters for IE
.reset-filter() {
  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
}
528

529

530
531
532
533
534
// Mixin for generating button backgrounds
// ---------------------------------------
.buttonBackground(@startColor, @endColor) {
  // gradientBar will set the background to a pleasing blend of these, to support IE<=9
  .gradientBar(@startColor, @endColor);
535
  .reset-filter();
536
537

  // in these cases the gradient won't cover the background, so we override
538
  &:hover, &:active, &.active, &.disabled, &[disabled] {
539
540
541
542
543
544
545
546
547
548
    background-color: @endColor;
  }

  // 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");
  }
}

549
550
551
552
553
554

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

// POPOVER ARROWS
// -------------------------
555
556
// For tipsies and popovers
#popoverArrow {
557
  .top(@arrowWidth: 5px) {
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
    bottom: 0;
    left: 50%;
    margin-left: -@arrowWidth;
    border-left: @arrowWidth solid transparent;
    border-right: @arrowWidth solid transparent;
    border-top: @arrowWidth solid @black;
  }
  .left(@arrowWidth: 5px) {
    top: 50%;
    right: 0;
    margin-top: -@arrowWidth;
    border-top: @arrowWidth solid transparent;
    border-bottom: @arrowWidth solid transparent;
    border-left: @arrowWidth solid @black;
  }
573
  .bottom(@arrowWidth: 5px) {
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
    top: 0;
    left: 50%;
    margin-left: -@arrowWidth;
    border-left: @arrowWidth solid transparent;
    border-right: @arrowWidth solid transparent;
    border-bottom: @arrowWidth solid @black;
  }
  .right(@arrowWidth: 5px) {
    top: 50%;
    left: 0;
    margin-top: -@arrowWidth;
    border-top: @arrowWidth solid transparent;
    border-bottom: @arrowWidth solid transparent;
    border-right: @arrowWidth solid @black;
  }
}