我之前说过 HSL 是我们拥有的最佳颜色格式。我们大多数人都不像 David DeSandro,他可以读取十六进制颜色代码。HSL(a) 代表色相、饱和度、亮度和 alpha 通道(如果需要)。
hsl(120, 100%, 40%)
色相并不直观,但也不是很奇怪。您可以在色轮上从 0 到 360 度旋转。饱和度更直观,0% 时颜色全部被吸走,就像灰度一样,100% 时则是在该色相下的完全饱和颜色。亮度在 50% 时为“正常”,随着您分别向 100% 和 0% 移动,会添加白色或黑色。我确定这不是解释它的正确科学或技术方法,但这正是大脑的逻辑。
使用 HSL 仍然存在一些问题,Brian Kardell 在文章中深入解释了这些问题。我离颜色专家还差得很远,但我认为我理解了 Brian(和 Adam)在文章中所说的内容。**假设您有三种不同的颜色,它们在 HSL 中具有完全相同的亮度。但这并不意味着它们实际上都具有相同的亮度。**这有点奇怪,尤其是在您**将此颜色格式用作颜色系统的一部分**时。
好消息是,有一些颜色功能已在 CSS Level 4 模块中指定,可以帮助解决此问题:Lab 和 LCH。查看 Adam 的示例,其中 Lab 中的颜色值更准确地反映了我们感知到的实际亮度。
HSL 与 LAB:: 亮度💡
来自我们棘手颜色投票的相同颜色,但这次我显示了相同颜色的 LAB 版本。请注意,LAB 的亮度值与我们投票结果的接近程度!
🎨颜色空间并不都一样!https://#/AIEs0amdWY pic.twitter.com/xkEguq3KZG
— Adam Argyle (@argyleink) 2019年12月3日
Brian
有一些颜色空间,例如 Lab 和 LCH,它们处理整个光谱并具有感知均匀性等特性。因此,如果我们想要优秀的颜色函数用于真实的設計系統,每个人似乎都同意在 Lab/LCH 颜色空间中进行上述数学运算的支持是理想的启用功能。
在Chrome 的错误单中,Tab 认为这些实现起来几乎微不足道。
请注意,lab()/lch()/gray() 都可以被积极地转换为我们现有的颜色基础设施;它们没有引入任何根本性的新概念,它们只是指定颜色的更好方法,更贴近我们眼睛的实际功能,而不是与 rgb 像素的功能紧密相关。
转换为 rgb 的转换函数只是一些代码,但只是一些指数运算和一些矩阵乘法,并且在规范中得到了很好的记录。
我认为这应该是一个 GoodFirstBug 之类的东西。
首先,非常有趣的文章,谢谢!
“我之前说过 HSL 是我们拥有的最佳颜色格式。我们大多数人都不像 David DeSandro,他可以读取十六进制颜色代码。”
我想说,RGB 是最容易猜测颜色外观的格式(毕竟,我们习惯于从高中开始使用 3 种原色、互补色等),但 HSL 是理解两种颜色之间关系的最佳格式。
这使得这两种方法都非常有用。事实上,通常当我设计配色方案时,我开始尝试使用 RGB 颜色,并在稍后将它们转换为 HSL,当我组合基础颜色的色调时。
您可以通过 d3-color 使用 LAB 颜色空间!https://github.com/d3/d3-color#lab
HSLuv 可以做到这一点,它模拟了 CIELUV LCh 的 HSL 体验(将非均匀颜色实体转换为均匀颜色圆柱体)。查看它,例如,将任何颜色的亮度设置为 49.8,无论您选择什么颜色,这都应该导致 AA 4.5:1 的对比度:http://www.hsluv.org/
非常适合设计系统和命名,不再是 –color-300、400、500…而是 –color-AA-4_5、–color-AAA-7_0。
如果您构建了一个包含所有步骤的比例尺,这还可以让您即时计算对比度,因为您可以通过查看颜色名称来保持所需的对比度距离!
您好。在 CodePen 中拥有一个像 https://github.com/hsluv/hsluv-sass 这样的 Sass 插件和像这些 https://codepen.io/giana/project/full/ZWbGzD 这样的对比色 Sass 工具将非常棒!
谢谢!
仅记录 Lea 的文章
CSS 中的 LCH 颜色:什么、为什么以及如何?