右侧滑出菜单需用transform: translatex()配合position: fixed实现,避免重排;结构上抽屉须与body平级、设top:0/right:0/height:100vh;显隐通过class切换而非内联style;打开时禁用body水平滚动并处理滚动穿透。

右侧滑出菜单不是加个 div 往右一推就完事——关键在定位方式、显隐逻辑和滚动行为三者咬合。用 transform: translateX() 是当前最稳妥的方案,比操作 right 或 margin-right 更少触发重排,动画也更顺。
HTML 结构必须满足 fixed 定位 + 独立文档流
右侧抽屉容器不能是 static 或 relative,否则会被其他元素挤压或影响布局流。它得脱离文档流,且覆盖在主体内容之上:
-
position: fixed是首选;position: absolute仅在父容器明确设position: relative且高度可控时可用 - 必须设
top: 0、right: 0、height: 100vh(不是100%,避免父高不足导致截断) - 宽度单独定义,如
width: 320px;别依赖max-width或flex自适应,容易在小屏上撑破 - 不要把抽屉塞进
main或article内部——它得和body平级,否则 z-index 和滚动控制会失控
CSS 显隐切换必须用 class 控制 transform,而非内联 style
JS 直接写 element.style.transform = 'translateX(0)' 看似快,但破坏可维护性,也难加动画曲线或响应式断点。正确做法是交由 class 控制:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 初始状态:抽屉加
class="drawer drawer-closed",CSS 中定义.drawer-closed { transform: translateX(100%); } - 展开状态:切到
.drawer-open,定义.drawer-open { transform: translateX(0); } - 过渡动画统一写在
.drawer上:transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);(比ease更有弹性) - 绝对不要用
display: none切换——它会让transition失效;也别用visibility: hidden,键盘焦点仍能进入,对无障碍不友好
JavaScript 只负责 class 切换,但要防快速连点和冒泡干扰
按钮点击后抽屉卡在半途、点菜单内部链接却关闭了抽屉——这类问题几乎都出在事件控制上:
- 绑定按钮 click 时,用
drawer.classList.toggle('drawer-open'),别写if/else手动判断 - 监听
document点击关闭时,必须在抽屉和按钮的click处理中调用e.stopPropagation(),否则点菜单项也会触发关闭 - 快速多次点击按钮会导致
transition堆叠,应在transitionstart时给按钮加pointer-events: none,结束后再恢复 - 移动端需确保按钮有
cursor: pointer和touch-action: manipulation,否则 iOS Safari 可能延迟响应
body 滚动禁用和抽屉内滚动必须分开处理
右侧抽屉打开时,背景页面不该滚动,但抽屉自己得能上下滑动——这是最容易翻车的一环:
- 抽屉打开时,给
body加overflow-x: hidden(不是overflow: hidden,否则会禁掉垂直滚动) - 抽屉容器自身设
overflow-y: auto,但必须配合max-height: 100vh,否则长内容会溢出视口 - iOS 上常出现“滚动穿透”,即抽屉里滚到底后,背景页跟着动。解决方法是:抽屉打开时给
body加position: fixed; top: -${window.scrollY}px,关闭时还原scrollTop - 别指望
overscroll-behavior: contain全面兼容——它在 Safari 15.4+ 才稳定支持,老版本仍需手动拦截
真正麻烦的不是让菜单滑出来,而是它滑出来之后——是否挡住焦点、能否被屏幕阅读器感知、滚动时是否撕裂、关掉后页面是否回到原位置。这些细节没对齐,用户第一眼就觉得“卡”“怪”“不像原生”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










