CSS颜色基础知识

348 阅读3分钟

首先扯一些题外话,大自然是神奇的,数学是美妙的。小时候觉得枯燥的数字很无聊,现在才发现世界万物都可以用数字表示(专业名词:量化),正是自然界万物都是有规律可循,所以才有了互联网的出现,出现了图片、视频等。你可以想象你从电脑上看到的一切都是0/1组成的代码吗?当我对这个事情有了意识后,发现对自己所做的一切都有一种恍然大悟的感觉。

曾经接过一个需求:根据占用率显示不同颜色,具体为0-40%显示绿色,40%-80%显示绿色到黄色的均匀渐变,80%-100%显示黄色到红色的均匀渐变。感兴趣的朋友可以思考一下这个小问题如何实现。不了解颜色表示原理,可能没啥思路。看完本文你会有思路的。

基础知识

任何颜色都是由三种最基本的颜色叠加形成的,这三种颜色称为“三基色”。
人的眼睛看到的颜色有两种:

  1. 叠加型原色: 光体发出的颜色,比如:计算机显示器屏幕显示的颜色。 又称加色模式(RGB模式),三基色:红、绿、蓝。使用这三种原色可以产生其他颜色,若将此三原色的强度均调至最大并且等量重叠时,则会呈现白色。
  2. 消减型原色: 物体本身不发光,而是反射的光产生,比如:印刷技术。 又称减色模式(CMYK模式),三基色:青、洋红、黄,还包括黑色。

本文只介绍RGB模式,其他的可以了解百度百科:baike.baidu.com/item/十六进制颜色…

关于存储单元

对于一个16进制码为:#000000的颜色,二进制表示为:[0000 0000][0000 0000]...,共48位,6个字节(每个字节(Byte)占用4个字符,8个bit)。所有的图片都是由若干像素组成,每个像素点都是一个颜色的表示,最初的图片每个像素都有RGB通道,占用6byte,一个一寸照(大概300*400像素)大概300*400*6byte=720kb,OMG,太大了有木有,所以在很早之前就出现了图片压缩的技术,有无损压缩、有损压缩,有的压缩技术原理是n*0这种形式存储(即连续的0/1),可以大大减少存储空间,图片压缩技术有一个很有名的算法:赫夫曼算法,感兴趣的可以了解一下他的原理,后续有机会写一篇赫夫曼的文章,链接过去。

表示方法

  1. RGB#000000rgb(0,0,0)

#000000表示R/G/B三种颜色的发光强度,R代表红色,G代表绿色,B代表蓝色。
#000000都不发光即为黑色。#FFFFFF都发光时为白色。#FFFF00RG发光B不发光为黄色。以此类推...

  1. HSLhsl( 240,100%,50%)
  • Hue:色相,决定色系。
    范围0-360,0代表红色R,120代表绿色G,240代表B,期间是均匀渐变。
  • Saturation:饱和度,决定灰度。
    范围0-100%,数值越大,饱和度越高,越小看起来越偏灰,如下图。
  • Lightness:亮度/明度,决定白度(亮度)。
    范围0-100%,数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。

看到这你应该知道最开始的问题怎么解决了吧?

  1. HSV

Hue、 Saturation、 Value,与HSL类似。

  1. HEX
    待补充...

颜色转换

RGB→HSL的算法描述:baike.baidu.com/item/HSL/14…

颜色开发工具

颜色使用指南:htmlcolorcodes.com/zh/jiaochen…

配色方案:htmlcolorcodes.com/zh/yanse-xu…

js插件

jscolor、jscolorpicker插件