我在 Safari 技术预览版 122 的发行说明 中看到,它支持 CSS 中的 color-contrast()
函数。Safari 是第一个支持该功能的浏览器。据我所知,其他浏览器尚未支持此功能,我也不知道稳定版 Safari 何时会发布此功能,或者其他浏览器是否会发布此功能。但是!这是一个非常好的想法!任何能够帮助我们构建更易访问的界面(颜色对比是其中一部分)的原生工具都深得我心。所以让我们尝试让它工作起来。

任何人都可以下载 Safari 技术预览版,所以我下载了它。
我不得不就此询问一下,但仅仅因为这是一个预发布浏览器,并不意味着所有这些功能默认都是启用的。就像 Chrome Canary 有需要打开的功能标志一样,Safari 技术预览版也是如此。所以,我不得不像这样打开它

发行说明中没有关于如何实际使用 color-contrast()
的任何信息,但幸运的是,网络搜索找到了一份规范(它是颜色模块 5 的一部分),并且 MDN 有一个关于它的页面,其中包含非常基本的语法信息。
这是我理解的方式
上面那个例子有点傻,因为它总是返回 white
——它与 black
的对比度最高。当一个或多个颜色值是动态的时,此函数实际上变得有用,这意味着它很可能是一个 CSS 自定义属性。
该函数返回一个颜色,所以我猜最常用的用例将是根据动态背景设置颜色。所以……
section {
background: var(--bg);
color: color-contrast(var(--bg) vs white, black);
}
现在我们可以向 --bg
中添加**任何颜色**,根据对比度,我们会得到白色或黑色的文本。

这非常酷,即使是最基本的用例也是如此。
这是 Dave 的一个演示,他不仅在父元素中设置文本颜色,还设置链接的颜色,并且链接有一组不同的颜色可供选择。使用 HSL 滑块(当然是在 Safari 技术预览版中)进行操作,查看其工作原理。
选择两种对比度足够高的颜色很容易(尽管你会惊讶地发现,即使是我们这些有良好意图的人,也会经常搞砸)。但哇,在不同的情况下,它会变得非常复杂,更不用说有大量的颜色变化,或者更糟糕的是,任意的组合了。
这是一个我使用 Dave 的测试程序的视频,您可以看到颜色如何在不同位置更新。
我想知道是否可以嵌套 color-contrast,将一个 color-contrast 的结果放入一个变量,然后将其放入另一个变量。会有什么用例呢?
我预计它可以工作,但我真的不知道。一层深度对我来说似乎并不遥远。例如,您可能有一组绿色,从中选择对比度最佳的版本。还有红色、黄色等。然后使用一个函数在色调之间进行选择。
您好,感谢您的文章。我迫不及待地想在所有主流浏览器上使用它。
我也写了一些关于新颜色功能的文章:https://dev.to/fabiogiolito/create-a-color-theme-with-these-upcoming-css-features-4o83
其中有一些不同的方法,您可能会觉得有趣。
哦,太棒了!我不得不手动执行此操作,因此自动化它将节省时间。我有一些问题……
您可以控制对比度阈值吗?
这将如何与颜色滤镜一起使用?
我们知道其他浏览器是否也计划支持它吗?是否有任何关于预计时间的传闻?
一如既往,感谢您的精彩灵感!
这是一个使用 PostCSS 插件为所有浏览器填充此功能的绝佳候选对象。我快速查看了一下,但没有看到任何替换
color-contrast()
语法的插件。它显然必须处理或忽略使用 CSS 自定义属性的实例,但这将是朝着正确方向迈出的一步。它是否适用于 SVG?一个 SVG 可以作为网站的徽标和收藏夹图标,而无需担心徽标是否会消失在各种背景颜色中。