Prompts-MCP 686 skills · ai / design / design-pattern / framework / fundamentals / habit / lang / tech-selection /mcp/sse
framework framework/react/a11y/semantic-and-aria.reference.md medium

semantic-and-aria.reference

参考 · 控件 → 必需 ARIA 矩阵

总原则:原生语义元素自带的 role / 状态不要重复声明;矩阵只列「自研壳层或原生无法表达时」必须补的属性。no ARIA 好过 bad ARIA

原生语义元素(首选,自带语义,无需 ARIA)

元素 隐含 role 自带能力
<button> button 键盘 Enter/Space 触发、焦点
<a href> link 键盘 Enter 跳转、焦点
<nav> navigation 地标
<main> main 地标(每页唯一)
<header>/<footer> banner / contentinfo 地标
<ul>/<ol>/<li> list / listitem 列表语义、条目计数
<label htmlFor> 关联控件、点击聚焦
<table>/<th> table / columnheader 行列关系

自研控件 → 必需 ARIA

控件 role 必需状态/属性 备注
开关 / toggle (button 即可省 role) aria-pressed={bool} 优先用 <button>
复选 toggle checkbox aria-checked={bool} tabindex=0 原生 <input type=checkbox> 更佳
tablist 容器 tablist aria-orientation
tab 项 tab aria-selected={bool} aria-controls={panelId}
tabpanel tabpanel aria-labelledby={tabId}
下拉菜单触发器 button aria-haspopup="menu" aria-expanded={bool}
菜单 / 菜单项 menu / menuitem
模态对话框 dialog aria-modal="true" aria-labelledby antd Modal 自带
提示/警告条 alertaria-live="assertive" 打断式播报
异步更新区 aria-live="polite" 不打断,读完当前再播
进度 progressbar aria-valuenow/min/max
禁用态 原生用 disabled;ARIA 控件用 aria-disabled

图片 alt 决策

图片用途 alt 写法
传达信息(图表/头像) alt="月度营收柱状图" 描述信息
纯装饰(背景纹理/分隔图标) alt=""(空串,读屏跳过)
可点图片链接 alt 写目的地,不写「图片」
图标按钮里的图标 图标 aria-hidden,名给外层 aria-label

label 关联三法

方式 写法 适用
显式 htmlFor <label htmlFor="id"> + <input id="id"> 自研控件首选
包裹 <label>姓名<input/></label> label 与控件相邻
aria-label <input aria-label="搜索"> 无可见 label 时(如纯图标搜索框)
aria-labelledby aria-labelledby="titleId" 引用已有可见文本作名

antd Form.Item label="姓名" 自动生成 htmlFor 并关联子控件,不要再手写 label

live region 取值

取值 行为 用途
off 不播报 默认
polite 读完当前内容再播 列表刷新、轮询结果、表单提示
assertive 立即打断播报 错误、超时等紧急信息(等价 role="alert"