/** * Outputs cross-browser Valo-specific linear gradient background-image declarations. * * @group style * * @param {color} $color ($v-background-color) - The base color for the gradient color stops * @param {list} $gradient ($v-gradient) - Valo-specific gradient value. See the documentation for $v-gradient. * @param {color} $fallback (null) - A fallback color for browser which do not support linear gradients (IE8 and IE9 in particular). If null, the base $color is used instead. * @param {string} $direction (to bottom) - the direction of the linear gradient. The color stops are by default so that a lighter shade is at the start and a darker shade is at the end. */ @mixin valo-gradient($color: $v-background-color, $gradient: $v-gradient, $fallback: null, $direction: to bottom) { @if $color { @if $gradient { $color-stops: valo-gradient-color-stops($color, $gradient); @include linear-gradient($direction, $color-stops, $fallback: $fallback or $color); } @else { background: $fallback or $color; } } } /** * Returns a valid CSS, Valo-specific, color stop list to be used in a linear gradient. * * @group style * * @param {color} $color - the base color for the color stops * @param {list} $gradient ($v-gradient) - Valo-specific gradient value. See the documentation for $v-gradient. */ @function valo-gradient-color-stops($color, $gradient: $v-gradient) { $style: valo-gradient-style($gradient); $opacity: valo-gradient-opacity($gradient); @if $style != none and $opacity > 0 { @if $style == v-linear or $style == v-linear-reverse { $start: blend-overlay(rgba(#fff, $opacity/100%), $color); $end: blend-overlay(rgba(#000, max(0, $opacity/100%)), $color); $end: blend-multiply(rgba(#000, max(0, $opacity/200%)), $end); @if $style == v-linear { @return $start 2%, $end 98%; } @else { @return $end 2%, $start 98%; } } } @return $color 0%, $color 100%; } /** * Returns the style part of a Valo-specific gradient value. * * @param {list} $gradient ($v-gradient) - Valo-specific gradient value. See the documentation for $v-gradient. * * @return {string} One of the possible style values for $v-gradient */ @function valo-gradient-style($gradient: $v-gradient) { @if type-of($gradient) != list { @return none; } @return first-string($gradient); } /** * Returns the opacity part of a Valo-specific gradient value. * * @param {list} $gradient ($v-gradient) - Valo-specific gradient value. See the documentation for $v-gradient. * * @return {number} A percentage value from 0% to 100% */ @function valo-gradient-opacity($gradient: $v-gradient) { @if type-of($gradient) != list { @return 0%; } @return first-number($gradient); }