[HTML 5] aria-live

, 本文介绍了一个使用aria-live属性的实例,此属性用于当元素的内容发生变化时通知屏幕阅读器。通过不同值设置(off、polite 和 assertive),演示了如何在用户界面上实时更新信息,特别强调了无障碍设计的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"aria-live" is a method to tell the information to the screen reader once value changed.

aria-live has three value:

1. off: nothing will happen

2. polite: wait user finish current action, then tell user, cover most use cases.

3. assertive: interpute whatever users are current doing.

<form action="">
        <span class="label" id="currValue">Current value</span>
        <span aria-describedby="help" tabindex="0" role="spinbutton" aria-labelledby="currValue">
          <span aria-live="assertive" id="number">90</span>
          <button tabindex="-1" type="button" id="add" title="add 10" aria-controls="number">Add</button>
          <button tabindex="-1" type="button" id="subtract" title="subtract 10" aria-controls="number">Subtract</button>
        </span>
        <div id="help">
          Use "add" and "subtract" buttons, or up and down arrows, to add or subtract 10, respectively.
        </div>
      </form>

 

DEMO

<think>根据用户的问题,他想了解aria-selected的用法、示例和实现细节。首先需要回顾引用的相关内容,特别是引用1和引用3中关于aria-selected的信息。从引用1和引用3中,可以提取以下关键点:-aria-selected属性用于指示当前选中的项。-在引用1中,有一个例子:<h3id="tab1"aria-selected="true"aria-controls="panel1"aria-expanded="true"role="tab"tabindex="0">姑娘们</h3>-引用3中也有类似示例。此外,在引用4中,展示了一个使用Proxy对象来动态设置aria-selected属性的代码示例。这段代码在选中项变化时,将之前选中项的aria-selected设为'false',新选中项设为'true'。因此,回答应该包括:1.说明aria-selected的作用:用于指示元素是否被选中,通常用于具有选择功能的组件(如选项卡、列表项等)。2.用法:介绍其值(true/false),以及如何设置。3.示例:提供HTML结构示例,如选项卡或列表项。4.实现细节:可以结合引用4中的代码,解释如何动态管理aria-selected属性。考虑到用户可能需要实际代码示例,可以写一个简化的例子。同时,确保结构清晰,分点说明。最后,按照系统级指令的要求,使用中文,添加引用标识([^1][^3][^4]),并生成相关问题。</think> ### `aria-selected='true'` 的用法、示例与实现细节 #### 1. **作用与用法** - **核心功能**:表示元素在可选择集合(如选项卡、列表项)中的选中状态 - **属性值**: - `true`:元素当前已被选中 - `false`:元素未被选中 - `undefined`(默认):状态未知 - **适用场景**: - 选项卡切换组件 (`role="tab"`) - 多选列表项 (`role="option"`) - 自定义选择控件 (需配合`role`属性) - **使用原则**: - 需搭配恰当的 ARIA 角色(如 `role="tab"`) - 必须在交互时动态更新状态 - 视觉样式需与 ARIA 状态同步 #### 2. **HTML 实现示例** ```html <!-- 选项卡组件 --> <div role="tablist"> <button id="tab1" role="tab" aria-selected="true" aria-controls="panel1" tabindex="0">已选中标签</button> <button id="tab2" role="tab" aria-selected="false" aria-controls="panel2" tabindex="-1">未选中标签</button> </div> <!-- 对应内容面板 --> <div id="panel1" role="tabpanel" aria-labelledby="tab1">已选内容区</div> <div id="panel2" role="tabpanel" aria-labelledby="tab2" hidden>未选内容区</div> <!-- 多选列表 --> <ul role="listbox"> <li role="option" aria-selected="true">已选项1</li> <li role="option" aria-selected="false">选项2</li> </ul> ``` > 此结构实现: > - `aria-selected="true"` 表示当前激活选项 > - `aria-controls` 关联对应内容区域 > - `tabindex="-1"` 限制不可选中项的聚焦[^1][^3] #### 3. **JavaScript 动态管理** ```javascript // 选项卡切换逻辑(示例) const tabs = document.querySelectorAll('[role="tab"]'); tabs.forEach(tab => { tab.addEventListener('click', () => { // 清除所有选中状态 tabs.forEach(t => { t.setAttribute('aria-selected', 'false'); t.setAttribute('tabindex', '-1'); }); // 设置当前选中状态 tab.setAttribute('aria-selected', 'true'); tab.setAttribute('tabindex', '0'); // 关联内容面板显示 const panelId = tab.getAttribute('aria-controls'); document.querySelectorAll('[role="tabpanel"]').forEach(panel => { panel.hidden = (panel.id !== panelId); }); }); }); ``` > 特性说明: > - 动态修改 `aria-selected` 和 `tabindex` > - 配合 `hidden` 属性控制内容区显示 > - 确保聚焦顺序与选中状态一致[^4] #### 4. **实现关键细节** 1. **状态同步**: - 每次用户交互需同时更新: ```js // 正确做法(同步视觉与ARIA状态) newElement.setAttribute('aria-selected', 'true'); newElement.classList.add('active-style'); ``` 2. **键盘导航支持**: - `←/→` 键切换选项卡 - `Enter/Space` 激活选项 - 需配合 `tabindex` 管理焦点顺序 3. **辅助设备反馈**: - `aria-selected` 变更时触发屏幕阅读器通知 - 建议添加 `aria-live` 区域提升实时性(如引用2的 `aria-live="assertive"`) 4. **组合属性**: ```html <!-- 完整选项卡示例 --> <div role="tab" aria-selected="true" aria-controls="contentPanel" aria-labelledby="tabLabel" tabindex="0"> ``` - `aria-controls`:关联受控内容区 - `aria-labelledby`:提供可访问名称 > 重要提示:在自定义组件中,需完全实现原生控件的交互逻辑(焦点管理、键盘支持等),避免仅做视觉样式变化[^3][^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值