?键盘交互差在哪
二者在读屏器里可能都读成“按钮”,但行为天差地别:<button></button> 自动支持空格/回车触发、disabled 状态禁用朗读与交互、默认焦点样式;<div role="button"> 必须手动补全全部逻辑,漏一项,键盘用户就会卡住。
<p>典型漏项包括:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img
src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a>
<p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<ul>
<li>没加 <code>tabindex="0",Tab 键无法聚焦
没监听 keydown 事件处理空格/回车,仅靠 onclick 不够
没同步设置 aria-disabled="true" 和视觉禁用状态,读屏器仍会提示“可点击”
标题层级错乱会让读屏用户彻底迷失上下文
很多开发者用 <h2></h2> 开头,中间穿插 <h1></h1>,再回到 <h3></h3>——这种跳跃会让屏幕阅读器把结构理解成“子章节突然变成父章节”,用户无法建立稳定的认知地图。
正确做法是严格遵循视觉与逻辑一致的层级:
- 每个
<section></section> 或 <article></article> 应以 <h2></h2> 起始(如果整体页面已用 <h1></h1>)
- 内部子模块用
<h3></h3>,依此类推
- 禁止在
<header></header> 外单独使用 <h1></h1>,除非它是页面唯一主标题
- 动态渲染的标题(如 React 中通过 props 注入)必须确保 DOM 插入时层级连续
跳级不是 bug,是可访问性阻断点——它让屏幕阅读器的“大纲视图”失效,用户失去全局定位能力。