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

5

6
// Clearfix for clearing floats like a boss h5bp.com/q
7
.clearfix() {
8
  zoom: 1;
9
  &:before,
10
  &:after {
11
12
    display: table;
    content: "";
13
14
    zoom: 1;
    *display: inline;
15
16
  }
  &:after {
17
    clear: both;
18
  }
19
20
21
}

// Center-align a block level element
22
.center-block() {
23
  display: block;
24
25
  margin-left: auto;
  margin-right: auto;
26
27
28
29
}

// Sizing shortcuts
.size(@height: 5px, @width: 5px) {
30
31
  height: @height;
  width: @width;
32
33
}
.square(@size: 5px) {
34
  .size(@size, @size);
35
36
37
38
39
40
41
42
43
44
45
46
47
48
}

// Input placeholder text
.placeholder(@color: @grayLight) {
  :-moz-placeholder {
    color: @color;
  }
  ::-webkit-input-placeholder {
    color: @color;
  }
}

// Font Stacks
#font {
49
50
51
52
53
54
55
56
57
58
  #family {
    .serif() {
      font-family: "Georgia", Times New Roman, Times, serif;
    }
    .sans-serif() {
      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    }
    .monospace() {
      font-family: "Menlo", Monaco, Courier New, monospace;
    }
59
  }
60
  .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
61
62
63
64
    font-size: @size;
    font-weight: @weight;
    line-height: @lineHeight;
  }
65
66
67
  .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
    #font > #family > .serif;
    #font > .shorthand(@size, @weight, @lineHeight);
68
  }
69
70
71
72
73
74
75
  .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);
76
77
78
79
  }
}

// Grid System
80
.fixed-container() {
81
  width: @siteWidth;
82
  margin-left: auto;
Mark Otto's avatar
Mark Otto committed
83
  margin-right: auto;
84
85
  .clearfix();
}
86
87
.columns(@columns: 1) {
  width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
88
}
89
90
.offset(@columns: 1) {
  margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)) + (@gridGutterWidth * 2);
91
}
92

93
94
95
96
97
98
99
100
101
102
103
// Necessary grid styles for every column to make them appear next to each other horizontally
.gridColumn() {
  display: inline;
  float: left;
  margin-left: @gridGutterWidth;
}
// makeColumn can be used to mark any element (e.g., .content-primary) as a column without changing markup to .span something
.makeColumn(@columnSpan: 1) {
  .gridColumn();
  .columns(@columnSpan);
}
104
105
106
107

// Border Radius
.border-radius(@radius: 5px) {
  -webkit-border-radius: @radius;
108
109
     -moz-border-radius: @radius;
          border-radius: @radius;
110
}
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
.border-radius-custom(@topLeft, @topRight, @bottomRight, @bottomLeft) {
  -webkit-border-top-left-radius: @topLeft;
      -moz-border-radius-topleft: @topLeft;
          border-top-left-radius: @topLeft;
  -webkit-border-top-right-radius: @topRight;
      -moz-border-radius-topright: @topRight;
          border-top-right-radius: @topRight;
  -webkit-border-bottom-right-radius: @bottomRight;
      -moz-border-radius-bottomright: @bottomRight;
          border-bottom-right-radius: @bottomRight;
  -webkit-border-bottom-left-radius: @bottomLeft;
      -moz-border-radius-bottomleft: @bottomLeft;
          border-bottom-left-radius: @bottomLeft;
  -webkit-background-clip: padding-box;
     -moz-background-clip: padding;
          background-clip: padding-box;
}
128
129
130
131

// Drop shadows
.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
  -webkit-box-shadow: @shadow;
132
133
     -moz-box-shadow: @shadow;
          box-shadow: @shadow;
134
135
136
137
}

// Transitions
.transition(@transition) {
138
139
140
141
142
143
144
145
146
  -webkit-transition: @transition;
     -moz-transition: @transition;
      -ms-transition: @transition;
       -o-transition: @transition;
          transition: @transition;
}

// Transform for scale and rotate
// translate, rotate, scale -- need to finalize
147
.rotate(@degrees: 5deg) {
148
149
  -webkit-transform: rotate(@degrees);
     -moz-transform: rotate(@degrees);
Mark Otto's avatar
Mark Otto committed
150
151
      -ms-transform: rotate(@degrees);
       -o-transform: rotate(@degrees);
152
153
154
155
156
          transform: rotate(@degrees);
}
.scale(@value: 1.5) {
  -webkit-transform: scale(@value);
     -moz-transform: scale(@value);
Mark Otto's avatar
Mark Otto committed
157
158
      -ms-transform: scale(@value);
       -o-transform: scale(@value);
159
          transform: scale(@value);
160
}
Mark Otto's avatar
Mark Otto committed
161
162
163
164
165
166
167
.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);
}
168

169
// Background clipping
170
// Heads up: FF 3.6 and under need padding instead of padding-box
171
.background-clip(@clip) {
172
173
174
  -webkit-background-clip: @clip;
     -moz-background-clip: @clip;
          background-clip: @clip;
175
176
}

177
178
179
180
181
182
// Resize anything
.resizable(@direction: both) {
  resize: @direction; // Options: horizontal, vertical, both
  overflow: auto; // Safari fix
}

183
184
// CSS3 Content Columns
.content-columns(@columnCount, @columnGap: 20px) {
185
186
  -webkit-column-count: @columnCount;
     -moz-column-count: @columnCount;
187
188
          column-count: @columnCount;
  -webkit-column-gap: @columnGap;
189
     -moz-column-gap: @columnGap;
190
          column-gap: @columnGap;
191
192
193
194
195
196
}

// 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);
197
198
199
200
201
  }
  .border(@color: @white, @alpha: 1) {
    border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
    background-clip: padding-box;
  }
202
203
}

Mark Otto's avatar
Mark Otto committed
204
// Gradient Bar Colors for buttons and alerts
205
206
207
208
209
210
211
.gradientBar(@primaryColor, @secondaryColor) {
  #gradient > .vertical(@primaryColor, @secondaryColor);
  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
  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%);
}

212
213
// Gradients
#gradient {
214
  .horizontal(@startColor: #555, @endColor: #333) {
215
216
217
218
219
220
221
222
    background-color: @endColor;
    background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); // Konqueror
    background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
    background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
    background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
    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
223
    background-repeat: repeat-x;
224
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down
225
  }
226
  .vertical(@startColor: #555, @endColor: #333) {
227
    background-color: @endColor;
228
    background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror
Mark Otto's avatar
Mark Otto committed
229
230
    background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
    background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
231
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
Mark Otto's avatar
Mark Otto committed
232
233
234
    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
235
236
    background-repeat: repeat-x;
   filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
237
  }
238
  .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
239
240
    background-color: @endColor;
    background-repeat: repeat-x;
241
242
243
244
245
    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
246
  }
sankage's avatar
sankage committed
247
  .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
248
249
    background-color: @endColor;
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
sankage's avatar
sankage committed
250
    background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
Mark Otto's avatar
Mark Otto committed
251
    background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
sankage's avatar
sankage committed
252
253
254
    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);
255
    background-repeat: no-repeat;
256
    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
257
  }
258
259
260
261
262
263
264
265
266
  .radial(@centerColor: #555, @outsideColor: #333)  {
    background-color: @outsideColor;
    background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@centerColor), to(@outsideColor));
    background-image: -webkit-radial-gradient(circle, @centerColor, @outsideColor);
    background-image: -moz-radial-gradient(circle, @centerColor, @outsideColor);
    background-image: -ms-radial-gradient(circle, @centerColor, @outsideColor);
    background-repeat: no-repeat;
    // Opera cannot do radial gradients yet
  }
267
268
}

269
270
271
272
273
// Reset filters for IE
.reset-filter() {
  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
}

274
275
// Opacity
.opacity(@opacity: 100) {
276
277
278
279
  filter: e(%("alpha(opacity=%d)", @opacity));
  -khtml-opacity: @opacity / 100;
    -moz-opacity: @opacity / 100;
         opacity: @opacity / 100;
280
281
282
283
284
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
}

// Popover arrows
// For tipsies and popovers
#popoverArrow {
  .above(@arrowWidth: 5px) {
    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;
  }
  .below(@arrowWidth: 5px) {
    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;
  }
}