抽屉容器必须用 包裹,因其是唯一被所有主流屏幕阅读器识别为导航区域的语义元素;transform: translateX(-100%) 比 left: -300px 更可靠;遮罩层须与抽屉同级且独立定位;移动端滚动锁定应使用 position: fixed 配合动态 top 值,而非仅 overflow: hidden。

抽屉容器必须用 包裹,不能只用
浏览器对语义化结构有隐式行为:没包在 里的侧边栏,Safari iOS 会跳过焦点、忽略 aria-expanded 切换,甚至不触发 transform 动画。这不是 bug,是可访问性规范的强制约束。
常见错误写法:... —— 即使加了 role="navigation" 也不如原生 可靠。
-
是唯一被所有主流屏幕阅读器识别为“导航区域”的语义元素
- 键盘 Tab 焦点进入后,会自动从第一个可聚焦子元素开始,无需额外
tabindex
- 配合
aria-label="主菜单",能明确告诉辅助技术这是什么
transform: translateX(-100%) 比 left: -300px 更稳
用像素值写死 left: -300px 在响应式场景下极易失效:小屏宽度不足 300px 时,面板根本移不出视口;大屏下又可能留白太多。而 translateX(-100%) 始终相对于自身宽度计算,不依赖具体数值。
但要注意:必须搭配 position: fixed 或 absolute,否则 transform 会把页面其他内容挤动。
- 隐藏态:
transform: translateX(-100%);
- 展开态:
transform: translateX(0);
- 过渡声明必须写在基础类上(如
.drawer),不能只写在 .drawer-open 里
- 旧版 iOS Safari 对
translateX(-100%) 渲染异常时,可用 left: -100vw 作兜底(非替代)
遮罩层
浏览器对语义化结构有隐式行为:没包在 里的侧边栏,Safari iOS 会跳过焦点、忽略 aria-expanded 切换,甚至不触发 transform 动画。这不是 bug,是可访问性规范的强制约束。
常见错误写法: —— 即使加了 role="navigation" 也不如原生 可靠。
-
是唯一被所有主流屏幕阅读器识别为“导航区域”的语义元素 - 键盘 Tab 焦点进入后,会自动从第一个可聚焦子元素开始,无需额外
tabindex - 配合
aria-label="主菜单",能明确告诉辅助技术这是什么
transform: translateX(-100%) 比 left: -300px 更稳
用像素值写死 left: -300px 在响应式场景下极易失效:小屏宽度不足 300px 时,面板根本移不出视口;大屏下又可能留白太多。而 translateX(-100%) 始终相对于自身宽度计算,不依赖具体数值。
但要注意:必须搭配 position: fixed 或 absolute,否则 transform 会把页面其他内容挤动。
- 隐藏态:
transform: translateX(-100%); - 展开态:
transform: translateX(0); - 过渡声明必须写在基础类上(如
.drawer),不能只写在.drawer-open里 - 旧版 iOS Safari 对
translateX(-100%)渲染异常时,可用left: -100vw作兜底(非替代)
遮罩层
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











