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

移动端Hamburger菜单点击导航链接后无法自动关闭问题求助

移动端汉堡菜单点击导航链接后无法自动关闭的解决方法

问题说明

桌面端导航为横向布局,移动端切换为汉堡菜单,基础展开/收起功能正常,但点击导航链接后菜单不会自动关闭,遮挡页面内容。

解决思路

当前菜单的显示/隐藏完全依赖#check复选框的checked状态,点击汉堡按钮会切换该状态,但导航链接未绑定切换状态的逻辑。只需给每个导航链接添加点击事件,在移动端(汉堡按钮可见时)将复选框的checked状态设为false即可。

实现步骤

  1. 添加点击事件逻辑
    在HTML的<body>末尾插入以下JavaScript代码,给所有导航链接绑定关闭菜单的逻辑:

    const navLinks = document.querySelectorAll('.nav-list li a');
    const checkBox = document.getElementById('check');
    
    navLinks.forEach(link => {
      link.addEventListener('click', () => {
        // 仅在移动端分辨率下执行关闭操作
        if (window.innerWidth < 1100) {
          checkBox.checked = false;
        }
      });
    });
    
  2. 可选:窗口尺寸切换优化
    若用户在移动端和桌面端之间调整窗口大小,可添加窗口监听确保菜单状态正常:

    window.addEventListener('resize', () => {
      // 切换到桌面端时自动关闭菜单
      if (window.innerWidth >= 1100) {
        checkBox.checked = false;
      }
    });
    

修改后的完整代码

CSS(无需改动)

nav {
height: 75px;
width: 100%;
background-color: #171c1f;
display: flex;
justify-content: space-between;
z-index: 99;
}
.logo-container {
display: flex;
align-items: center;
width: auto;
margin: 0;
}
.logo-txt {
font-size: 35px;
line-height: 75px;
padding-left: 30px;
font-family: 'Signika Negative', sans-serif;
font-weight: bold;
color: rgb(255, 255, 255);
cursor: pointer;
}
.nav-list {
position: fixed;
width: 100%;
height: 0vh;
top: 75px;
background: #4a499e;
float: right;
text-align: center;
transition: all .5s;
z-index: 2;
}
.nav-list li {
opacity: 0;
line-height: 30px;
margin: 50px 0;
transition: all .5s;
}
.nav-list li a {
color: #fff;
font-size: 27.5px;
text-transform: uppercase;
text-decoration: none;
font-weight: 900;
transition: .5s;
}
.nav-list li a.active,.nav-list li a:hover{
color: #00b1f7;
transition: 0.5s;
}
.hamburger-btn {
display: block;
font-size: 30px;
color: white;
float: right;
line-height: 75px;
margin-right: 40px;
cursor: pointer;
}
#check {
display: none;
}
#check:checked ~ .nav-list {
height: 100vh;
}
#check:checked ~ .nav-list li {
opacity: 1;
}
@media only screen and (min-width: 1100px) {
nav{
height: 100px;
background-color: transparent;
}

.hamburger-btn{
display: none;
}

.nav-list {
position: relative;
height: 100px;
top: 0;
background: none;
float: right;
text-align: right;
margin-right: 25px;
transition: none;
text-shadow: 2px 2px 3px #00b1f7;
}

.nav-list li a {
color: rgb(0, 0, 0);
font-size: 27.5px;
text-transform: uppercase;
text-decoration: none;
font-weight: 900;
}

.nav-list li{
display: inline-block;
opacity: 1;
line-height: 100px;
margin: 0 20px;
transition: none;
}

.nav-list li a.active, .nav-list li a:hover {
color: #00b1f7;
text-shadow: 1px 1px #000000;
}

.logo-txt {
font-size: 35px;
line-height: 75px;
padding-left: 30px;
font-family: 'Signika Negative', sans-serif;
font-weight: bold;
color: rgb(0, 0, 0);
cursor: pointer;
} 
}

HTML(添加JavaScript代码)

<header>
    <nav>
        <div class="logo-container">
            <label class="logo-txt">Autirock</label>
        </div>
        <input type="checkbox" id="check">
        <label for="check" class="hamburger-btn">
            <i class="fas fa-bars"></i>
        </label>
        <ul class="nav-list">
            <li><a class="active" href="#banner">DOMŮ</a></li>
            <li><a href="#sluzby-a-pomucky">SLUŽBY A POMŮCKY</a></li>
            <li><a href="#">O MNĚ</a></li>
            <li><a href="#cenik-a-sluzby">CENÍK</a></li>
            <li><a href="#kontakt">KONTAKT</a></li>
        </ul>
    </nav>
</header>

<script>
const navLinks = document.querySelectorAll('.nav-list li a');
const checkBox = document.getElementById('check');

navLinks.forEach(link => {
  link.addEventListener('click', () => {
    if (window.innerWidth < 1100) {
      checkBox.checked = false;
    }
  });
});

// 可选:窗口尺寸切换时自动同步菜单状态
window.addEventListener('resize', () => {
  if (window.innerWidth >= 1100) {
    checkBox.checked = false;
  }
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:45:28