aside仅表语义不负责定位,适用前提为与主内容强主题关联且移除不影响主逻辑;全局导航、页脚链接等应使用nav或div+role;css布局推荐flex而非float/absolute,隐藏时禁用display:none。

不能直接用 aside 把导航信息“放”到侧边——它只负责语义,不负责定位。 真正起作用的是 CSS;而是否该用 aside,取决于内容和主文的逻辑关系,不是位置。
什么情况下不该用 aside 放导航
全局导航菜单、顶部主导航栏、页脚链接区、工具栏按钮组——这些都不是 aside 的适用场景。它们要么是页面骨架(该用 nav),要么是功能容器(该用 div + role="region")。
- 把全站分类导航塞进
aside:语义错配,读屏器会误读为“当前文章的补充”,实际却是跨页面跳转入口 - 在博客列表页右侧放“热门标签云”,但标签和当前列表无主题关联:属于弱相关甚至无关,应改用
section或带aria-label的div - 用
aside包裹筛选控件(如日期范围选择器、状态开关):这是交互区域,不是旁支信息,aside无法传达操作意图
哪些导航类内容才配得上 aside
必须满足两个硬条件:① 和当前主内容强主题关联;② 移除后不影响主逻辑完整性。
- 技术文档中,
aside里放当前章节的「快速锚点导航」:<h3>本节结构</h3> <ul><li>@#@#@#@#@#@#@#@#@#@0</li></ul> - 长篇教程页右侧的「当前章节目录」,且目录项全部来自同一
article内部 - 某篇 API 文档段落旁嵌入的
aside,仅列出该函数相关的其他参数说明链接(非全站 API)
用 Flex 布局让 aside 真正靠右,而不是“看起来像”
别用 float: right 或 position: absolute ——前者易塌陷,后者会让 aside 脱离语义流,读屏器可能跳过或乱序。
- 父容器设
display: flex,并确保aside和主内容(如main或article)是同级子元素 -
aside推荐用flex: 0 0 260px而非width: 260px,防内容溢出 - 移动端断点必须加:
@media (max-width: 768px) { .layout { flex-direction: column; } },否则侧边栏会挤垮主内容 - 如果
aside在 HTML 结构中写在main前面,但视觉要靠右,就用order: 1控制视觉顺序,而非靠位置欺骗
隐藏小屏下的 aside 时,别真删掉它
设 display: none 是最危险的快捷方式——等于告诉辅助技术和搜索引擎:“这内容不存在”。尤其当里面是法律声明、版权归属或关键提示时,隐藏 = 删除。
- 优先用
order把它挪到main下方,保持 DOM 存在、语义完整 - 若空间实在紧张,可用
visibility: hidden; height: 0; overflow: hidden;实现视觉隐藏但保留可访问性 - 绝对不要在 JS 中动态移除整个
aside节点,除非你已确认服务端有等价 fallback 渲染
真正容易被忽略的点在于:浏览器不关心 aside 在哪,但读屏器和搜索引擎会严格按它在 DOM 中的位置和上下文理解其含义。位置靠右是 CSS 的事,语义靠邻是 HTML 的事——两者不能混为一谈。











