移动端汉堡菜单居中及点击子菜单不消失问题求助
解决方案
我看了你的代码和站点的移动端问题,两个核心需求咱们一步步来解决:
1. 修复点击子菜单父项时菜单消失的问题
当前的问题出在事件冒泡上:你给#hamburger-menu绑定了点击切换菜单的事件,而#menu是它的子元素,点击菜单里的任何区域都会把事件传递给父容器,触发slideToggle()再次执行,导致菜单收起。
修改你的jQuery代码,添加阻止冒泡的逻辑,或者限制只有点击汉堡图标本身时才切换菜单:
$(document).ready(function() { $('#hamburger-menu').on('click', function (e) { // 仅当点击汉堡的三条杠或者容器空白区域时,才切换菜单 const target = e.target; if(target.id === 'hamburger-menu' || target.classList.contains('bar1') || target.classList.contains('bar2') || target.classList.contains('bar3')){ $("#menu").slideToggle(); } }); // 阻止菜单内所有点击事件冒泡到汉堡容器 $('#menu').on('click', function(e) { e.stopPropagation(); }); });
2. 让汉堡菜单和子菜单项居中显示
现在你的汉堡图标和子菜单没有居中样式,咱们在移动端媒体查询里补充CSS:
@media only screen and (min-device-width : 320px) and (max-device-width : 480px) { /* 保留你原有的CSS代码,新增以下内容 */ /* 让汉堡图标容器居中 */ #hamburger-menu { text-align: center; padding: 1rem 0; /* 给汉堡图标添加上下内边距,避免贴顶 */ } /* 让子菜单项文字居中 */ ul#menu > li > ul.submenu li { text-align: center; } /* 去掉子菜单链接的左侧内边距,确保内容完全居中 */ ul#menu > li > ul.submenu a { padding-left: 0; } }
这样调整后,汉堡图标会在页面顶部居中,子菜单的每一项文字也会完全居中显示,同时点击带子菜单的父项时,菜单不会再意外收起。
额外小建议
- 可以给包含子菜单的父项添加一个小箭头(比如通过CSS伪元素
::after),提示用户这里有下拉内容,提升移动端的交互体验 - 给子菜单的展开/收起添加过渡动画,让界面变化更平滑自然
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

