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

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

88
89
90
91
92
93
94
95
96
97
98
// 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);
}
99
100
101
102

// Border Radius
.border-radius(@radius: 5px) {
  -webkit-border-radius: @radius;
103
104
     -moz-border-radius: @radius;
          border-radius: @radius;
105
}
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
.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;
}
123
124
125
126

// Drop shadows
.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
  -webkit-box-shadow: @shadow;
127
128
     -moz-box-shadow: @shadow;
          box-shadow: @shadow;
129
130
131
132
}

// Transitions
.transition(@transition) {
133
134
135
136
137
138
139
140
141
  -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
142
.rotate(@degrees: 5deg) {
143
144
  -webkit-transform: rotate(@degrees);
     -moz-transform: rotate(@degrees);
Mark Otto's avatar
Mark Otto committed
145
146
      -ms-transform: rotate(@degrees);
       -o-transform: rotate(@degrees);
147
148
149
150
151
          transform: rotate(@degrees);
}
.scale(@value: 1.5) {
  -webkit-transform: scale(@value);
     -moz-transform: scale(@value);
Mark Otto's avatar
Mark Otto committed
152
153
      -ms-transform: scale(@value);
       -o-transform: scale(@value);
154
          transform: scale(@value);
155
}
Mark Otto's avatar
Mark Otto committed
156
157
158
159
160
161
162
.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);
}
163

164
// Background clipping
165
// Heads up: FF 3.6 and under need padding instead of padding-box
166
.background-clip(@clip) {
167
168
169
  -webkit-background-clip: @clip;
     -moz-background-clip: @clip;
          background-clip: @clip;
170
171
}

172
173
174
175
176
177
// Resize anything
.resizable(@direction: both) {
  resize: @direction; // Options: horizontal, vertical, both
  overflow: auto; // Safari fix
}

178
179
// CSS3 Content Columns
.content-columns(@columnCount, @columnGap: 20px) {
180
181
  -webkit-column-count: @columnCount;
     -moz-column-count: @columnCount;
182
183
          column-count: @columnCount;
  -webkit-column-gap: @columnGap;
184
     -moz-column-gap: @columnGap;
185
          column-gap: @columnGap;
186
187
188
189
190
191
}

// 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);
192
193
194
195
196
  }
  .border(@color: @white, @alpha: 1) {
    border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
    background-clip: padding-box;
  }
197
198
}

199
200
201
202
203
204
205
206
// Gradient Bar Colors for buttons and allerts
.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%);
}

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

264
265
266
267
268
// Reset filters for IE
.reset-filter() {
  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
}

269
270
// Opacity
.opacity(@opacity: 100) {
271
272
273
274
  filter: e(%("alpha(opacity=%d)", @opacity));
  -khtml-opacity: @opacity / 100;
    -moz-opacity: @opacity / 100;
         opacity: @opacity / 100;
275
276
277
278
279
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
}

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