You need to enable JavaScript to run this app. WordPress移动端与平板端全屏菜单CSS调试问题求助
优惠活动
大模型
产品
解决方案
定价
更多

WordPress移动端与平板端全屏菜单CSS调试问题求助

Divi全屏移动菜单问题实操修复方案

一、解决关闭按钮被遮挡、无法正常点击的问题

之前反复调整z-index都没效果,根本不是数值设得不够大:你只给“MENU”文字的伪元素设了最高层级,但整个装着汉堡/X按钮的父容器,已经被展开的全屏菜单压在下面了。这种情况下不管给伪元素设多大的z-index,都跳不出父容器的层叠范围,自然会被遮罩挡住。
需要新增/替换以下CSS规则,把固定层叠顺序调整为从下到上:页面内容 → 全屏菜单 → 关闭按钮:

/* 全屏菜单层级:比页面内容高,比关闭按钮低 */
.et_mobile_menu {
    z-index: 99998 !important;
    /* 删掉原代码里没用的负边距,避免菜单右侧漏出视口 */
    margin-left: 0 !important;
}

/* 关闭按钮容器层级:永远比全屏菜单高一级,不会被遮挡 */
.et_mobile_nav_menu,
#et_mobile_nav_menu,
.mobile_nav.opened .mobile_menu_bar {
    position: relative;
    z-index: 99999 !important;
}

调整后X按钮会永远停在最顶层,不会被菜单面板盖住,点击热区也不会被穿透。

二、解决菜单展开时页面可随意滚动的问题

需要搭配少量CSS和极轻量的原生JS,实现全端(手机、平板)的滚动锁定:菜单打开时用户只能浏览菜单内容,没法滑动看下方的页面;关闭菜单后自动回到打开前的滚动位置,不会突然跳回页面顶部。

第一步:添加滚动锁定基础CSS

/* 菜单展开时触发的页面锁定样式 */
body.mobile-menu-locked {
    overflow: hidden !important;
    touch-action: none !important; /* 兼容iOS、安卓端的触摸滑动拦截 */
    position: fixed !important;
    width: 100% !important;
    /* 锁定时保留当前滚动位置,避免页面瞬间跳顶 */
    top: calc(var(--menu-scroll-pos, 0px) * -1);
}

第二步:添加极简状态监听JS

把这段JS加到主题的自定义页脚代码区域即可,不需要依赖jQuery:

// 监听移动菜单的状态变化,自动切换滚动锁定
const menuObserver = new MutationObserver(() => {
    const mobileNavRoot = document.querySelector('.mobile_nav');
    if (!mobileNavRoot) return;
    const isMenuOpened = mobileNavRoot.classList.contains('opened');

    if (isMenuOpened) {
        // 记录打开菜单时的页面滚动位置
        const currentScrollY = window.scrollY;
        document.documentElement.style.setProperty('--menu-scroll-pos', currentScrollY + 'px');
        // 给body加锁定类,禁止滚动
        document.body.classList.add('mobile-menu-locked');
    } else {
        // 解除锁定
        document.body.classList.remove('mobile-menu-locked');
        // 恢复到打开菜单前的滚动位置
        const savedScrollPos = parseInt(document.documentElement.style.getPropertyValue('--menu-scroll-pos')) || 0;
        window.scrollTo(0, savedScrollPos);
    }
});

// 绑定菜单节点的监听
const navNode = document.querySelector('.mobile_nav');
if (navNode) {
    menuObserver.observe(navNode, {
        attributes: true,
        attributeFilter: ['class']
    });
}

现有代码的小优化提醒

  • 原代码中给Divi3场景下的“MENU”文字设置的bottom:30px定位有误,会把文字飘在按钮下方30px的位置,建议改成和汉堡按钮垂直居中对齐,保持视觉统一
  • 原代码里min-width:100vw的设置可以保留,配合修正后的0边距,刚好实现完全占满视口宽度的全屏效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 08:06:04