html5禁止button嵌套在a中,因二者均为交互元素导致语义冲突;浏览器自动纠错但屏幕阅读器仍会误读、焦点错乱;正确做法是用a包裹div/span并补全role和键盘支持。

按钮嵌套在里为什么会被屏幕阅读器报错
因为 HTML5 明确禁止将 <button></button> 嵌套在 <a></a> 中——两者都是交互式元素,语义冲突。浏览器会自动纠错(比如把 <a><button></button></a> 解析成两个独立节点),但屏幕阅读器仍可能读出“链接内含按钮”,或跳过其中一者,导致焦点顺序错乱、朗读重复、键盘导航中断。
- 实际现象:Tab 键跳过某个按钮、朗读两次“跳转到 GitHub”、
aria-label不生效 - 根本原因不是样式问题,而是 DOM 结构违反了 WAI-ARIA 实践指南中“避免嵌套可聚焦元素”的原则
- 即使视觉上正常,
role="link"加在<button></button>上也无效——按钮的默认role="button"优先级更高,无法覆盖











