理解网页无障碍颜色对比指南和比率

Avatar of Stacie Arellano
Stacie Arellano

DigitalOcean 为您的旅程各个阶段提供云产品。立即开始使用 $200 免费信用额度!

当您收到有关网页设计中颜色对比度的投诉时,您应该怎么办? 它可能对您来说看起来很完美,因为您可以阅读整个网站的内容,但对其他人来说,这可能是一种完全不同的体验。 如何设身处地地为他们改善体验?

有一些相对容易的方法来测试对比度。 例如,您可以在阳光明媚的情况下(不可靠*)在手机或平板电脑上检查网站,或者添加一个 模拟灰度视图的 CSS 过滤器)。 但… 您不必相信自己的眼睛。 毕竟不是每个人都拥有您一样的眼睛,所以您的主观意见可能会导致错误的测量结果。

您可以数学地知道两种颜色之间是否有足够的对比度。

W3C 有一份名为 Web 内容无障碍指南 (WCAG) 2.1 的文档,其中涵盖了 成功的对比度指南。 在进入数学计算之前,我们需要了解要达到或超过的对比度比率分数。 要获得及格分数(AA),大多数正文的对比度比率为 4.5:1,较大的文本的对比度比率为 3:1。

W3C 是如何得出这些比率的?

这些指南是为任何使用标准浏览器且没有额外辅助技术的人创建的。 WCAG 建议的对比度比率最初基于早期的对比度标准,并进行了调整以适应更新的显示技术(如抗锯齿文本),以便内容可以被具有各种视觉或认知障碍的人阅读,无论是因为年龄、疾病还是其他视觉敏锐度下降。

我们基本上是想让 20/40 视力的人也能阅读文本,这相当于 80 岁的人的视力。 20/40 的视力意味着你只能在 20 英尺外阅读 20/20 视力的人在 40 英尺外才能阅读的东西。

所以,假设您的设计需要抗锯齿文本,因为它在屏幕上看起来更平滑。 它实际上牺牲了一点对比度并降低了您的比率。 WCAG 对 评分机制进行了更详细的介绍。

还有其他标准将对比度考虑在内,WCAG 使用其中一些考虑因素来制定其评分。 其中一项被称为 计算机工作站的人机工程学 (ANSI/HFES 100-2007) 出版于 2007 年,被指定为人体工程学方面的美国标准。 它合并并取代了两个由不同委员会创建的早期标准。 合并标准的目标是适应 90% 的计算机用户,并涵盖计算机使用和人体工程学的许多方面,包括视觉显示和对比度。 所以,这意味着我们在设计中要考虑物理屏幕。

比率意味着什么?

对比度比率解释了给定范围内最亮颜色亮度与最暗颜色亮度之间的差异。 它是 每种颜色的相对亮度

让我们从一个鲜明的例子开始,比如在浅灰色背景上显示青绿色文本。

<h1>Title of Your Awesome Site</h1>
h1 {
  background-color: #888888;
  color: #1ABC9C;
}
糟糕!

值得注意的是,某些工具(如 WordPress)会在文本和背景组合对比度较差时提供有用的警告。 在 WordPress 的情况下,您会在侧边栏中收到通知。

“这种颜色组合可能难以让人阅读。 请尝试使用更亮的背景颜色和/或更深的文本颜色。”

“好的,”你说。“也许你觉得青绿色和灰色这种颜色组合并不理想,但我仍然可以辨认出内容。”(我很高兴我们中有人可以,因为对我来说,这简直是一团模糊的灰色。)

这段超文本的对比度比率为1.47:1。

我想更好地理解对比度分数实际上检查了什么,发现它需要使用数学…以及了解人眼和计算机视觉之间的差异。 这段旅程让我了解了 计算机视觉的历史以及一些生物学知识,并让我回顾了自大学以来一直没碰过的 一些数学概念

这是公式

(L1 + 0.05) / (L2 + 0.05)
  • L1 是两种颜色中较浅颜色的相对亮度。
  • L2 是两种颜色中较深颜色的相对亮度。

看起来很简单,对吧? 但首先我们需要确定每种颜色的相对亮度才能得到这些变量。

好的,回到相对亮度

我们之前提到了它,但值得深入了解一下相对亮度,也就是任何颜色的相对亮度,表示为 0(黑色)到 1(白色)之间的光谱。

要确定每种颜色的相对亮度,我们首先需要获得颜色的 RGB 表示。 有时我们会使用十六进制颜色值,需要将其转换为 RGB。 网上有一些计算器可以帮助我们完成这项工作,但 背后存在着严谨的数学运算。 我们的青绿色十六进制颜色 #1ABC9C 转换为 RGB 26, 188, 156

接下来,我们将 RGB 颜色的每个值除以 255(RGB 值的最大整数)以获得 0 到 1 之间的线性值。

所以现在我们青绿色的颜色看起来像这样

组成部分公式
红色26/2550.10196078
绿色188/2550.73725490
蓝色156/2550.61176471

然后我们应用伽马校正,它 定义了像素数值与其实际亮度之间的关系,应用于 RGB 颜色的每个组成部分。 如果组件的线性值小于 .03938,则将其除以 12.92。 否则,我们将 .055 加到它上面,然后将总和除以 1.055,并将结果取 2.4 次方。

我们青绿色的颜色经过伽马校正后的颜色组成部分如下

组成部分公式
红色((0.10196078 +.055)/1.055) ^ 2.40.01032982
绿色((0.73725490 +.055)/1.055) ^ 2.40.50288646
蓝色((0.61176471 +.055)/1.055) ^ 2.40.33245154

我们方程式中的这部分来自 确定相对亮度的公式

我们刚才只是快速地提到了伽马校正,而没有过多地谈论它以及它所做的工作。 简而言之,它将计算机“看到”的东西转换为人眼对亮度的感知。 计算机直接记录光线,光子数量的两倍意味着亮度的两倍。 人眼在昏暗的环境中感知到更多的光线级别,而在明亮的环境中感知到更少的光线级别。 我们周围的数字设备一直在进行伽马编码和解码计算。 它被用来向我们展示屏幕上的东西,这些东西与我们对事物在眼睛中的感知相符。

最后,我们将不同的颜色乘以代表这些颜色对人眼看起来有多亮度的数字。 这意味着我们通过将红色成分值乘以 .2126、将绿色成分值乘以 .7152、将蓝色成分值乘以 .0722 来确定每种颜色的亮度,然后将这三个结果加在一起。 您会注意到,这里绿色得到了最高的数值,

所以,最后再看一下青绿色

组成部分公式
红色0.01032982  X 0.21260.00219611973
绿色0.50288646  X 0.71520.35966439619
蓝色0.33245154  X 0.07220.02400300118

…然后将它们加在一起得到亮度!

L1 = 0.00219611973 + 0.35966439619 + 0.02400300118 = 0.38586352

如果我们用同样的方法得到 L2 值,那么我们会得到 0.24620133。

我们终于得到了计算对比度所需的 L1L2 值。 为了确定哪个值是 L1,哪个值是 L2,我们需要确保较大的数字(表示较浅的颜色)始终是 L1,并且除以较小的/较深的数字作为 L2

现在将结果与 WCAG 成功标准进行比较。 对于标准的文本大小(18 到 22 点),最小值为 4.5 将以 AA 等级通过。 如果我们的文本更大,那么稍低的分数 3 就可以了。 但要获得最高的 WCAG 等级(AAA),我们必须拥有至少 7 的对比度比率结果。 我们可爱的组合未能通过所有测试,远低于标准文本的 4.5 或标题式文本的 3。 是时候选择一些更好的颜色了!

我很高兴我们有计算机和在线工具来帮助我们完成这项工作! 尝试在纸上一步一步地计算细节让我沮丧了好几个星期。 我在将结果与自动对比度检查器的结果进行比较时,错误百出。

还记得学校里的老师总是希望你展示你的数学作业,证明你是如何得到答案的吗? 我做了一些东西来帮助我们。

如果您使用打开的控制台查看此演示,您将看到计算中每一步的数学运算。 试试我们的两个示例颜色,比如 #1ABC9C#888888

我只想要我的页面有合适的对比度,该怎么办?!

您可以使用各种无障碍资源来审核您的网站。 这是我整理的一个列表, 还有 另一个列表 在CSS-Tricks上。

但以下是一些入门提示。

首先,确定哪些区域没有满足您的无障碍需求。

the WAVE 无障碍工具 是一个不错的起点。 将您的网站运行到其中,它会为您提供对比度结果并帮助识别问题区域。

耶,通过分数!

遵循审核建议

使用最佳实践来提高您的分数,并消除错误。一旦您确定对比度错误,您就可以在 WAVE 工具中尝试一些不同的选项。 点击颜色框打开颜色选择器。 然后随意调整,直到错误消失,您就会知道可以在代码中替换什么。

重新运行测试

这样,您可以确保您的更改改善了问题。 恭喜!您刚刚让您的产品对所有用户都更好,而不仅仅是受无障碍错误影响的用户!

接下来要做什么取决于您!

您可以让事情变得更轻松,从一开始就以无障碍为目标创建所有新产品。 将无障碍指南作为您的要求,用于技术设计。 您将节省数百个小时的潜在修复时间,以及潜在的法律诉讼。 美国政府和教育网站必须遵守这些要求,但其他行业经常因为没有让其网站对所有人平等可用而受到指责。

如果您有选择,请考虑使用已建立和经过测试的框架和 Web 库(如 Bootstrap 或 Google 的 Material Design),这些库已经确定了最佳对比度主题颜色。 在很多情况下,您可以只取您需要的内容(例如,只有 CSS),或者至少查看它们的调色板以获得启发。 您仍然应该检查对比度,因为虽然框架中的大多数标准文本选项可能遵循对比度比率 WCAG 建议,但像警报和消息样式这样的东西可能不符合建议。 (我指的是你,Bootstrap!)

Derek Kay 已经回顾了一个 Web 框架列表,重点关注无障碍性,如果您正在寻找更多选项,建议您阅读。 the 美国 Web 设计系统 展示了一种使用其 CSS token 系统来解决颜色/对比度难题的方法(该系统将颜色标记为超级清晰的对比度差异),但它们还链接到几个非常好的资源,用于改善和理解对比度。

我们在本文中深入探讨了可能比您真正需要了解的内容更深入,但了解对比度比率是什么以及它实际上意味着什么应该可以帮助您记住在设计未来的网站、Web 应用程序和其他软件时牢记对比度

更清楚地了解对比度比率意味着什么可以帮助我记住对比度差会影响谁,以及如何改进 Web 和移动产品。

我不是对比度的最终专家,只是一个非常、非常好奇的女孩,有时在 Web 上阅读对比度低的文字时会遇到困难。

如果您有任何其他想法、更正或要分享的进一步研究,请留言,我会修改这篇文章! 我们对网站需求和要求的了解越全面,我们就越能更好地规划改进,并最终满足我们受众的需求。


进一步阅读和参考资料