// calculate the middle color for fallback
@mixin middle-color($c1, $c2)
background-color: rgb((red($c1) + red($c2)) / 2, (green($c1) + green($c2)) / 2, (blue($c1) + blue($c2)) / 2)
// generate linear-gradient
@mixin linear-gradient($angle, $c1, $c2, $fallback: "")
// background color fallback
@if ($fallback !== "")
background-color: $fallback
@else
@include middle-color($c1, $c2)
// webkit linear gradient fallback
@if $angle == to bottom
background-image: -webkit-linear-gradient(top, $c1, $c2)
@else if $angle == to right
background-image: -webkit-linear-gradient(left, $c1, $c2)
background-image: linear-gradient($angle, $c1, $c2)
Don’t use mix($c, $c2) to get the middle color!
It will only retrun ($c1 + $c2) / 2, not the middle color.
Sadly, I failed to put color stop percentage in the mixin.
Only if sass rgb() could return a color(e.g. #fff) from a string(e.g. “#fff 10%”).