内容简介:闲言碎语少扯,就让我们进入主题吧。Sass 内置了很多的方法,今天我们主要讲一下颜色函数 (Color Functions) 里的讲真的,以前项目开发中,我也只用过前两个方法~~在讲这几个方法之前,我们先来了解一下颜色的几个表示方法。
闲言碎语少扯,就让我们进入主题吧。Sass 内置了很多的方法,今天我们主要讲一下颜色函数 (Color Functions) 里的 darken() 、 lighten() 、 mix() 、 lightness() 这 4 个方法。
讲真的,以前项目开发中,我也只用过前两个方法~~
在讲这几个方法之前,我们先来了解一下颜色的几个表示方法。
颜色表示
颜色的表示有很多种,本次我们只讲以下 3 种
- HEX 表示法(十六进制)
- RGB 表示法
- HSL 表示法
在 Chrome 浏览器的开发者 工具 里,我们可以在这 3 种方式中相互切换,如下图:
在开发中,我们经常使用 HEX 、RGB 法,但是很少使用 HSL 法,今天要讲的 Sass 颜色函数跟 HSL 有关,我们来简单了解一下 HSL 。
HSL 是色相(Hue)、饱和度(Saturation)和亮度(Lightness)这三个颜色属性的简称。
- 色相(Hue)是色彩的基本属性,就是人们平常所说的颜色名称,如紫色、青色、品红等等。
- 饱和度(Saturation)是指色彩的纯度,饱和度越高色彩越纯越浓,饱和度越低则色彩变灰变淡。
- 亮度(Lightness)指的是色彩的明暗程度,亮度值越高,色彩越白,亮度越低,色彩越黑。
下面要讲的函数跟亮度(Lightness)有很大的关系,大家提前知晓。关于 HSL 更详细的内容大家可以移步此处。
Sass 颜色函数
darken($color, $amount)
将颜色 $color 加深
$mount 是介于 0% 到 100% (含) 之间的值。按照这个值减少 $color HSL 的亮度。
// #036 的亮度为 20%, 当 darken() 减去 30% 会返回黑色 darken(#036, 30%); // black 复制代码
lighten($color, $amount)
将颜色 $color 变亮
$mount 是介于 0% 到 100% (含) 之间的值。按照这个值增加 $color HSL 的亮度。
// #e1d7d2 的亮度为 85%, 当 lighten() 增加 30% 会返回白色 lighten(#e1d7d2, 30%); // white 复制代码
mix($color1, $color2, $weight: 50%)
将颜色 $color1 与 $color2 混合在一起生成新的颜色
$weight 与透明度决定了每个颜色在结果里占的比重。 $weight 默认值为 50% 。取值范围是介于 0% 到 100% (含) 之间的值。如果指定的比例是 25% ,这意味着第一个颜色所占比例为 25% ,第二个颜色所占比例为 75% 。
mix(#036, #d2e1dd); // #698aa2 mix(#036, #d2e1dd, 75%); // #355f84 mix(#036, #d2e1dd, 25%); // #9eb6bf mix(rgba(242, 236, 228, 0.5), #6b717f); // rgba(141, 144, 152, 0.75) 复制代码
开发中应用
以前在开发中做一些颜色交互的时候,不同状态的颜色值都需要由 UI 提供,但是有了上面的函数,我们可以跟 UI 达成一致,自动生成对应的色值。
下面提供一张图片展示 mix() 、 darken() 、 lighten() 生成颜色的效果。
lightness($color)
返回给定颜色 $color HSL 里的亮度值,返回值介于 0% 到 100% 。
lightness(#e1d7d2); // 85.2941176471% lightness(#f2ece4); // 92.1568627451% lightness(#dadbdf); // 86.4705882353% 复制代码
开发中应用
我们可以通过这个方法来实现字体颜色根据背景色自动调整。
// sass
@function set-notification-text-color($color) {
@if (lightness($color) > 50) {
// 浅色背景返回深色字体
@return #333;
} @else {
// 深色背景返回浅色字体
@return #fff;
}
}
复制代码
颜色转换方法
分享几个颜色转换的方法。
rgbToHex (rgbStr) {
const color = rgbStr.toString().match(/\d+/g);
let hex = "#";
for (let i = 0; i < 3; i++) {
// 'Number.toString(16)' 是JS默认能实现转换成16进制数的方法.
// 如果结果是一位数,就在前面补零。例如: A变成0A
hex += ("0" + Number(color[i]).toString(16)).slice(-2);
}
return hex;
}
复制代码
hexToRgb (hex) {
let rgb = [];
//去除前缀 # 号
hex = hex.substr(1);
// 处理 "#abc" 成 "#aabbcc"
if (hex.length === 3) {
hex = hex.replace(/(.)/g, '$1$1');
}
hex.replace(/../g, function(color){
//按16进制将字符串转换为数字
rgb.push(parseInt(color, 0x10));
});
return "rgb(" + rgb.join(",") + ")";
}
复制代码
rgbToHsl (rgbStr) {
var color = rgbStr.toString().match(/\d+/g);
var r = color[0]/255;
var g = color[1]/255;
var b = color[2]/255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if (max == min){
h = s = 0; // achromatic
} else {
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch(max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
return [h, s, l];
}
复制代码
以上所述就是小编给大家介绍的《Sass 内置颜色方法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 颜色搭配及颜色科学
- CSS教程:图片使用混合模式和颜色叠加filter滤镜,改变PNG图标颜色
- OpenGL ES入门: 渲染金字塔 - 颜色、纹理、纹理与颜色混合填充以及GLKit实现
- WebGL 纹理颜色原理
- 【Leetcode】75.颜色分类
- 像滤镜一样改变字体颜色
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML and CSS
Elisabeth Robson、Eric Freeman / O'Reilly Media / 2012-9-8 / USD 39.99
Tired of reading HTML books that only make sense after you're an expert? Then it's about time you picked up Head First HTML and really learned HTML. You want to learn HTML so you can finally create th......一起来看看 《Head First HTML and CSS》 这本书的介绍吧!