ultimate-mixins 0.1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +3 -0
- data/LICENSE +19 -0
- data/README.md +26 -0
- data/Rakefile +1 -0
- data/app/assets/stylesheets/polyfills/PIE.htc +96 -0
- data/app/assets/stylesheets/polyfills/boxsizing.htc +501 -0
- data/app/assets/stylesheets/ultimate/mixins/_routines.scss +130 -0
- data/app/assets/stylesheets/ultimate/mixins/_text-shadow_hard.scss +40 -0
- data/app/assets/stylesheets/ultimate/mixins/_vendors.scss +44 -0
- data/app/assets/stylesheets/ultimate/mixins/css3.scss +357 -0
- data/app/assets/stylesheets/ultimate/mixins/fonts.scss +42 -0
- data/app/assets/stylesheets/ultimate/mixins/microstructures.scss +223 -0
- data/lib/ultimate/extensions/sass_script_functions.rb +26 -0
- data/lib/ultimate/mixins.rb +9 -0
- data/lib/ultimate/mixins/engine.rb +7 -0
- data/lib/ultimate/mixins/version.rb +5 -0
- data/ultimate-mixins.gemspec +21 -0
- metadata +65 -0
@@ -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
|
+
}
|