巨大的、又长又粗的东西? 高强度低合金钢? 不,我们指的是色调、饱和度、亮度和 alpha,它是一种在 CSS 中声明颜色的方法。 它看起来像这样
#some-element {
background-color: hsla(170, 50%, 45%, 1);
}
它类似于 RGBa,您声明三个值来确定颜色,然后声明第四个值来表示其透明度级别。 您可以在下面阅读有关浏览器支持的更多信息,但基本上,任何支持 rgba()
的浏览器也支持 hsla()
。
HSL 和 RGB 颜色有新的语法! 现在,在任一函数中都不需要逗号或“a
”来设置 alpha 透明度。 相反,我们在 alpha 值前面使用正斜杠 (/
)。 例如 hsl(170 50% 45% / 1)
而不是 hsla(170, 50%, 45%, 1)
。 了解更多 有关更改和其他更新的 CSS 颜色功能。
- 色调 - 想想一个色轮。 大约 0o 和 360o 是红色,120o 是绿色,240o 是蓝色。 使用 0-360 之间的任何值。 超出此范围的值将为模 360。
- 饱和度 - 0% 是完全脱色的(灰度)。 100% 是完全饱和的(全色)。
- 亮度 - 0% 是完全黑暗的(黑色)。 100% 是完全明亮的(白色)。 50% 是平均亮度。
- alpha - 不透明度/透明度值。 0 是完全透明的。 1 是完全不透明的。 0.5 是 50% 透明。
让我们深入研究。
为什么它很酷?
HSLa 的真正吸引力在于它更直观地理解更改值对颜色的影响。 增加第二个值将增加该颜色的饱和度。 减少第三个值将降低该颜色的亮度。 这使得创建自己的即兴颜色变化变得更加容易。 我敢说,我们大多数人都无法使用 RGBa 模型创建如此美观且一致的颜色变化。
HSLa 模型还使以编程方式更改颜色值变得更加容易。 查看强调这一点的 演示工具。
为什么使用它较少?
这是我做的一个很大的假设,但据我所知,HSLa 在现实世界中的使用量远远少于 RGBa。 如果您有任何关于原因的想法,请在评论中分享。 我的理论是,就从屏幕或 Photoshop 文档中采样而言,HSL 值更难获得。

我猜 Photoshop 使用色调/饱和度/亮度模型。 说实话,我不太了解其中的区别,但当我第一次尝试时,我遇到了这种情况。
获取 HSLa 值
有一个名为 Colors 的 Mac 小应用程序,由 Matt Patenaude 开发。

您只需单击放大镜,然后单击屏幕上的任何位置。 它将在框中填充颜色。 然后,您可以选择 hsla 选项并将其复制到剪贴板。 有一些首选项可以调整格式,使其完全符合您的需要。 效果很好。 我唯一不满的是,如果关闭小浮动窗口,除非退出并重新启动应用程序,否则它不会重新打开。 可能是 Snow Leopard 的问题,而且应用程序很久没有更新了? 我不知道。
如果有人有用于捕获具有 HSLa 功能的颜色,并作为 Windows 或 Linux 工具的首选,请在评论中告诉我,我将在此更新。
浏览器支持
Firefox 3.0+、Safari 3+、Chrome 6+(可能更早的版本也支持?)、Opera 10+(可能更早的版本也支持?)。
像往常一样,IE 被排除在外。 甚至版本 8。 我感觉版本 9 将支持它,但还没有证据。 有人安装了它并且可以测试吗? 对于 IE,您只需声明一个备用颜色。 IE 8 也不支持 RGBa,因此使用十六进制代码是最好的选择。
#some-element {
background-color: #e2ecf0; /* Fallback */
background-color: hsla(190, 30%, 94%, 1);
background-color: hsl(190 30% 94% / 1);
}
我的工具
为了演示以编程方式创建颜色变化的简便性,我创建了 HSLa Explorer。 页面上有两个滑块。 顶部的滑块控制色调值,第二个滑块控制不透明度级别。 它获取这些值并构建一个包含 100 种颜色变化的网格,其中饱和度和亮度在矩阵中变化。
由于某种原因,IE 不喜欢 JavaScript 中的内容(在演示中),但无论如何,IE 都不喜欢 HSLa。 感谢 Matthieu Sieben 帮助改进演示。
更多工具
- Brandon Mathis 开发的 HSL 颜色选择器
- Matt Groeber 开发的 HSL 随机颜色生成器
这是一个查找不同颜色数组的 HSLa 的好工具。
感谢您提供 HSLa Explorer。
这个 似乎有效。 我取了一个十六进制值,将其粘贴到十六进制输入框中。
我在查看这个表格,这款工具做得很好。
我认为我会尝试用这种颜色代码做点什么…… 让我们看看……
谢谢。
“HSLa 在现实世界中的使用量远远少于 RGBa。 如果您有任何关于原因的想法,请在评论中分享。”
“像往常一样,IE 被排除在外。 甚至版本 8。”
如果您仍然必须声明备用颜色,那么在实时网站上使用 HSLa 真的有好处吗? 对于想出配色方案来说,它很棒,但如果您必须转换为 RGBa,那么您可能也可以在 CSS 中坚持使用 RGBa。
情况并非如此。
几乎所有支持 RGBa 的浏览器都支持 HSLa。 因此,如果您现在在设计中使用 RGBa,则可以使用 HSLa,并具有相同的浏览器支持。 是的,您必须为 IE 声明备用颜色(十六进制代码是最好的),但对于 RGBa,您也必须这样做。
太棒了,Chris! 我认为 HSLa 使用不足,因为了解它的人不多。 似乎 RGBa 的宣传更多。
不过,我很高兴您发布了这篇文章,因为 hsla 看起来真的很不错,应该得到更多关注。
HSL 的使用频率远低于 RGB,因为 HSL 是在 CSS3 中引入的,并且最近才得到浏览器支持。(hsla() 函数是为了反映 rgba() 而添加的)。
我还认为您应该在文章中添加 *为什么* HSL 比 RGB 更好的原因。 添加 HSL 的原因是
– RGB 面向硬件:它反映了 CRT 的使用。
– RGB 不直观。 人们可以学习如何使用 RGB,但实际上是通过将色调、饱和度和亮度,或类似的东西,内部化为 RGB。
(来源: HSL 颜色值)
我可以确认 HSLA 在 IE9 (最新版本 v1.9.7.7.66.6000) 中不受支持。
不过,文章很棒。
#some-element {
background-color: #e2ecf0; /* 备用 */
background-color: hsla(190, 30%, 94%, 1);
}
如果 UA 不理解 hsla 并跳过它,备用颜色不应该是第二位吗?我有点困惑。
这是正确的。
如果浏览器支持 hsla,它将覆盖之前的声明。如果它不支持,它将忽略它并使用十六进制代码。
哇,那个演示工具很棒,我玩个不停,太棒了!
我认为 HSL 颜色空间的流行度较低是由于转换为 RGB 和反向转换的方式以及存储方式。计算并不困难,但由于值存储时的低分辨率,在图像处理中使用时会导致问题。
计算机硬件和图形相关软件的核心组件无法理解它,因为 RGB(或 CMY(K))是我们显示器、打印机和相机使用的语言。因此,HSL 值在处理过程中的某个时刻总是需要转换为例如 RGB。现在,无论使用什么颜色空间,颜色值通常都表示为整数,分辨率为例如 256(RGB)、360(H)或仅 100(S、L)步。
以 HSL 颜色 346°、100%、20% 和 15°、100%、20% 为例,它们之间非常容易区分(深红和红橙)。现在,将这两个颜色的饱和度降至 5%,然后再次提高到 100% - 由于仍然是底层的 RGB 运算,这两个颜色现在完全相同。
造成这种情况的原因是,颜色越深或越浅,对应于 RGB 值变化 1 的色调变化就越大。(请原谅我的英语,希望你理解 :))
因此,HSL 在其常见形式中在图像处理中相当笨拙,只要图像本身存储在 RGB 中。
解决此问题的办法很简单:允许 HSL 使用浮点数,上述精度问题就会消失。
除此之外,HSL 非常适合以直观的方式指定颜色,并极大地提升了 CSS3 的吸引力。告别颜色拾取、无休止的试错和十六进制计算器!不久前,我在一个修改后的 phpBB 模板引擎中添加了 HSL 功能,现在我离不开它。因此,它绝对值得你关注。
至于备用内容:问问你邻居的 Perl 极客,让他写个五行的代码,自动完成这些工作 :-)
“如果有人有喜欢的 Windows 或 Linux 工具用于捕捉具有 HSLa 功能的颜色,请在评论中告诉我,我会在这里更新。”
不是 Windows 或 Linux,但我使用 ColorTagGen(Mac)。我喜欢能够调整颜色。有人使用比这更好的工具吗?
喜欢这篇文章,我简直不敢相信之前从未使用过 HSLa。
这对我来说太低估了。学学学!
HSLa 非常易于使用,因为你可以调整颜色和阴影,而无需打开 Photoshop 来获取 RGB 颜色代码。我喜欢它。
没有设备使用 HSL 颜色空间。显示器使用 RGB,打印机使用 CMYK。HSL 总是计算出来的。它在创建颜色和谐和以更自然的方式选择颜色方面帮助很大。HSL 是一个过渡阶段。但是,在网络颜色中它是有意义的,因为网络设计中没有真正的颜色管理。
如果有一种方法可以“继承”值的一部分,例如,如果我让所有标题都是深蓝色,然后使用类似
hsla(inherit, inherit, 50%, inherit)
的东西来使某些标题成为相同颜色的浅色。然后,如果我想更改所有标题的颜色,我只需更换初始色调值,同时保留亮度变化。使用一些现有的 CSS 预处理器可能会实现…
这篇文章非常有趣 - 知道一些常见的错误以及如何处理它们很有用。
你们总是很棒。这一篇是你们特色的文章。
解决此问题的办法很简单:允许 HSL 使用浮点数,上述精度问题就会消失。
我认为它确实接受浮点数。我不知道它们是否以这种方式进行处理。
如果它不适用于 IE,我就失去了兴趣。
我并不是喜欢 IE 或者类似的东西,但不幸的是,我更多的是 IE 调试员而不是网页开发者,而且所有东西在 IE 中都不起作用,这让我很抓狂。
添加了分辨率选项,因为单元格不再需要那么大了。
http://cl.ly/24de2bac721b4a8161f9
好吧,我认为我知道 Photoshop 和 HSL 之间发生了什么。
但我需要在比评论框更大的地方写一些东西。=)
关键是:当你想获得更深的颜色时,将 Photoshop 中的亮度 (B) 除以 2。当你想获得更浅的颜色时,将饱和度 (S) 除以 2。有一些注意事项,但这相对简单。
一旦你掌握了这种方法,就可以在脑子里进行这种计算。敬请关注!克里斯,很棒的文章。
此外,这个 Photoshop 颜色拾取器可能会有所帮助:http://anastasiy.com/magicpicker
它有一个三角形的 HSB 拾取器,它与 HSL 的工作方式类似,比使用方形拾取器更接近。
Firefox 的“Rainbow”插件允许你检查网页元素的颜色,并提供十六进制、rgb 和 hsl 值。它还有一个颜色拾取器。不过它不允许你选择页面外的任何东西。
https://addons.mozilla.org/en-US/firefox/addon/14328/
为什么 alpha 值不能也是百分比?
或者它又是那些很久以前就决定了,而且没人能找到解释的东西之一(尽管有工作组的电子邮件记录可以追溯到大爆炸?)
有没有专业的设计软件(比如 Photoshop)使用 HSL 而不是 HSB?
如果没有,为什么小组选择 HSL 而不是 HSB?
如果一些浏览器开发者想成为一个完备主义者,是否有可能拥有 RGBa 和 HSLa 以及 HSBa,甚至可能还有 Lab 或 CMYK?
反正有人会做一个将 hsb 转换为 hsl 的 javascript 函数,那为什么不将 hsb 添加到标准中?
这里有一个方便的 SASS 函数,供其他像我一样在寻找它并从这里找到它的人使用 - https://gist.github.com/voxpelli/1069204
我希望 Adobe 添加对 HSL 的支持。支持的色彩模型越多越好。
SASS 是一个服务器端的 CSS 预处理器,它也支持 HSLA、数学、嵌套和 mixin。但是,SASS 将 HSLA 颜色输出为十六进制,因此它可以在 IE 上运行。SASS 与 Ruby on Rails 无缝集成,但命令行版本适用于任何项目。使用 SASS 让你的样式表保持 DRY,你将永远不会使用其他任何东西。
HSL 对我来说很混乱,因为
你需要为 S 和 L 添加 %,但不需要为 H 添加(我希望根本不需要添加它)。
它与 Photoshop 中的 HSB 不匹配,也许是我做错了什么。
我只会在需要动画颜色时使用 HSL,否则使用 RGB。
另外,色调不是以(360)度为单位测量的吗?我认为应该有“deg”测量单位,比如“px”和“em”。
为什么 H 不使用“deg”?
说到这里,在 CSS 的其他部分中,有时可以使用百分比(例如:1% 或 87%),但有时必须使用小数(例如:0.01 或 0.87)。
为什么不在这两种情况下都允许使用小数或百分比?
谢谢克里斯!HSL 对我们这些老设计师来说直观多了!非常适合你想要颜色色调或阴影,但又不想改变颜色的情况。
我还注意到 Photoshop 在抓取 RGB 值时“不正常”。我在 CSS 中使用 RGB 构建的颜色与使用十六进制值在 Photoshop 中构建的图形不匹配。我目前的项目围绕一个不断变化的紫色十六进制值。不确定,但我认为当我将文件保存为 PNG 格式时会发生某些事情。
从某些版本的 Photoshop 保存的 .png 文件在某些版本的某些浏览器中某些操作系统下显示时,往往会比原始图像更亮。
参见:http://morris-photographics.com/photoshop/articles/png-gamma.html
如果颜色完全不同,你需要校准你的显示器,然后校准 Photoshop 的颜色管理设置,确保 Photoshop 在与你的显示器相同的颜色空间中工作(或类似的操作……我一直没完全理解它)。
你的演示在 iPad 上可以运行,直到你尝试移动滑块,整个页面滚动!
不过,内容还是很不错的!
克里斯,非常感谢你撰写这篇文章!我希望 HSLA 能得到更多关注。它比 RGBA 直观得多。
我推荐 Firefox 中的 Rainbow,可以作为第二选择。一些支持 HSLA 的不错的在线颜色工具:甜甜圈颜色选择器 和 http://serennu.com/colour/hsltorgb.php
第三个 IE 9 预览版现在支持 HSLA 了。太棒了!
我选择的颜色选择器是 Frank DeLoupe(适用于 OS X),它支持 HSLa。99 美分物超所值。
Sip 是我在 Mac 上找到的最好的颜色工具,绝对没有争议。
http://theolabrothers.com/sip/
有人能帮忙解决这个问题吗?
我正在使用。
@theme:#5c0632;
但是下面的语法不起作用。
@themeColor:hsl(@theme, 99%, 64%);
实际上,在 HSL 中,我只想根据我的主题随机更改“H”值。
请忽略。