应使用 <section> 搭配 aria-label 定义通知区域,如 <section aria-label=” 小组任务奖励发放通知 ”>,因其语义准确、兼容性强;避免误用 <aside> 或 <article>,并配合 aria-live=”polite” 确保无障碍朗读。

HTML 本身不处理“小组任务奖励发放”或“积分到账通知”的业务逻辑,它只负责把这类信息以结构化方式展示出来。所谓“标注”,其实是用语义化标签把通知区域清晰表达给浏览器和辅助工具,同时为后续 JS 控制、CSS 样式、自动化测试留出稳定钩子。
怎么用 <section> 和 aria-label 定义通知区域
直接用 <div> 套文字虽然能显示,但缺乏语义,屏幕阅读器无法识别这是“通知”,JS 也难精准定位。推荐用 <section> 包裹,并通过 aria-label 明确用途:
<section aria-label=" 小组任务奖励发放通知 "> <p> 您已获得 50 积分,已计入账户。</p> </section>
-
aria-label比title更可靠——它强制覆盖可访问性名称,title在移动端常不触发 - 避免用
id="reward-notice"单独标识,因为 ID 需全局唯一,多人协作时容易冲突;优先靠语义标签 + ARIA 组合定位 - 如果页面有多个同类通知(如“积分到账”“任务完成”“审核通过”),用不同
aria-label值区分,别偷懒写成一样的
为什么不用 <aside> 或 <article>
这两个标签有明确语义约束:<aside> 表示与主内容关联弱的补充信息(比如侧边广告、作者简介);<article> 要求内容能独立分发(如一篇博客、一条新闻)。奖励通知是用户操作后的关键反馈,属于主流程一部分,用 <section> 最贴切。
- 误用
<aside>可能让屏幕阅读器跳过,或被某些无障碍工具忽略 - 若硬套
<article>,校验工具(如 axe)会报“Article lacks heading”—— 因为规范要求<article>必须含<h1>–<h6> - 实际项目中,后端模板常输出
<div class="notification">,这时只需加role="region"+aria-labelledby补语义,比改标签更稳妥
JS 动态插入通知时,DOM 更新要带 aria-live
积分到账是异步行为,通知往往由 JS 插入 DOM。若不声明实时性,屏幕阅读器不会朗读新内容。
立即学习 “ 前端免费学习笔记(深入)”;
<section aria-label=" 小组任务奖励发放通知 " aria-live="polite"> <p id="reward-msg"></p> </section>
-
aria-live="polite"适合非中断型通知(如积分到账);紧急提示(如支付失败)才用"assertive" - 不要在 JS 里反复
innerHTML = ……,应先清空再textContent写入,避免 XSS 风险和重复朗读 - Chrome 119+ 对
aria-live的触发更严格:若父容器display: none后再 show,需手动调用element.setAttribute('aria-live', 'polite')重置
真正麻烦的不是写对这几个标签,而是团队里有人顺手删掉 aria-label,说“视觉上看不出区别”;或者后端模板把通知塞进 <span> 里返回,前端懒得重构就用 CSS 强撑样式。这些地方一松懈,通知就等于没发出去——至少对部分用户来说。