咨询:为button元素添加链接的正确方式及现有实现是否合规
嘿,我来帮你理清这个按钮加链接的问题~
首先说你现在用<a>包裹<button>的实现:从HTML5规范来说,这种写法是允许的(因为<a>标签在HTML5里可以包含流内容,包括<button>),但从语义和可访问性的角度,这其实是不推荐的——链接的语义是“导航到某个资源”,按钮的语义是“触发一个交互动作”,把两者混在一起会让屏幕阅读器等辅助工具的用户困惑,也可能让普通用户对元素的交互逻辑产生误解。
然后你之前尝试给<button>加href属性没用,这很正常,因为<button>元素本身就没有href这个属性,它是表单交互元素,不是导航元素,所以这个写法从一开始就不成立。
接下来给你两个更优的替代方案,按需选择:
方案一:用样式化的<a>标签(最推荐)
如果这个元素的核心功能是导航到另一个页面/资源,那它本质上就是个链接,应该直接用<a>标签,然后通过CSS把它样式成按钮的样子。这样语义正确,兼容性拉满,可访问性也最好。
代码示例:
<a href="https://link.com" class="more-button">FIND OUT MORE <i class="fa fa-chevron-right" aria-hidden="true"></i></a>
然后你只需要确保.more-button的CSS样式和你之前给按钮写的样式一致就行,比如设置display: inline-block、合适的内边距、背景色、边框、圆角,还有hover/active状态的样式,完全可以做到和原来的按钮视觉上一模一样。
方案二:给<button>添加JS跳转(仅适用于特殊场景)
如果你确实需要用<button>元素(比如这个按钮同时要处理表单提交、弹窗触发等JS交互,还要兼顾导航),那可以通过JavaScript给按钮添加点击跳转逻辑:
代码示例:
<button class="more-button" onclick="window.location.href='https://link.com'">FIND OUT MORE <i class="fa fa-chevron-right" aria-hidden="true"></i></button>
不过这种方式要注意可访问性:
- 确保键盘能正常触发(按钮本身支持键盘聚焦和回车/空格触发,这点没问题)
- 可以给按钮加
aria-label说明导航用途,比如aria-label="跳转到详情页面",让辅助工具用户明白这个按钮的作用
但还是要强调:如果只是单纯的导航需求,方案一绝对是最优解,语义清晰且无需额外JS。
内容的提问来源于stack exchange,提问作者DaveYme

