标准答案

  1. 状态不能只用颜色表达,成功、警告、错误、禁用、选中都应该有文字或形状辅助。
  2. 表单错误要提供明确错误文案,并通过 aria-describedby 关联到输入框。
  3. 焦点状态要清晰可见,不要移除 outline 后没有替代样式。
  4. 颜色对比度要满足可读性要求,尤其是正文、按钮和错误提示。
  5. 图标、边框、背景、文字和状态属性可以组合使用,但不要让图标成为唯一信息来源。

题目解析

这题考的是可访问性设计。颜色是辅助信号,不应该是唯一信号。

好的状态样式应该让用户不看颜色也能判断发生了什么、下一步该怎么做。

代码示例

错误状态同时有边框、文字说明和 aria 关联。

HTML
<label for="email">邮箱</label>
<input id="email" aria-invalid="true" aria-describedby="email-error">
<p id="email-error" class="field-error">邮箱格式不正确</p>
CSS
.field-error {
  color: #b42318;
  font-weight: 600;
}

input[aria-invalid="true"] {
  border-color: #b42318;
  box-shadow: 0 0 0 2px rgba(180, 35, 24, .16);
}

常见误区

  • 只用红色和绿色区分错误和成功。
  • 移除 focus outline 后没有提供新的焦点样式。
  • 错误提示没有和表单控件关联,屏幕阅读器用户不知道哪里错了。

作者信息