Created
January 22, 2016 15:47
-
-
Save jobsturm/0c151892be06f35ba5ec to your computer and use it in GitHub Desktop.
SCSS gradient.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /// Convert angle | |
| /// @param {Number} $value - Value to convert | |
| /// @param {String} $unit - Unit to convert to | |
| /// @return {Number} Converted angle | |
| @function convert-angle($value, $unit) { | |
| $convertable-units: deg grad turn rad; | |
| $conversion-factors: 1 (10grad/9deg) (1turn/360deg) (3.1415926rad/180deg); | |
| @if index($convertable-units, unit($value)) and index($convertable-units, $unit) { | |
| @return $value | |
| / nth($conversion-factors, index($convertable-units, unit($value))) | |
| * nth($conversion-factors, index($convertable-units, $unit)); | |
| } | |
| @warn "Cannot convert `#{unit($value)}` to `#{$unit}`."; | |
| } | |
| /// Test if `$value` is an angle | |
| /// @param {*} $value - Value to test | |
| /// @return {Bool} | |
| @function is-direction($value) { | |
| $is-direction: index((to top, to top right, to right top, to right, to bottom right, to right bottom, to bottom, to bottom left, to left bottom, to left, to left top, to top left), $value); | |
| $is-angle: type-of($value) == 'number' and index('deg' 'grad' 'turn' 'rad', unit($value)); | |
| @return $is-direction or $is-angle; | |
| } | |
| // ---- | |
| // Sass (v3.4.7) | |
| // Compass (v1.0.1) | |
| // ---- | |
| /// Convert angle | |
| /// @param {Number} $value - Value to convert | |
| /// @param {String} $unit - Unit to convert to | |
| /// @return {Number} Converted angle | |
| @function convert-angle($value, $unit) { | |
| $convertable-units: deg grad turn rad; | |
| $conversion-factors: 1 (10grad/9deg) (1turn/360deg) (3.1415926rad/180deg); | |
| @if index($convertable-units, unit($value)) and index($convertable-units, $unit) { | |
| @return $value | |
| / nth($conversion-factors, index($convertable-units, unit($value))) | |
| * nth($conversion-factors, index($convertable-units, $unit)); | |
| } | |
| @warn "Cannot convert `#{unit($value)}` to `#{$unit}`."; | |
| } | |
| /// Test if `$value` is an angle | |
| /// @param {*} $value - Value to test | |
| /// @return {Bool} | |
| @function is-direction($value) { | |
| $is-direction: index((to top, to top right, to right top, to right, to bottom right, to right bottom, to bottom, to bottom left, to left bottom, to left, to left top, to top left), $value); | |
| $is-angle: type-of($value) == 'number' and index('deg' 'grad' 'turn' 'rad', unit($value)); | |
| @return $is-direction or $is-angle; | |
| } | |
| /// Convert a direction to legacy syntax | |
| /// @param {Keyword | Angle} $value - Value to convert | |
| /// @require {function} is-direction | |
| /// @require {function} convert-angle | |
| @function legacy-direction($value) { | |
| @if is-direction($value) == false { | |
| @warn "Cannot convert `#{$value}` to legacy syntax because it doesn't seem to be an angle or a direction"; | |
| } | |
| $conversion-map: ( | |
| ); | |
| @if map-has-key($conversion-map, $value) { | |
| @return map-get($conversion-map, $value); | |
| } | |
| @return 90deg - convert-angle($value, 'deg'); | |
| } | |
| /// Mixin printing a linear-gradient | |
| /// as well as a plain color fallback | |
| /// and the `-webkit-` prefixed declaration | |
| /// @access public | |
| /// @param {String | List | Angle} $direction - Linear gradient direction | |
| /// @param {Arglist} $color-stops - List of color-stops composing the gradient | |
| @mixin linear-gradient($direction, $color-stops...) { | |
| @if is-direction($direction) == false { | |
| $color-stops: ($direction, $color-stops); | |
| $direction: 180deg; | |
| } | |
| background: -webkit-linear-gradient(legacy-direction($direction), $color-stops); | |
| background-image: -webkit-linear-gradient($direction, $color-stops); /* Chrome 10+, Saf5.1+, iOS 5+ */ | |
| background-image: -moz-linear-gradient($direction, $color-stops); /* FF3.6 */ | |
| background-image: -ms-linear-gradient($direction, $color-stops); /* IE10 */ | |
| background-image: -o-linear-gradient($direction, $color-stops); /* Opera 11.10+ */ | |
| background-image: linear-gradient($direction, $color-stops); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment