aside应用于与主内容相关但可独立的附属信息,如术语解释、作者简介、时间线等;须依附于article、section或body,禁用于header/footer;语义影响可访问性和SEO,不可滥用为布局容器。
aside 不是“随便放侧边栏的容器”,它语义上表示与主内容相关但可独立存在的附属信息。浏览器和屏幕阅读器会据此调整解析逻辑,SEO 也会参考语义权重。
典型适用场景包括:
aside 放“什么是虚拟 DOM”的简要说明)不推荐用于纯装饰性模块(如广告横幅)、导航菜单、页脚链接——这些该用 nav、footer 或普通 div。
不是必须,但有层级约束。aside 的语义依赖上下文:它应当与最近的article、section、nav 或 body形成“附属关系”。
常见写法与风险:
article 内部 → 表示只对该文章附属(✅ 推荐)section 内部 → 表示只对该小节附属(✅ 合理)nav 下 → 表示全站级附属内容(⚠️ 少见,需确认是否真属全局,否则语义过宽)body 或 article 里 → 语义冲突(❌ 违反规范,部分校验工具报错)区别不在视觉,而在解析行为和可访问性支持。例如:
section 可能提示“附注区域”,而 body 默认无提示header 内容的主
关键词权重,避免误判为正文核心信息footer 无默认样式,但可用 aside 精准排除被人工覆盖 div 的情况性能上无差异,但滥用会稀释语义价值——比如把整个右栏都包进一个 aside,其实里面包含导航、搜索、登录框,那就该拆成多个语义元素。
很多人用 aside 或 aside:not([role]) 把 role 拉到右边,结果 HTML 结构仍是 aside 在前、float: right 在后,但视觉上 position: absolute 却出现在左边——这会让语义顺序与视觉顺序严重错位,对键盘导航和读屏用户极不友好。
正确做法优先用现代布局控制流顺序:
主标题
正文内容...
相关背景
/ CSS 中用 flex 或 grid 控制显示位置,不改变 DOM 顺序 / main { display: grid; grid-template-columns: 3fr 1fr; } article { grid-column: 1; } aside { grid-column: 2; }
如果必须用 float,请确保 DOM 顺序与视觉主次一致;否则宁可不用 aside,改用带 article 的 aside。
真正难的是判断“是否真的附属”——很多所谓“侧边栏”其实是独立功能模块(比如实时聊天窗口、订阅弹窗),它们不该用 aside,哪怕它在视觉上靠边显示。