role="alert" 是语义化角色,隐式启用 aria-live="assertive" 和 aria-atomic="true",适用于需立即打断用户的紧急通知;aria-live="assertive" 仅控制播报行为,需手动设置 aria-atomic 才能确保完整朗读,适合无语义需求的定制告警。
role="alert" 和 aria-live="assertive" 都用于让屏幕阅读器立即播报关键信息,但它们在语义、默认行为和使用逻辑上存在明确分工。
它不只是一个提示方式,而是明确告诉辅助技术:“这是一个需要用户立刻注意的紧急通知”。浏览器和屏幕阅读器(如 NVDA、VoiceOver)会将 role="alert" 自动映射为 aria-live="assertive",并常附加额外提示机制——比如播放提示音、高亮焦点、或强制中断当前朗读。
aria-live,加了也不会出错,但属于冗余aria-atomic="true",确保整条消息被完整播报,避免只读一半造成歧义它只声明“这个区域的内容更新要立即播报”,不带任何语义含义。也就是说,它不会自动触发提示音,也不保证整段内容被完整朗读——除非你额外设置 aria-atomic="true" 或 aria-relevant="all"。
aria-live="assertive" 而没设 aria-atomic,屏幕阅读器可能只读新增文字,漏掉上下文绝大多数面向用户的紧急通知,直接用 role="alert" 就够了。它简洁、标准、兼容性好,开发者不用操心底层细节。
role="alert"
aria-live="assertive" + aria-atomic="true",因它不属于用户操作流中的“交互反馈”,而属系统状态通告role="alert" 显示“加载中…”或“保存成功”,这类非紧急状态应改用 role="status" 或 aria-live="polite"
下面两个例子在多数屏幕阅读器中效果一致,但第一种更推

邮箱格式不正确
邮箱格式不正确
不推荐:邮箱格式不正确(缺少 atomic,可能只读“不正确”)