如何为带可变文本的时间周期控制按钮正确设置A11Y/ARIA属性?
解决方案:让屏幕阅读器同时读取按钮标签和当前值
针对这个无障碍设计的问题,这里有两个实用的实现方案,既能保留按钮的动态文本,又能让屏幕阅读器获取完整的标签信息:
方案1:内部嵌入视觉隐藏的标签文本
直接在按钮内部添加一段视觉上隐藏的标签文本,和动态值放在一起。屏幕阅读器会读取完整内容,普通用户只会看到动态值。
代码示例
<button> <span class="sr-only">时间周期:</span> 3 days </button> <!-- 视觉隐藏样式 --> <style> .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } </style>
效果
屏幕阅读器会读出:时间周期:3 days,按钮,视觉上仅显示3 days。
方案2:用aria-labelledby关联标签和值
如果标签和值需要分开维护(比如标签内容固定、值动态更新),可以用aria-labelledby将两个元素的文本合并作为按钮的无障碍标签。
代码示例
<!-- 固定的视觉隐藏标签 --> <span class="sr-only" id="time-period-label">时间周期</span> <button aria-labelledby="time-period-label time-period-value"> <span id="time-period-value">1 week</span> </button> <!-- 视觉隐藏样式同上 --> <style> .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } </style>
效果
屏幕阅读器会读出:时间周期,1 week,按钮,视觉上仅显示1 week。当动态值更新时,只需修改time-period-value元素的内容即可,无需调整无障碍属性。
为什么不推荐用aria-label?
aria-label会完全覆盖按钮的原生文本内容,导致屏幕阅读器无法读取动态变化的时间值,不符合需求。上面两个方案都是基于保留原生文本的基础上补充标签信息,更符合无障碍设计的最佳实践。
内容的提问来源于stack exchange,提问作者bvandercar
相关产品推荐
相关产品推荐

