标记颜色,用github的颜色色板重新审视
#html #网络开发人员 #a11y #svg

I wrote about semantic HTML for colors 5 years ago,因为当颜色的外观是重要的内容时,不仅是样式:

  • 设计系统可用调色板
  • 选择要购买的衣服
  • 关于油漆网站的预览色板
  • 可能更多的颜色非常重要!

我的原始帖子建议了一个标有<input type=color readonly>,但是从那以后,我考虑了这是如何跌倒的:

因此,我最初的结论是<svg>可能是一个更好的主意。 (我在该帖子上使用我的编辑按钮。

现在,这些问题很重要,但是我写这篇文章的真正原因是pettier:我在github.com上使用了“检查元素”并为此感到生气。

Github的十六进制代码色板

github具有一个功能,如果您在markdown文件/注释/wather中键入6位十六进制代码,它将以rrggbb格式显示该hex的颜色点:

Screenshot of GitHub’s rendering the hex code #aa4400. The usual gray box around the &lt;code&gt; element extends to the right to hold a small circle of a dusky brick red.

例如,如果键入`#aa4400`,则github的html输出看起来像:

<code>#aa4400
  <span
    class="ml-1 d-inline-block border circle color-border-subtle"
    style="background-color: #aa4400; height: 8px; width: 8px;"
  ></span>
</code>

这有问题:

未接触到
忘记文本替代方案,现在完全不存在辅助技术
太容易覆盖了
通过黑暗/光模式浏览器扩展,builtin Dark Mode browser support,用户样式等。
在强制颜色下看不见
koude8是Windows High-Contants模式之类功能的标准化名称,该功能完全关闭background-color

我们可以用内联SVG解决大多数问题:

<code>#aa4400
  <svg width="8" height="8"
    fill="#aa4400"
    class="ml-1 border circle color-border-subtle"
  >
    <rect width="100%" height="100%"/>
  </svg>
</code>

上述标记上的一些注释:

  • 我还没有访问它,因为事实证明是a whole section’s worth of considerations
  • 不再需要d-inline-block类(<svg>inline-block
  • style属性让它与严格的内容安全策略一起发挥作用

但是,当我们可以成为完美主义者时,为什么要停下来

github的当前实现也有我认为是一个错误,它在较大文本中看起来很愚蠢:

Almost like the earlier screenshot, but while the gray box scales proportionally around the text, the color dot stays 8×8 pixels and awkwardly sits near the bottom — it honestly resembles a colorful punctuation mark.

例如,<h1>内部。

svg的widthheight属性可以使用ems用字体大小来缩放点:

<code>#aa4400
  <svg width=".667em" height=".667em"
    fill="#aa4400"
    class="ml-1 border circle color-border-subtle"
  >
    <rect width="100%" height="100%"/>
  </svg>
</code>

哎呀,您甚至可以用SVG的内在替换GitHub Primer’s utility classes

<code>#aa4400
  <svg width=".667em" height=".667em"
    fill="#aa4400"
    viewBox="-9 -8 17 16" stroke="var(--border-subtle)"
  >
    <circle radius="16"/>
  </svg>
</code>

github可能会不会,因为一旦您选择了需要使用的公用事业课程,您需要使用它们 或它们的核心性能承诺掉落 1 ,但也许 可能?

顺便说一句,吉特拉布也这样做

和往常一样,GitLab比GitHub 2 更周到地实现了该功能。他们支持more color syntaxes and transparency,IT doesn’t have the koude18 scaling bug,标记简单简单:

<code>HSLA(540,70%,50%,0.3)
  <span class="gfm-color_chip">
    <span style="background-color: HSLA(540,70%,50%,0.3);"></span>
  </span>
</code>

它仍然会随着强制颜色和深色模式而破裂,因此,Gitlab Peep也可能对本文感兴趣。 (I also refactored theirs to be shorter, simpler, and with one less koude19,因为我很难接受。)

说到可访问性,我还没有解决问题。

可访问颜色

所以,那个<svg>。什么是role?它可访问的名称?应该宣布它吗?

对于这种特定情况,它在其旁边具有等效的文本,而Github的受众群体比平常相比具有技术性感 - 我可以想象,Github可能已经决定分别宣布颜色点是多余的。

我不同意。显示颜色为看到的用户添加了信息,因此为什么根本存在该功能;为了跨残疾边界的信息奇偶校验的理想,我们应该尝试公平。

由于十六进制代码已经存在,因此适当的文本替代方案将是显示颜色点的信息。也许是通过the ISCC–NBS system之类的颜色名称? 3

尝试to explain colors to people who can’t see them不是目标,而是naming a color consistently can be quite useful by itself。更不用说,blind people may want to know for its own sake

<code>#aa4400
  <svg role="img" aria-labelledby="_Z5jdHi6">
    <title id="_Z5jdHi6">Color: “firebrick”</title></svg>
</code>

我没有真正的结论,但这是一个有趣的事实

当我第一次开始学习色彩可访问性时,对每种色盲品种所看到的内容而不是真实的色彩困扰着我的解释 - 他们怎么能确定?虽然通常我很乐意离开“do you and I see the same red” to the philosophers,但对于手浪的理由来说太重要了,无法满足我的要求。

几天后,关于人类视网膜,枕叶,信号处理以及婴儿之一的其他复杂性的科学论文迷失和困惑仅在 中是色盲的一个 eye。


  1. 您必须通过遵守技术来赚取的任何功能,在我不信任的技术之前,您将没有任何技术。 远离 从诸如tail逆风之类的事情上是可疑的。 (这是我的脚注,如果我愿意,我可能会变得狂热。)

  2. 在Gitlab CI工作后使用GitHub动作就像拆卸一个完美的三明治并将其制成寿司。一切最终都去了您需要的地方,但没有人开心。

  3. 有一堆颜色命名系统和even more color naming NPM packages,我没有资格推荐其中任何一个。