You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

汉堡菜单(Hamburger menu)打开时锁定页面滚动的解决方案咨询

汉堡菜单打开时锁定页面滚动的解决方案

你的菜单通过<input type="checkbox">控制显示状态,这里提供两种实用方案:

方案一:纯CSS实现(无需JS)

利用复选框的:checked伪类,直接给body设置样式锁定滚动,简单高效。

实现代码:

/* 默认允许页面滚动 */
body {
  overflow: auto;
  /* 可选:添加过渡动画,避免页面滚动条消失时的跳动 */
  padding-right: 0;
  transition: padding-right 0.3s ease;
}

/* 复选框被选中(菜单打开)时,锁定body滚动 */
#side-menu:checked ~ body {
  overflow: hidden;
  /* 可选:自动匹配滚动条宽度,防止页面偏移 */
  padding-right: calc(100vw - 100%);
}

注:calc(100vw - 100%)能自动获取当前浏览器的滚动条宽度,完美解决滚动条消失导致的页面跳动问题。

方案二:JavaScript实现(更灵活)

如果需要保留页面滚动位置、或者配合菜单动画使用,用JS监听复选框状态变化更合适:

实现代码:

const menuToggle = document.getElementById('side-menu');
const body = document.body;

menuToggle.addEventListener('change', () => {
  if (menuToggle.checked) {
    // 菜单打开:锁定滚动,记录当前位置
    const scrollTop = window.scrollY;
    body.style.overflow = 'hidden';
    body.style.position = 'fixed';
    body.style.top = `-${scrollTop}px`;
    body.style.width = '100%';
  } else {
    // 菜单关闭:恢复滚动,回到之前的位置
    const scrollTop = parseInt(body.style.top || 0);
    body.style.overflow = '';
    body.style.position = '';
    body.style.top = '';
    window.scrollTo(0, -scrollTop);
  }
});

这个方案能避免菜单关闭后页面跳回顶部的问题,体验更流畅。

额外提示

  • 如果你的头部是固定定位(.header),要确保它的position: fixed属性不会被滚动锁定逻辑影响。
  • 移动端测试时注意:部分浏览器的触摸滚动需要额外处理,上述两种方案基本能覆盖主流场景。

内容的提问来源于stack exchange,提问作者Fernando maciel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:34:57