加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 创业 > 创业经验 > 正文

内容为本、建设为基:无障碍设计的双轮驱动技术法则

发布时间:2026-11-07 08:03:46 所属栏目:创业经验 来源:DaWei
导读:  告警响的那一刻,我正把泡面叉子插进酱包里,没撕开——手抖。不是因为怕,是那声“哔——”太熟了,熟得像自己手机锁屏音,一响就条件反射摸裤兜。结果摸到半凉的咖啡杯底,烫得缩手,酱包“啪”地糊在屏幕上,正好盖住监控页右

  告警响的那一刻,我正把泡面叉子插进酱包里,没撕开——手抖。不是因为怕,是那声“哔——”太熟了,熟得像自己手机锁屏音,一响就条件反射摸裤兜。结果摸到半凉的咖啡杯底,烫得缩手,酱包“啪”地糊在屏幕上,正好盖住监控页右下角那个小小的无障碍检测状态灯:灰的。


  去年中秋,三台机器,凌晨三点半,无障碍服务崩了。不是前端白屏,不是接口超时,是整个读屏引擎突然开始把“提交按钮”念成“提交……(停顿两秒)……按钮按钮按钮”。语音重复,节奏错乱,用户反馈说像听磁带快进卡带。开发老张第一反应是TTS服务抽风,我直接SSH过去看日志——没报错。连warn都懒得打。就是安静,安静得离谱。日志里全是“INFO: VoiceSynth initialized”,仿佛在庆祝自己活得好好的。


  我原以为是TTS配置漂移,查证书有效期、看音频缓存目录、重启语音队列……全都没用。直到老张甩给我一段用户录的视频:盲人用户反复点“确认支付”,系统一直回“未找到可操作控件”。我盯着他手指悬停的位置,突然发现——那压根不是按钮区域,是旁边一个被CSS opacity设成0.01的装饰div,还带着tabindex="-1"。但读屏器认了。它认了。而真正的按钮,在DOM里被v-if干掉了——因为当时判断“用户未填写收货地址”,但校验逻辑漏掉了“地址字段为空但已聚焦”的边界态。也就是说,内容层早空了,建设层却还堆着个幽灵div当锚点。


  机房很冷。空调吹得我后颈发僵,值班表上我的名字底下画着两个圈,第二个圈是昨儿刚补签的——前天孩子发烧,我让同事替了两小时。我盯着那个opacity=0.01的div,忽然就火大。不是对代码,是对去年初我们拍板的那版《无障碍建设规范》:里头写“所有交互控件必须有语义化标签”,可没人管“非交互元素是否该冒充交互元素”。规范只管“建”,不管“内容还在不在”。就像你给空楼装电梯,轿厢门天天开合,就是不接人。


  老张端着保温杯过来,看见我截图里标红的那段JS,说:“哎,这个v-if本来该套在父容器上啊,套在按钮上就断链了。”我没吭声。我其实删过一次那行代码——上周三下午,测出tab焦点跳空,我以为修了。结果上线后,测试同学说“语音导航变流畅了”,我就点了发布。我忘了问她一句:流畅,是读得准,还是读得快?


  窗外天快亮了。灰蓝,泛白,那种凌晨四点特有的、让人想关掉所有屏幕的光。我切回终端,翻git log,commit msg写的是“修复无障碍焦点跳转异常”,author是我,时间戳是中秋节前夜九点四十七分。再往前翻两层,是测试环境的合并记录,PR里有个comment,写着:“无障碍扫描通过 ✅”。那个✅图标后面,还跟着一行小字:“检测依据:axe-core v4.7 + 人工目测关键流”。目测。对。我们真他妈目测了——用视力正常的眼睛,看一个本不该被看见的界面。


  优胜劣汰站得住的地方,就在这儿:没人拦你建一套漂亮框架,但真实用户会用鼠标划不到、键盘tab不到、读屏器读不着的方式,亲手把你供起来的“无障碍设施”淘汰掉。不是拉闸,是绕开。用户不投诉,他们直接不用。上个月运营给的数据,语音交互模块使用率跌了67%,但后台埋点显示“无障碍模式开启率”反升12%——全是自动化脚本刷的。谁写的?不知道。反正我们扫出来的报告是绿的。


  其实最难受的不是宕机。是那天中午,我回家路上经过地铁站,看见穿盲杖的老太太站在升降梯口不动,旁边志愿者举着手机给她读电子屏——读的是“当前楼层:B2”,而不是“电梯门已打开,请进”。我站在那儿,看着老太太抬脚又放下,抬脚又放下,像在等一个永远不响的提示音。我手机震了一下,是运维群弹出来的新告警:SSL证书续签失败。我点了静音。没点处理。


  跟开发吵那一架,起因是他改了一个aria-label的文案,从“主菜单按钮”改成“导航栏主菜单切换按钮(含子项)”。我说太长,影响语音节奏。他说:“可WCAG 2.1要求明确性优先。”我说:“可用户要的是‘现在我能点什么’,不是‘这东西叫什么学名’。”最后他让步了,但加了条注释:“下次审计若因label简略被扣分,责任不在我。”——你看,建设是钢印,内容是流沙。钢印能刻十年,流沙下一秒就换形。我们都懂备份,可谁给用户注意力做快照?


  同事小杨半夜打电话来,问我“语音重复”是不是K8s DNS轮询导致Pod路由抖动。我说不是。他说:“那要不要我帮你roll back到节前版本?”我顿了三秒,说:“别回。那个版本label还是错的,只是错得没这么大声。”挂电话前他问:“那你准备咋办?”我没说。我把终端关了,泡面汤已经结膜,勺子斜插在面饼里,像块墓碑。


  反正这事本来能避免。只要节前那次Code Review,有人多问一句:“如果地址字段没值但已被聚焦,DOM结构会怎样?”只要测试同学点进“无障碍模式”时,没顺手关掉读屏器自己去看,而是真戴上耳机听三分钟。只要我在删掉那行v-if前,没先去清了一遍Redis缓存,以为是热键污染……只要任何一个环节,把“内容是否真实存在”当成比“建设是否符合模板”更重的砝码。


文章配图,仅供参考

  明早我打算补两件事:一是把所有带v-if/v-show的按钮,加上一个CI校验脚本,强制检查其父容器是否具备语义化role;二是约机房的人喝顿茶,问问他上回UPS冗余切换演练,为啥手动按钮旁的贴纸写着“勿按,假的”。他说那是前任留的,没人敢撕。——有些“建设”,就是这么一代代供起来的。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!