ultimate-mixins 0.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,130 @@
1
+ @mixin deprecate($subject, $instead: false) {
2
+ @warn "\"#{$subject}\" DEPRECATED!#{if($instead, " Use instead: \"#{$instead}\"", '')}";
3
+ }
4
+
5
+ @function isset($v) {
6
+ @return $v != none and $v != false;
7
+ }
8
+
9
+ @function complex-isset($list, $l: length($list)) {
10
+ $i: 1;
11
+ @while $i <= $l and isset(nth($list, $i)) {
12
+ $i: $i + 1;
13
+ }
14
+ @return $i > $l;
15
+ }
16
+
17
+ @function list-rtrim($list, $count: 1) {
18
+ $r: ();
19
+ $l: length($list) - $count;
20
+ $i: 1;
21
+ @while $i <= $l {
22
+ $r: append($r, nth($list, $i));
23
+ $i: $i + 1;
24
+ }
25
+ @return $r;
26
+ }
27
+
28
+ @function complex-list($params) {
29
+ $l: length($params);
30
+ @if $l > 1 and nth($params, $l) == !important {
31
+ $params: list-rtrim($params);
32
+ $l: $l - 1;
33
+ }
34
+ @if $l < 4 {
35
+ @if $l < 3 {
36
+ $params: join($params, nth($params, 1));
37
+ }
38
+ @if $l > 1 {
39
+ $params: join($params, nth($params, 2));
40
+ } @else {
41
+ $params: join($params, $params);
42
+ }
43
+ }
44
+ @return $params;
45
+ }
46
+
47
+ @mixin complex-property($property, $params, $complex-params: false) {
48
+ @if isset($params) {
49
+ $l: length($params);
50
+ @if $l == 1 or complex-isset($params) {
51
+ #{$property}: $params;
52
+ } @else {
53
+ @if $l < 4 {
54
+ $params: if(length($complex-params) >= 4, $complex-params, complex-list($params));
55
+ }
56
+ $i: 0;
57
+ @each $side in top, right, bottom, left {
58
+ $i: $i + 1;
59
+ $p: nth($params, $i);
60
+ @if isset($p) {
61
+ #{$property}-#{$side}: $p;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+
68
+ @function strip-px($v) {
69
+ @return if(unit($v) == "px", $v / 1px, $v);
70
+ }
71
+
72
+ @function list-to-string($list, $separator: "") {
73
+ $result: "";
74
+ $first: true;
75
+ @each $cut in $list {
76
+ @if $first {
77
+ $first: false;
78
+ $result: $cut;
79
+ } @else {
80
+ $result: "#{$result}#{$separator}#{$cut}"
81
+ }
82
+ }
83
+ @return $result;
84
+ }
85
+
86
+ @function change-separator($list, $separator: comma) {
87
+ $result: ();
88
+ @each $value in $list {
89
+ $result: append($result, $value, $separator);
90
+ }
91
+ @return $result;
92
+ }
93
+
94
+ @function compact-list($list, $separator: comma) {
95
+ $result: ();
96
+ @each $value in $list {
97
+ @if isset($value) {
98
+ $result: append($result, $value, $separator);
99
+ }
100
+ }
101
+ @return $result;
102
+ }
103
+
104
+ @function hack-ie8($params) {
105
+ @return unquote("#{$params}\0/");
106
+ }
107
+
108
+ @function contains($list, $var) {
109
+ @each $item in $list { @if $item == $var { @return true; } }
110
+ @return false;
111
+ }
112
+
113
+ @function find-typed-item($list, $type, $default: false) {
114
+ @each $item in $list { @if type-of($item) == $type { @return $item; } }
115
+ @return $default;
116
+ }
117
+
118
+ @function find-color($list, $default: false) {
119
+ @return find-typed-item($list, color, $default);
120
+ }
121
+
122
+ @function _dec-size($value, $dec-list...) {
123
+ $value-unit: unit($value);
124
+ @each $dec-value in $dec-list {
125
+ @if unit($dec-value) == $value-unit {
126
+ $value: $value - $dec-value;
127
+ }
128
+ }
129
+ @return $value;
130
+ }
@@ -0,0 +1,40 @@
1
+
2
+ $support-ie: true !default;
3
+
4
+ // Provide cross-browser CSS text-shadow with hardcore ie-hack.
5
+ // example:
6
+ // @include text-shadow(#3b3b3b 1px 1px 1px);
7
+ // produce:
8
+ // text-shadow: 0 2px #000;
9
+ // filter: shadow(Color=#3b3b3b, Direction=135, Strength=1.414);
10
+ @mixin text-shadow_hard($params) {
11
+ $l: length($params);
12
+ $color: nth($params, $l);
13
+ @if $color == none {
14
+ text-shadow: none;
15
+ @if $support-ie {
16
+ filter: shadow(enabled=false);
17
+ }
18
+ } @else {
19
+ text-shadow: $params;
20
+ @if $support-ie {
21
+ $params-offset: 0;
22
+ @if type-of($color) != color {
23
+ $color: nth($params, 1);
24
+ @if type-of($color) == color {
25
+ $params-offset: 1;
26
+ } @else {
27
+ $color: #000;
28
+ }
29
+ }
30
+ $offset-x: 0;
31
+ $offset-y: 0;
32
+ @if $l > 2 {
33
+ $offset-x : nth($params, $params-offset + 1);
34
+ $offset-y : nth($params, $params-offset + 2);
35
+ }
36
+ $polar: polar($offset-x, $offset-y);
37
+ filter: shadow(Color=$color, Direction=nth($polar, 1), Strength=nth($polar, 2));
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,44 @@
1
+ // This mixin provides basic support for CSS properties with custom vendors implementations
2
+ // are identical except for the property prefix.
3
+ // example:
4
+ // @include vendors(webkit moz, border-radius, 5px);
5
+ // produce:
6
+ // -webkit-border-radius: 5px;
7
+ // -moz-border-radius: 5px;
8
+ // border-radius: 5px;
9
+ @mixin vendors($vendors, $property, $params, $origin: true) {
10
+ @each $vendor in $vendors {
11
+ -#{$vendor}-#{$property}: $params;
12
+ }
13
+ @if $origin {
14
+ #{$property}: $params;
15
+ }
16
+ }
17
+
18
+ // Same as vendors(), but for cases when the property is the same and the value is vendorized.
19
+ // examples:
20
+ // @include vendors-param(webkit moz ms o, background-image, linear-gradient(left top, #F00, #FF0 50%, #0F0));
21
+ // produce:
22
+ // background-image: -webkit-linear-gradient(left top, #F00, #FF0 50%, #0F0);
23
+ // background-image: -moz-linear-gradient(left top, #F00, #FF0 50%, #0F0);
24
+ // background-image: -ms-linear-gradient(left top, #F00, #FF0 50%, #0F0);
25
+ // background-image: -o-linear-gradient(left top, #F00, #FF0 50%, #0F0);
26
+ // background-image: linear-gradient(left top, #F00, #FF0 50%, #0F0);
27
+ @mixin vendors-param($vendors, $property, $params, $origin: true) {
28
+ @each $vendor in $vendors {
29
+ #{$property}: -#{$vendor}-#{$params};
30
+ }
31
+ @if $origin {
32
+ #{$property}: $params;
33
+ }
34
+ }
35
+
36
+ // TODO docs
37
+ @mixin vendors-full($vendors, $property, $params, $origin: true) {
38
+ @each $vendor in $vendors {
39
+ -#{$vendor}-#{$property}: -#{$vendor}-#{$params};
40
+ }
41
+ @if $origin {
42
+ #{$property}: $params;
43
+ }
44
+ }
@@ -0,0 +1,357 @@
1
+ // Use compatibility tables from http://caniuse.com/
2
+ // http://css3pie.com/documentation/supported-css3-features/#pie-lazy-init
3
+
4
+ $support-ie: true !default;
5
+ $pie-url: asset-url("polyfills/PIE.htc", '') !default;
6
+ $boxsizing-url: asset-url("polyfills/boxsizing.htc", '') !default;
7
+
8
+
9
+ @mixin pie($poll: none, $watch-ancestors: 0) {
10
+ @if $support-ie and $pie-url {
11
+ behavior: $pie-url;
12
+ // http://css3pie.com/documentation/supported-css3-features/#pie-poll
13
+ @if $poll != none {
14
+ -pie-poll: $poll;
15
+ }
16
+ // http://css3pie.com/documentation/supported-css3-features/#pie-watch-ancestors
17
+ @if $watch-ancestors > 0 {
18
+ -pie-watch-ancestors: $watch-ancestors;
19
+ }
20
+ }
21
+ }
22
+
23
+ @import "ultimate/mixins/vendors";
24
+ @import "ultimate/mixins/routines";
25
+
26
+ // Round all corners by a specific amount.
27
+ // example:
28
+ // @include border-radius(5px 5px 0 0);
29
+ // produce:
30
+ // -webkit-border-radius: 5px 5px 0 0; // iOS-Safari <= 3.2, Android <= 2.1
31
+ // border-radius: 5px 5px 0 0;
32
+ @mixin border-radius($params) {
33
+ @include vendors(webkit, border-radius, $params);
34
+ }
35
+
36
+ // Round mentioned corners by a specific amounts without muted corners by none or false.
37
+ // example:
38
+ // @include border-radius__complex(5px 7px none);
39
+ // produce:
40
+ // -webkit-border-top-left-radius: 5px; // iOS-Safari <= 3.2, Android <= 2.1
41
+ // border-top-left-radius: 5px;
42
+ // -webkit-border-top-right-radius: 7px;
43
+ // border-top-right-radius: 7px;
44
+ // -webkit-border-bottom-left-radius: 7px;
45
+ // border-bottom-left-radius: 7px;
46
+ @mixin border-radius_complex($params) {
47
+ @if isset($params) {
48
+ $l: length($params);
49
+ @if $l == 1 or complex-isset($params) {
50
+ @include border-radius($params);
51
+ } @else {
52
+ @if $l < 4 {
53
+ $params: complex-list($params);
54
+ }
55
+ $i: 0;
56
+ @each $corner in top-left, top-right, bottom-right, bottom-left {
57
+ $i: $i + 1;
58
+ $p: nth($params, $i);
59
+ @if isset($p) {
60
+ @include vendors(webkit, border-#{$corner}-radius, $p);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+
67
+ // Provide CSS3 box-shadow property.
68
+ // example:
69
+ // @include box-shadow(#00F -10px 0 10px, #F00 10px 0 10px);
70
+ // produce:
71
+ // -webkit-box-shadow: #00F -10px 0 10px, #F00 10px 0 10px; // Safari 5.0, iOS-Safari <= 4.3, Android <= 4.0 missing "inset" and blur radius value support for iOS-Safari <= 3.2, Android <= 3.0
72
+ // box-shadow: #00F -10px 0 10px, #F00 10px 0 10px;
73
+ @mixin box-shadow($shadow0, $shadow1: false, $shadow2: false, $shadow3: false, $shadow4: false, $shadow5: false, $shadow6: false, $shadow7: false, $shadow8: false, $shadow9: false) {
74
+ $shadows: compact-list($shadow0 $shadow1 $shadow2 $shadow3 $shadow4 $shadow5 $shadow6 $shadow7 $shadow8 $shadow9);
75
+ @if length($shadows) == 0 {
76
+ $shadows: none;
77
+ }
78
+ @include vendors(webkit, box-shadow, $shadows);
79
+ }
80
+
81
+ // Change the box model of element.
82
+ // example:
83
+ // @include box-sizing;
84
+ // produce:
85
+ // -webkit-box-sizing: border-box; // Safari <= 5.0, iOS-Safari <= 4.3, Android <= 3.0
86
+ // -moz-box-sizing: border-box; // actual
87
+ // box-sizing: border-box; //
88
+ // *behavior: url("/assets/polyfills/boxsizing.htc"); // IE 6-7
89
+ @mixin box-sizing($params: border-box) {
90
+ @include vendors(webkit moz, box-sizing, $params);
91
+ @if $support-ie and $boxsizing-url {
92
+ // https://github.com/Schepp/box-sizing-polyfill
93
+ *behavior: $boxsizing-url; // IE 6-7
94
+ }
95
+ }
96
+
97
+ // Provide CSS3 linear-gradient as background image.
98
+ // params:
99
+ // $corner:
100
+ // Represents the position of the starting-point of the gradient line.
101
+ // It consists of two keywords: the first one indicates the horizontal side, `left` or `right`,
102
+ // and the second one the vertical side, `top` or `bottom`.
103
+ // The order is not relevant and each of the keyword is optional.
104
+ // The values `to top`, `to bottom`, `to left` and `to right`
105
+ // are translated into the angles `0deg`, `180deg`, `270deg`, `90deg` respectively.
106
+ // The others are translated into an angle that let the starting-point to be in the same quadrant
107
+ // than the described corner and so that the line defined by the starting-point and the corner
108
+ // is perpendicular to the gradient line. That way, the color described by the <color-stop>
109
+ // will exactly apply to the corner point. This is sometimes called the "magic corner" property.
110
+ // The end-point of the gradient line is the symmetrical point of the starting-point
111
+ // on the other direction of the center box.
112
+ // _angle:
113
+ // An angle of direction for the gradient. See <angle> (https://developer.mozilla.org/en/CSS/angle).
114
+ // $stops:
115
+ // This value is comprised of a <color> value, followed by an optional stop position
116
+ // (either a percentage between 0% and 100% or a <length> along the gradient axis).
117
+ // Rendering of color-stops in CSS gradients follows the same rules as color-stops in SVG gradients.
118
+ // example:
119
+ // @include linear-gradient(right, (green, orange 20%, red 100%));
120
+ // produce:
121
+ // background-color: $bg-color;
122
+ // background-image: -webkit-gradient(linear, right top, left top, color-stop(0%, green), color-stop(20%, orange), color-stop(100%, red)); // old webkit (Safari <= 5.0, iOS-Safari <= 4.3, Android <= 3.0)
123
+ // background-image: -webkit-linear-gradient(right, green, orange 20%, red 100%); // Chrome 10+, Safari 5.1+, Android 4.0+
124
+ // background-image: -moz-linear-gradient(right, green, orange 20%, red 100%); // FF 3.6+
125
+ // background-image: -ms-linear-gradient(right, green, orange 20%, red 100%); // IE 10+
126
+ // background-image: -o-linear-gradient(right, green, orange 20%, red 100%); // Opera 11.1+
127
+ // background-image: linear-gradient(right, green, orange 20%, red 100%); // future
128
+ // -pie-background: $bg-c linear-gradient(right, green, orange 20%, red 100%); // IE 6-9
129
+ @mixin linear-gradient($corner_angle, $stops) {
130
+ $wk_start: left top;
131
+ $wk_end: left bottom;
132
+ $start: nth($corner_angle, 1);
133
+ @if $start == top {
134
+ $wk_start: left top;
135
+ $wk_end: left bottom;
136
+ } @else if $start == bottom {
137
+ $wk_start: left bottom;
138
+ $wk_end: left top;
139
+ } @else if $start == left {
140
+ $wk_start: left top;
141
+ $wk_end: right top;
142
+ } @else if $start == right {
143
+ $wk_start: right top;
144
+ $wk_end: left top;
145
+ }
146
+ $wk_stops: ();
147
+ $stops_length: length($stops);
148
+ $percents-by-stop: 100 / ($stops_length - 1);
149
+ $i: 0;
150
+ $p: 0;
151
+ @each $stop in $stops {
152
+ $i: $i + 1;
153
+ $cp: "#{$p}%";
154
+ @if length($stop) > 1 {
155
+ $cp: nth($stop, 2);
156
+ }
157
+ $stop: "#{$cp}, #{nth($stop, 1)}";
158
+ $wk_stops: append($wk_stops, color-stop(#{$stop}), comma);
159
+ $p: $p + $percents-by-stop;
160
+ }
161
+ $bg-color: nth(nth($stops, 1), 1);
162
+ // TODO: need check all color stops
163
+ @if alpha($bg-color) == 1 {
164
+ background-color: $bg-color;
165
+ }
166
+ background-image: -webkit-gradient(linear, $wk_start, $wk_end, $wk_stops);
167
+ $linear-gradient: linear-gradient($corner_angle, change-separator($stops));
168
+ @include vendors-param(webkit moz ms o, background-image, $linear-gradient);
169
+ @if $support-ie and $pie-url {
170
+ @if alpha($bg-color) == 1 {
171
+ -pie-background: $bg-color $linear-gradient;
172
+ } else {
173
+ -pie-background: $linear-gradient;
174
+ }
175
+ }
176
+ }
177
+
178
+ // Provide CSS3 radial-gradient as background image.
179
+ // params:
180
+ // $position:
181
+ // A position, interpreted in the same way as background-position or transform-origin. If omitted, the default is center.
182
+ // _angle:
183
+ // An angle establishing the gradient line, which extends from the starting point at this angle; this is 0deg by default.
184
+ // $shape:
185
+ // circle Meaning that the gradient's shape is a circle with constant radius.
186
+ // ellipse Meaning that the shape is an axis-aligned ellipse.
187
+ // _size:
188
+ // closest-side The gradient's shape meets the side of the box closest to its center (for circles) or meets both the vertical and horizontal sides closest to the center (for ellipses).
189
+ // closest-corner The gradient's shape is sized so it exactly meets the closest corner of the box from its center.
190
+ // farthest-side Similar to closest-side, except the shape is sized to meet the side of the box farthest from its center (or vertical and horizontal sides).
191
+ // farthest-corner The gradient's shape is sized so it exactly meets the farthest corner of the box from its center.
192
+ // contain A synonym for closest-side.
193
+ // cover A synonym for farthest-corner.
194
+ // example:
195
+ // @include radial-gradient(center 45deg, circle closest-side, (orange 0%, red 100%));
196
+ // produce:
197
+ // background-image: -webkit-radial-gradient(center 45deg, circle closest-side, orange 0%, red 100%); // Chrome 10+, Safari 5.1+, Android 4.0+
198
+ // background-image: -moz-radial-gradient(center 45deg, circle closest-side, orange 0%, red 100%); // FF 3.6+
199
+ // background-image: -ms-radial-gradient(center 45deg, circle closest-side, orange 0%, red 100%); // IE 10+
200
+ // background-image: -o-radial-gradient(center 45deg, circle closest-side, orange 0%, red 100%); // Opera 11.6+
201
+ // background-image: radial-gradient(center 45deg, circle closest-side, orange 0%, red 100%); // future
202
+ @mixin radial-gradient($position_angle, $shape_size, $stops) {
203
+ @include vendors-param(webkit moz ms o, background-image, radial-gradient($position_angle, $shape_size, change-separator($stops)));
204
+ }
205
+
206
+ @mixin border-gradient_simple($color_start, $color_stop, $is_horizontal: false) {
207
+ $color_mix: mix($color_start, $color_stop);
208
+ @if $is_horizontal {
209
+ border-color: $color_mix $color_stop $color_mix $color_start;
210
+ } @else {
211
+ border-color: $color_start $color_mix $color_stop;
212
+ }
213
+ }
214
+
215
+ // EXPERIMENTAL
216
+ // Temporary remove webkit support, because find bug in Chromium 20
217
+ @mixin border-gradient($color_start, $color_stop, $is_horizontal: false) {
218
+ @include border-gradient_simple($color_start, $color_stop, $is_horizontal);
219
+ $start: top;
220
+ //$wk_start: left top;
221
+ //$wk_stop: left bottom;
222
+ @if $is_horizontal {
223
+ $start: left;
224
+ //$wk_stop: right top;
225
+ }
226
+ // -webkit-border-image: -webkit-gradient(linear, $wk_start, $wk_stop, from($color_start), to($color_stop)); // old webkit (Safari <= 5.0, iOS-Safari <= 4.3, Android <= 3.0)
227
+ @include vendors-full(moz ms o, border-image, linear-gradient($start, $color_start, $color_stop));
228
+ //-webkit-border-image: -webkit-linear-gradient($start, $color_start, $color_stop); // Chrome 10+, Safari 5.1+, Android 4.0+
229
+ // -moz-border-image: -moz-linear-gradient($start, $color_start, $color_stop); // FF 3.5+
230
+ // -ms-border-image: -ms-linear-gradient($start, $color_start, $color_stop); // IE 10+
231
+ // -o-border-image: -o-linear-gradient($start, $color_start, $color_stop); // Opera 11.0+
232
+ // border-image: linear-gradient($start, $color_start, $color_stop); // future
233
+ }
234
+
235
+ // Provide cross-browser CSS opacity.
236
+ // example:
237
+ // @include opacity(0.3);
238
+ // produce:
239
+ // opacity: 0.3;
240
+ // filter: progid:DXImageTransform.Microsoft.Alpha(opacity=30); // IE <= 8.0
241
+ @mixin opacity($value: 0.5) {
242
+ opacity: $value;
243
+ @if $support-ie {
244
+ $value: round($value * 100);
245
+ @if $value < 100 {
246
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=#{$value});
247
+ } @else {
248
+ filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false);
249
+ }
250
+ }
251
+ }
252
+
253
+ // For rgba()
254
+ @mixin pie-bg($bg) {
255
+ background: $bg;
256
+ @if $support-ie and $pie-url and type-of($bg) == color and alpha($bg) < 1 {
257
+ -pie-background: $bg;
258
+ }
259
+ }
260
+
261
+ // example:
262
+ // @include ellipsis;
263
+ // produce:
264
+ // overflow: hidden; // need to work text-overflow
265
+ // white-space: nowrap; // need to work text-overflow
266
+ // -o-text-overflow: ellipsis; // Opera Mini and Opera Mobile
267
+ // text-overflow: ellipsis; // all
268
+ @mixin ellipsis($overflow: hidden, $nowrap: true) {
269
+ @if isset($overflow) {
270
+ overflow: $overflow;
271
+ }
272
+ @if $nowrap {
273
+ white-space: nowrap;
274
+ }
275
+ @include vendors(o, text-overflow, ellipsis);
276
+ }
277
+
278
+ // $param: none || text || all || element
279
+ // example:
280
+ // @include user-select;
281
+ // produce:
282
+ // -webkit-user-select: none;
283
+ // -moz-user-select: none;
284
+ // -ms-user-select: none; // IE 10+
285
+ // -o-user-select: none;
286
+ // user-select: none;
287
+ @mixin user-select($param: none) {
288
+ @include vendors(webkit moz ms o, user-select, $param);
289
+ }
290
+
291
+ // Provide vendorized CSS transition.
292
+ // example:
293
+ // @include transition(all, 0.5s);
294
+ // produce:
295
+ // -webkit-transition: all 0.5s ease; // actual
296
+ // -moz-transition: all 0.5s ease; // FF 8+
297
+ // -ms-transition: all 0.5s ease; // IE 10+
298
+ // -o-transition: all 0.5s ease; // Opera 11.6+
299
+ // without:
300
+ // transition: all 0.5s ease; // future
301
+ @mixin transition($what, $time, $method: ease) {
302
+ @include vendors(webkit moz ms o, transition, $what $time $method, false);
303
+ }
304
+
305
+ // Provide vendorized CSS transform.
306
+ // example:
307
+ // @include transform(scale(1.2, 1.2));
308
+ // produce:
309
+ // -webkit-transform: scale(1.2, 1.2); // actual
310
+ // -moz-transform: scale(1.2, 1.2); // actual
311
+ // -ms-transform: scale(1.2, 1.2); // IE 9+
312
+ // -o-transform: scale(1.2, 1.2); // actual
313
+ // without:
314
+ // transform: scale(1.2, 1.2); // future
315
+ @mixin transform($params) {
316
+ @include vendors(webkit moz ms o, transform, $params, false);
317
+ }
318
+
319
+ // Scale an object along the x and y axis. IE < 9 only proportional scale by $scale-x.
320
+ // example:
321
+ // @include scale(1.2);
322
+ // produce:
323
+ // -webkit-transform: scale(1.2, 1.2); // actual
324
+ // -moz-transform: scale(1.2, 1.2); // actual
325
+ // -ms-transform: scale(1.2, 1.2); // IE 9+
326
+ // -o-transform: scale(1.2, 1.2); // actual
327
+ // *zoom: 1.2; // IE 5.5-7
328
+ // zoom: 1.2\0/; // IE 8
329
+ // without:
330
+ // transform: scale(1.2, 1.2); // future
331
+ @mixin scale($scale-x, $scale-y: $scale-x) {
332
+ @include transform(scale($scale-x, $scale-y));
333
+ @if $support-ie {
334
+ *zoom: $scale-x;
335
+ //zoom: hack-ie8($scale-x); TODO temp!
336
+ }
337
+ }
338
+
339
+ @mixin rotate($angle) {
340
+ @include transform(rotate($angle));
341
+ //filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); === -90deg
342
+ }
343
+
344
+ // Style the html5 input placeholder in browsers that support it.
345
+ // The styles for the input placeholder are passed as mixin content.
346
+ // Mostly supported properties: color, font-*, letter-spacing.
347
+ // example:
348
+ // @include input-placeholder {
349
+ // color: #bfbfbf;
350
+ // font-style: italic;
351
+ // }
352
+ @mixin input-placeholder {
353
+ &::-webkit-input-placeholder { @content; }
354
+ &:-moz-placeholder { @content; }
355
+ &::-moz-placeholder { @content; }
356
+ &:-ms-input-placeholder { @content; }
357
+ }