React中如何为可点击的非交互元素添加无障碍标签?

Prog.奕玮 阅读 104

我正在给移动端图标按钮加无障碍支持,纯图标没有文字标签。试过用aria-label属性,但屏幕阅读器完全读不到内容,怎么回事?

比如这个React组件:


const IconButton = ({ icon, label }) => (
  <span 
    role="button" 
    aria-label={label} 
    onClick={handleClick} 
    tabIndex="0"
  >
    {icon}
  </span>
);

这样设置后,点击时触觉反馈正常,但TalkBack/SV不读出label内容。

我检查过元素确实获取了焦点,也试过把aria-label改成aria-labelledby关联隐藏文本,但问题依旧。是不是需要额外设置角色属性?或者移动端有特殊要求?

我来解答 赞 11 收藏
二维码
手机扫码查看
1 条解答
司马利娇
你这个问题其实挺常见的,主要是因为移动端的无障碍支持有一些特殊的地方。首先你的代码逻辑没问题,role="button"aria-label 都是对的,但问题可能出在几个细节上。

第一点是 span 元素本身并不是一个语义化的交互元素,虽然你加了 role="button"tabIndex="0",但在某些屏幕阅读器上可能会被忽略。建议直接换成
点赞 1
2026-02-17 03:10