在 2025 年 5 月 13 日,WebKit 团队宣布正式推出全新的 CSS 函数 contrast-color() 。这一功能简洁实用,可用于由浏览器自动判断是黑色还是白色,哪一种与指定背景颜色的对比度更高,从而实现文本与背景色的最佳对比。
contrast-color 浏览器兼容性:https://caniuse.com/?search=color-contrast
1. 为什么需要 contrast-color()
传统上,为元素设置背景色时,开发者还需手动选择与之对比度足够的文本颜色,否则可读性可能受影响。对于大型项目、动态主题或用户自定义色彩,这就变得特别麻烦。而 contrast-color() 可以自动选出黑色或白色,以确保与背景色的对比度更优。
2. 用法简洁高效
示例代码如下:
button {
background-color: var(--button-color);
color: contrast-color(var(--button-color));
}
浏览器将自动评估 var(--button-color) 背景色,选择黑色或白色作为文本色,保证可读性 。
3. 当前支持情况
Safari 26 beta 已经支持该函数,正式加入 Contrast Color 功能。
contrast-color() 已被纳入 CSS Color Module Level 5 草案,并与 color-mix()、light-dark() 等新函数共同定义。
4. 无法取代全面可访问性方案
值得注意的是,目前 contrast-color() 仅在黑/白之间选取对比度更高的一种,自动依据 WCAG 2 对比度算法进行判断,但未考虑更复杂的感知对比(如 APCA)与字体大小、粗细等因素。中间色调背景可能导致既非黑也非白都达不到 WCAG 标准,因此仍需人工把关。
5. 未来发展方向
CSS 规范明确指出未来可能引入更多算法、更强对比功能,甚至支持自定义备选色而不局限于黑白。
随着 WCAG 3 和 APCA 的普及,未来 contrast-color() 有望灵活选取符合更高标准的颜色,甚至以可自定义的备选色形式出现。
contrast-color() 是 WebKit 在 2025 年 5 月 13 日推出的一项简洁却极具功能性的 CSS 新工具,帮助开发者省去手动选择对比色的烦恼。当前它在 Safari Beta 中可用,并已纳入 CSS Color Module Level 5 草案。虽然目前仅支持在黑/白之间选择,并依赖 WCAG 2 算法,但无疑为开发带来更高效的对比色处理方式。未来如果算法与可选方案更丰富,将进一步提升 Web 可访问性与开发便利性。