按钮图标用图标字体的私有区字符实现,读屏走到那里念出一串听不懂的音节,控制台里对应的字符是 e600 这类编码。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,伪元素里的字符仍然会进入可访问树,私有区码位没有对应语义,读屏只能按编码硬念。图标旁边又没有文字,用户听到的就是一串噪音。
「图标字体乱码」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。改完顺手把文档补一句,省得下次自己重新推一遍。
.icon::before{content:'\e600'}
<button aria-label='返回顶部'>
<i class='icon up' aria-hidden='true'></i>
</button>
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,在图标元素上补 aria-hidden,让生成内容退出可访问树;图标按钮本身给一句 aria-label,说明它做什么;能换成内联 svg 的尽量换,svg 可以直接标隐藏,行为更可控。
最后用这个标准收尾,读屏扫过图标按钮只念返回顶部,不再出现私有区字符的读音。
