用 box-shadow 替换表单输入的轮廓是否违反了任何 WCAG 准则? WCAG 2.2Internet Explorer(IE) 兼容性

问题描述

问题

outline 设置为 none 而使用 Box-shadow 来突出显示活动输入有哪些可访问性缺点?它是否完全违反了 WCAG?

背景

用户代理样式表在焦点上突出显示活动元素的 outline。要自定义此突出显示,我们可以使用 :focus 选择器。这适用于矩形输入元素,但在圆形输入上看起来不太好。显示不匹配的方块。请参见下面的示例,其中红色轮廓为方形,即使输入具有圆角。

Red,square outline around input box with rounded corners

由于 outline 是矩形,为了更好地匹配圆角元素,另一种样式化方法是将 outline 替换为 Box-shadow。这需要设置 outline: none,从可访问性角度来看 seems controversial

示例

input {
  border-radius: 999em;
  padding: 10px;
}

.outline:focus {
  outline: solid 15px red;
}

.Box-shadow:focus {
  outline: none;
  Box-shadow: 0 0 0 15px red;
}
<label for="with-outline">Outline</label>
<input name="with-outline" id="with-outline" class="outline">
<hr>
<label for="with-Box-shadow">Box Shadow</label>
<input name="with-Box-shadow" id="with-Box-shadow" class="Box-shadow">

解决方法

简答

如果您不需要支持 IE8,使用 box-shadowoutline 没有问题。有一些考虑因素,例如颜色对比度,但从技术上讲,您当前的示例通过了当前的指导(尽管我鼓励您稍微增加颜色对比度)。

更长的答案

您需要考虑的主要问题是颜色对比度。只要边框与背景的对比度为 3:1,那么在当前的指导下就可以了。

不过,WCAG 2.2 将于 2021 年 6 月/7 月生效,因此您不妨为此做好准备。

WCAG 2.2

只要您有足够的对比度并且足够厚以符合 WCAG 2.2(因此在生效时您不必重做),您就可以了。以下是即将到来的规则更改的摘要(您给出的示例通过了):

对比度变化:对焦指示区域的颜色变化与未对焦状态的颜色的对比度至少为3:1。

以下是对上述内容的补充

对比度或厚度:焦点指示区域与最小区域或更大区域的所有相邻颜色的对比度为 3:1,或者具有至少 2 个 CSS 像素的厚度。

焦点需要至少 3:1 变化,并且还需要:

  • 2px 厚和/或
  • 3:1 对 ALL 相邻颜色。

对于 WCAG 2.2,以下规则适用:

  • 最小区域:焦点指示区域是:
    • 至少与未聚焦组件的 1 CSS 像素周长面积一样大;
    • 沿着未聚焦组件的最短边至少与 4 个 CSS 像素边框一样大,并且不小于 2 个 CSS 像素。

显然 WCAG 2.2 只是一个草案,但我认为边界和焦点指标的原则已经接近最终版本。

你可以看到 WCAG 2.2+ understanding doc for contrast (minimum) here

Internet Explorer(IE) 兼容性

唯一需要考虑的另一件事是兼容性 - 如果您仍然支持 IE8,则由于软件兼容性,您不能使用 box-shadowoutline - 和 quite a few screen reader users are still using IE8

不过,我还是建议为 IE8 使用不同的基本样式表,否则您将陷入黑暗时代!我个人只支持回到 IE9 因为那已经够痛苦了!