module Sass::Script::Functions
def hsl(hue, saturation, lightness)
-
(ArgumentError)
- if `saturation` or `lightness` are out of bounds
Returns:
-
(Color)
- The resulting color
Parameters:
-
lightness
(Number
) -- The lightness of the color. -
saturation
(Number
) -- The saturation of the color. -
hue
(Number
) -- The hue of the color.
def hsl(hue, saturation, lightness) assert_type hue, :Number assert_type saturation, :Number assert_type lightness, :Number original_s = saturation original_l = lightness # This algorithm is from http://www.w3.org/TR/css3-color#hsl-color h, s, l = [hue, saturation, lightness].map { |a| a.value } raise ArgumentError.new("Saturation #{s} must be between 0% and 100%") if s < 0 || s > 100 raise ArgumentError.new("Lightness #{l} must be between 0% and 100%") if l < 0 || l > 100 h = (h % 360) / 360.0 s /= 100.0 l /= 100.0 m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s m1 = l * 2 - m2 Color.new([hue_to_rgb(m1, m2, h + 1.0/3), hue_to_rgb(m1, m2, h), hue_to_rgb(m1, m2, h - 1.0/3)].map { |c| (c * 0xff).round }) end