全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-17 12 分钟 ✍️ juanwangdev

ARIA角色与属性

ARIA 是 W3C 标准,为 HTML 元素添加语义化属性,弥补原生 HTML 的语义不足。

ARIA 三大类

类别属性前缀用途
角色role定义元素的功能类型
状态aria-state描述当前状态(动态变化)
属性aria-property描述元素特性(相对静态)

role 角色

文档结构角色

角色说明原生替代
article文章内容<article>
section内容分区<section>
navigation导航区域<nav>
main主内容区<main>
header页眉<header>
footer页脚<footer>
banner页面横幅<header>
contentinfo内容信息<footer>

交互组件角色

角色说明用途
button按钮自定义按钮元素
link链接自定义链接元素
checkbox复选框自定义复选框
radio单选框自定义单选框
slider滑块自定义滑块
tab标签页标签页组件
tablist标签列表标签页容器
tabpanel标签面板标签页内容
menu菜单菜单容器
menuitem菜单项菜单内选项
dialog对话框模态框
alertdialog警告对话框确认类对话框
modal模态模态状态
tooltip提示框提示信息
combobox组合框下拉选择
listbox列表框选项列表
option选项列表选项

使用原则

HTML
<!-- 原生标签优先 -->
<button>按钮</button>  <!-- 不需要 role="button" -->

<!-- 自定义组件需要 role -->
<div role="button" tabindex="0" aria-label="按钮">按钮</div>

<!-- 原生标签无法表达时补充 -->
<nav aria-label="主导航">...</nav>  <!-- 区分多个nav -->

aria 状态属性

状态类(动态变化)

属性说明
aria-expandedtrue/false展开/折叠状态
aria-selectedtrue/false选择状态
aria-checkedtrue/false/mixed检查状态
aria-pressedtrue/false/mixed按下状态
aria-disabledtrue/false禁用状态
aria-hiddentrue/false隐藏状态
aria-busytrue/false加载中状态
aria-invalidtrue/false验证失败
HTML
<!-- 折叠面板 -->
<button aria-expanded="false" aria-controls="panel1">
  展开详情
</button>
<div id="panel1" aria-hidden="true">内容</div>

<!-- 标签页 -->
<div role="tablist">
  <button role="tab" aria-selected="true">标签1</button>
  <button role="tab" aria-selected="false">标签2</button>
</div>

<!-- 复选框模拟 -->
<div role="checkbox" aria-checked="false" tabindex="0">
  选项
</div>

aria 属性类

关系属性

属性说明
aria-label元素标签文本
aria-labelledby关联标签元素ID
aria-describedby关联描述元素ID
aria-controls控制的目标元素ID
aria-owns拥有的子元素ID
aria-activedescendant当前活动后代ID
HTML
<!-- aria-label 直接标签 -->
<button aria-label="关闭">×</button>

<!-- aria-labelledby 引用标签 -->
<h2 id="title">设置面板</h2>
<div role="dialog" aria-labelledby="title">...</div>

<!-- aria-describedby 引用描述 -->
<label for="password">密码</label>
<input id="password" aria-describedby="hint">
<small id="hint">至少8位字符</small>

<!-- aria-controls 关联控制 -->
<button aria-controls="menu" aria-expanded="false">
  菜单
</button>
<ul id="menu" role="menu">...</ul>

信息属性

属性说明
aria-current当前项标记
aria-live动态更新区域
aria-relevant更新内容类型
aria-atomic整体更新
aria-haspopup有弹出菜单
aria-modal是否模态
HTML
<!-- aria-current 当前项 -->
<nav aria-label="面包屑">
  <a aria-current="page">当前页</a>
</nav>

<!-- aria-live 动态内容 -->
<div aria-live="polite">消息更新区域</div>

<!-- aria-haspopup 弹出菜单 -->
<button aria-haspopup="menu">打开菜单</button>

aria-live 值

说明
off不播报(默认)
polite空闲时播报
assertive立即播报

常用组件示例

模态对话框

HTML
<div
  role="dialog"
  aria-modal="true"
  aria-labelledby="dialog-title"
  aria-describedby="dialog-desc"
>
  <h2 id="dialog-title">确认操作</h2>
  <p id="dialog-desc">确定要删除此内容吗?</p>
  <button>确认</button>
  <button>取消</button>
</div>

标签页组件

HTML
<div class="tabs">
  <div role="tablist" aria-label="设置标签页">
    <button
      role="tab"
      aria-selected="true"
      aria-controls="panel-general"
      id="tab-general"
    >
      通用设置
    </button>
    <button
      role="tab"
      aria-selected="false"
      aria-controls="panel-privacy"
      id="tab-privacy"
    >
      隐私设置
    </button>
  </div>

  <div
    role="tabpanel"
    id="panel-general"
    aria-labelledby="tab-general"
  >
    通用设置内容
  </div>

  <div
    role="tabpanel"
    id="panel-privacy"
    aria-labelledby="tab-privacy"
    hidden
  >
    隐私设置内容
  </div>
</div>

下拉菜单

HTML
<button
  aria-haspopup="menu"
  aria-expanded="false"
  aria-controls="dropdown-menu"
>
  更多操作
</button>

<ul
  id="dropdown-menu"
  role="menu"
  aria-label="操作菜单"
  hidden
>
  <li role="menuitem">
    <a href="#">编辑</a>
  </li>
  <li role="menuitem">
    <a href="#">删除</a>
  </li>
  <li role="separator"></li>
  <li role="menuitem">
    <a href="#">分享</a>
  </li>
</ul>

使用原则

text
ARIA使用原则:
1. 原生HTML优先,ARIA补充不足
2. 不改变元素行为,仅添加语义
3. 状态属性需JavaScript动态更新
4. 所有交互组件需键盘支持
5. tabindex="0"使非交互元素可聚焦

注意:ARIA 只添加语义,不改变元素行为。自定义组件需自行实现键盘交互和状态管理。

要点总结

  • 原生 HTML 标签优先,ARIA 仅补充不足
  • role 定义元素功能类型
  • aria-* 状态需 JavaScript 动态更新
  • aria-labelledby/aria-describedby 关联标签和描述
  • 自定义交互组件必须支持键盘操作

📝 发现内容有误?点击此处直接编辑

← 上一篇 HTML链接与脚本标签
下一篇 → JSON-LD
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库