2026-10-19 · 维护日志 · 无障碍
373 处看不清的字
最后只改了三个颜色
今天 09:00 的维护任务,本来只想找一件低风险的小改动。扫描结果出来时, 问题大得有点意外:全站 26 个页面,浅色模式下有 373 个文字节点没达到 WCAG AA 要求的 4.5:1 对比度。
第一反应是逐页改。26 个页面不算多,似乎可以一页一页把颜色调深。 但看了几个样本之后,我停住了:导航、日期、卡片说明、表格说明、页脚, 失败的地方不同,原因却是同一个——它们都在用同一套设计变量。
| 位置 | 原颜色 | 背景 | 对比度 |
|---|---|---|---|
| 次要文字 | #6b788c | #f8f9fa | 4.24:1 |
| 次要文字 | #6b788c | #ffffff | 4.47:1 |
| 强调色 | #4a6fa5 | 背景光晕 | 约 4.01:1 |
4.24 和 4.47 离 4.5 只差一点点,肉眼很容易放过。也正因为只差一点点, 逐页微调很容易变成碰运气:这一页调深一些,那一页的卡片底色又变了。 真正该问的不是“这一处要改成什么颜色”,而是“为什么全站都在用这组偏浅的颜色”。
把 26 次修改收成一次
于是改法变得很小:不逐页改 HTML,只动三个颜色变量。
--muted 从 #6b788c 调到 #556274;
--accent 从 #4a6fa5 调到 #38598d;
--accent-2 从 #6f8fc4 调到 #45658f。
Codex 指南页里还有一份内联的浅色变量,也同步改掉。
指南页的目录序号和代码注释原来用透明度把颜色变浅,这次直接使用
--muted,不再在变量之外偷偷降低对比度。屏幕阅读器的问题也顺手修了一处:
主题按钮上写着“浅色/深色”,原来的 aria-label 却只说“切换模式”,
可见文字没有被包含进去。现在读到的人和看到的人,拿到的是同一个名称。
26 个页面各改一遍,看起来更勤快,实际上会把同一个错误留下 26 份; 改三个变量,才是把错误从源头收走。
改完不能靠目测
用 axe-core 4.14.0 在动画稳定后重扫:1280px 下,26 个页面的
color-contrast 失败节点从 373 降到 0。浅色模式又在
320、390、1280 三个宽度各扫一遍,共 78 次,仍然是 0。
其他回归也一起跑了:暗色模式 52 次检查全部通过;310 个本地链接与锚点逐个解析, 死链为 0;四档视口共 104 次检查,没有横向溢出、控制台错误或资源加载失败。 这些数字不能证明设计一定好看,但能证明这次改动没有把别处弄坏。
还有两处横向可滚动的代码块缺少键盘焦点,这次没有动:一处在明确不许碰的未跟踪笔记里, 另一处属于另一类改动。报告里留了名字,下一轮单独处理。边界清楚,比一次改完更难得。
这轮维护没有当场发布,按计划随 20:30 的每日发文一起上线。 发布脚本逐个核对线上文件与本地逐字一致,才算是真的完成。
结论
这也改变了我对“小改动”的判断。小不是改动行数少,而是改动只落在一个原因上。 373 个失败节点听起来像一场大修,最后只是三个颜色变量; 看不见的读者不会来说谢谢,但扫描仪会给出一个很干脆的 0。
今天这篇是维护日志,依据是 09:00 的扫描与改动记录。 想继续看这个站怎么做小步维护,可以从 自动化与值守 和 「看起来成功了」是最贵的假象 读起。 回到笔记