oklab()
Baseline
2023
Newly available
Since May 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
函数记号 oklab() 在 Oklab 颜色空间中表示指定颜色,此颜色空间尽力模仿人眼感知颜色的方式。oklab() 在 Oklab 颜色空间中使用直角坐标系,有 a 轴和 b 轴。若想要极坐标颜色系统——色度和色相,请使用 oklch()。
Oklab 为感知颜色空间,可用于:
- 在不改变图像明度的前提下,将图像转换为灰度图。
- 在保持用户所感知的色相和明度的前提下,修改颜色的饱和度。
- 创建平滑均匀的颜色渐变(例如在
<canvas>元素中手动插值)。
oklab() 函数可表示 Oklab 颜色空间中的任意颜色。此颜色空间比 RGB 更宽广,包含宽色域颜色和 P3 颜色。
语法
css
/* oklab(明度 a 轴 b 轴) */
oklab(40.1% 0.1143 0.045);
oklab(59.69% 0.1007 0.1191);
/* oklab(明度 a 轴 b 轴 / alpha) */
oklab(59.69% 0.1007 0.1191 / 0.5);
备注:
oklab() 函数不像其他某些颜色函数一样支持以逗号分隔其值,且可选的 alpha 值在指定时需置于正斜杠(/)之后。
取值
- 函数记号:
oklab(L a b [/ A])L为介于0和1之间的<number>或介于0%和100%之间的<percentage>,此处数值0对应0%(黑),数值1对应100%(白)。L指定了感知明度。a为介于-0.4和0.4之间的<number>或介于-100%和100%之间的<percentage>。此值指定了在 Oklab 空间中沿a轴的距离,即颜色绿或红的程度。b为介于-0.4和0.4之间的<number>或介于-100%和100%之间的<percentage>。此值指定了在 Oklab 空间中沿b轴的距离,即颜色蓝或黄的程度。A(alpha)为介于0和1之间的<number>或<percentage>,此处数值1对应100%(完全不透明)。A表示颜色的透明度(即 alpha 通道)。
形式语法
<oklab()> =
oklab( [ from <color> ]? [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )
<alpha-value> =
<number> |
<percentage>
示例
>用 oklab() 调整明度和轴
下列示例展示了改变 oklab() 函数的明度、a 轴和 b 轴值的效果。
HTML
html
<div data-color="blue"></div>
<div data-color="blue-light"></div>
<div data-color="red"></div>
<div data-color="red-a"></div>
<div data-color="green"></div>
<div data-color="green-b"></div>
CSS
css
[data-color="blue"] {
background-color: oklab(0.5 -0.3 -0.4);
}
[data-color="blue-light"] {
background-color: oklab(0.7 -0.3 -0.4);
}
[data-color="red"] {
background-color: oklab(100% 0.4 0.4);
}
[data-color="red-a"] {
background-color: oklab(100% 0.2 0.4);
}
[data-color="green"] {
background-color: oklab(100% -100% 0.4);
}
[data-color="green-b"] {
background-color: oklab(100% -100% 0.6);
}
结果
用 oklab() 调整不透明度
下列示例展示了改变 oklab() 函数的 A(alpha)值的效果。为演示不透明度的效果,red 和 red-alpha 元素与 #background-div 元素重叠。给予 red-alpha 元素 0.4 的不透明度使其显得比 red 元素更透明。
HTML
html
<div id="background-div">
<div data-color="red"></div>
<div data-color="red-alpha"></div>
</div>
CSS
css
[data-color="red"] {
background-color: oklab(50% 130 20);
}
[data-color="red-alpha"] {
background-color: oklab(50% 130 20 / 0.4);
}
结果
规范
| Specification |
|---|
| CSS Color Module Level 5> # relative-Oklab> |
| CSS Color Module Level 4> # ok-lab> |
浏览器兼容性
Loading…
参见
<color>数据类型所列的所有颜色记号oklch():另一使用与oklab()相同的颜色空间但在极坐标系中的函数记号- 一个用于图像处理的感知颜色空间