blob: a38dca704ce0ed9674c11b9cb48add2932751368 [file] [log] [blame]
/**
* 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);
}