颜色

最后更新于:2022-04-01 10:46:50

颜色在 CSS 中占有重要地位。当涉及到操纵色彩时,Sass 通过提供少数的[函数功能](http://sass-lang.com/documentation/Sass/Script/Functions.html),最终成为了极具价值的助手。 ## 颜色格式 为了尽可能简单地使用颜色,我建议颜色格式要按照以下顺序排列: 1. [CSS 颜色关键字](http://www.w3.org/TR/css3-color/#svg-color); 2. [HSL 值](http://en.wikipedia.org/wiki/HSL_and_HSV); 3. [RGB 值](http://en.wikipedia.org/wiki/RGB_color_model); 4. 十六进制。小写并尽可能简写。 对于初学者来说,颜色关键字往往比较通俗易懂。HSL 表 示方式不仅仅是人类大脑最易于接受的,它也可以让样式表作者轻松地调整色调、饱和度和亮度来修改颜色。如果一个颜色偏蓝、偏绿或者偏红,那么使用`RGB` 更容易表示出来,但是却不容易表示三者的混合色。最后,十六进制是人类大脑理解的极限了。 ~~~ // Yep .foo { color: red; } // Nope .foo { color: #FF0000; } ~~~ 使用 HSL 值或者 RGB 值,通常在逗号 (`,`)后面追加一个空格,而不在前后括号 (`(`, `)`) 和值之间添加空格。 ~~~ // Yep .foo { color: rgba(0, 0, 0, 0.1); background: hsl(300, 100%, 100%); } // Nope .foo { color: rgba(0,0,0,0.1); background: hsl( 300, 100%, 100% ); } ~~~ ## 颜色和变量 当一个颜色被多次调用时,最好用一个有意义的变量名来保存它。 ~~~ $sass-pink: #c69; ~~~ 现在,你就可以在任何需要的地方随意使用这个变量了。不过,如果你是在一个主题中使用,我不建议固定的使用这个变量。相反,可以使用另一个标识方式的变量来保存它。 ~~~ $main-theme-color: $sass-pink; ~~~ 这样做可以防止一个主题变化而出现此类结果 `$sass-pink: blue`。 ## 变亮和变暗颜色 [`lighten`](http://sass-lang.com/documentation/Sass/Script/Functions.html#lighten-instance_method) 和 [`darken`](http://sass-lang.com/documentation/Sass/Script/Functions.html#darken-instance_method) 函数都是通过增加或者减小HSL中颜色的亮度来实现调节的。基本上,它们就是 [`adjust-color`](http://sass-lang.com/documentation/Sass/Script/Functions.html#adjust_color-instance_method) 函数添加了 `$lightness` 参数的别名。 问题是,这些函数经常并不能实现预期的结果。另一方面,通过混合`白色` 或 `黑色`实现变量或变暗的 [`mix`](http://sass-lang.com/documentation/Sass/Script/Functions.html#mix-instance_method) 函数,是一个不错的方法。 和上述两个函数相比,使用 `mix` 的好处是,当你降低颜色的比例时,它会渐进的接近黑色(或者白色),而 `darken` 和 `lighten` 立即变换颜色到黑色或白色。 有关 `lighten`/`darken` 和 `mix` 之间差异的示例来源于 [KatieK](http://codepen.io/KatieK2/pen/tejhz/) 如果你不想每次都写 `mix` 函数,你可以创建两个易用的 `tint` 和 `shade` ([Compass](http://compass-style.org/reference/compass/helpers/colors/#shade)的一部分)来处理相同的事: ~~~ /// Slightly lighten a color /// @access public /// @param {Color} $color - color to tint /// @param {Number} $percentage - percentage of `$color` in returned color /// @return {Color} @function tint($color, $percentage) { @return mix(white, $color, $percentage); } /// Slightly darken a color /// @access public /// @param {Color} $color - color to shade /// @param {Number} $percentage - percentage of `$color` in returned color /// @return {Color} @function shade($color, $percentage) { @return mix(black, $color, $percentage); } ~~~ [`scale-color`](http://sass-lang.com/documentation/Sass/Script/Functions.html#scale_color-instance_method) 函数的设计初衷是为了更流畅地调试属性——以实际的高低为调试基础。它如同`mix`一样好用,并且提供了更清晰地调用约定。比例因子并不完全相同。 ## 扩展阅读 * [A Visual Guide to Sass & Compass Color Functions](http://jackiebalzer.com/color) * [How to Programmatically Go From One Color to Another](http://thesassway.com/advanced/how-to-programtically-go-from-one-color-to-another-in-sass) * [Sass Color Variables That Don’t Suck](http://davidwalsh.name/sass-color-variables-dont-suck) * [Using Sass to Build Color Palettes](http://www.sitepoint.com/using-sass-build-color-palettes/) * [Dealing with Color Schemes in Sass](http://www.sitepoint.com/dealing-color-schemes-sass/)
';