role="separator" 仅语义化表示分隔元素,不隐含拖动功能;需添加 tabindex="0"、aria-valuenow/min/max 及 aria-orientation 才支持无障碍拖动,并通过键盘事件和 aria-live 提供实时反馈。

role="separator" 本身不表示可拖动
HTML 的 role="separator" 仅语义化地声明这是一个视觉/逻辑上的分隔元素(如水平线、垂直栏),**不隐含交互能力**。屏幕阅读器会将其读作“separator”或“分隔线”,但不会提示“可拖动”或“按住拖拽调整大小”。若实际支持拖动,必须额外补充无障碍交互信息。
必须配合 tabindex 和 aria-* 属性才能让拖动可感知
要使分隔线对键盘和屏幕阅读器用户真正可用,需手动补全以下三要素:
-
tabindex="0":使其可被键盘聚焦 -
aria-valuenow、aria-valuemin、aria-valuemax:声明当前尺寸值及范围(例如左侧区域宽度占百分比) -
aria-orientation="horizontal"或aria-orientation="vertical":明确拖动方向,影响屏幕阅读器播报(如“水平分隔线,当前位置 60%”)
示例:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
<div role="separator" tabindex="0" aria-orientation="horizontal" aria-valuenow="60" aria-valuemin="20" aria-valuemax="80"></div>
拖动操作必须用 keyboard event 模拟,不能只靠 mousemove
仅监听 mousedown/mousemove 会让键盘用户完全无法操作。正确做法是:
- 监听
keydown:响应ArrowLeft/ArrowRight(水平)或ArrowUp/ArrowDown(垂直)微调位置 - 监听
PageUp/PageDown实现步进式调整(如每次 ±10%) - 用
aria-valuenow动态更新,并触发live region(如aria-live="polite"的隐藏<span></span>)播报变化
role="separator" + 拖动在主流屏幕阅读器中的表现差异
不同组合下播报效果不同,容易漏掉关键信息:
- NVDA + Firefox:默认读出
aria-valuenow值,但若未设aria-orientation,可能只报“separator”,无数值 - JAWS + Chrome:需要
aria-label或aria-labelledby显式说明用途(例如“主内容区与侧边栏分隔线”),否则易被忽略 - VoiceOver(macOS):对
tabindex="0"敏感,但若未实现键盘事件,聚焦后按空格/回车无响应,用户会认为“不可操作”
最常被忽略的是:没有为拖动后的状态变更提供实时语音反馈——哪怕只是简单一句“左侧区域宽度 65%”,也得靠 aria-live 区域触发,而不是等用户再次聚焦才读。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










