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

汉堡菜单标签按钮需双击显示问题求助

解决汉堡菜单二次点击才显示的问题

你的问题确实是CSS的checkbox状态控制与jQuery的DOM显示/隐藏逻辑冲突导致的:

  • 第一次点击label时,checkbox被勾选,CSS通过:checked选择器触发菜单和遮罩显示
  • 点击遮罩#NavDark时,jQuery用hide()给元素加上了display:none,但checkbox的勾选状态并未被取消
  • 第二次点击label时,首先会把checkbox从勾选改为未勾选(此时CSS会触发隐藏,但元素已经被jQuery设为不可见,无视觉变化),再点击一次才会重新勾选checkbox触发显示,所以需要双击。

下面提供两种解决方案,任选其一即可:


方案1:纯CSS实现(推荐,无冲突)

完全去掉jQuery代码,利用checkbox的状态统一控制所有交互逻辑,包括点击遮罩关闭菜单:

修改后代码

HTML

<div class="ButtonMenu">
  <input id='toggle' type='checkbox' />
  <label for='toggle' class="menu-trigger">
    <img src="/img/image 8.png" alt="hamburger icon">
  </label>

  <!-- 把遮罩改成label,关联到checkbox,点击自动取消勾选 -->
  <label for='toggle' id="NavDark"></label>
  <div class='MainMenu'>
    {{ range .Site.Menus.main }}
    <a href="{{ .URL }}" class="navbar-item" title="{{ .Name }}">{{ .Name }}</a>
    {{ end }}
  </div>
</div>

CSS

.ButtonMenu #toggle {
  display: none;
}

.ButtonMenu .menu-trigger {
  font-size: 40px;
  color: #000;
  cursor: pointer;
  z-index: 8;
  display: inline-block !important;
}

.MainMenu {
  position: fixed;
  top: 0;
  width: 320px;
  background-color: #222;
  color: #fff;
  transition: all .4s ease;
  overflow-y: auto;
  height: 100vh;
  box-shadow: 0 0 2px #000;
  z-index: 8;
  opacity: 0;
  right: -320px;
  pointer-events: none; /* 未显示时避免菜单内容干扰点击 */
}

#toggle:checked ~ .MainMenu {
  opacity: 1;
  transform: translateX(-100%);
  pointer-events: auto; /* 显示后恢复点击交互 */
}

#NavDark {
  width: 100%;
  right: 0;
  top: 0;
  height: 100vh;
  position: fixed;
  background-color: rgba(0, 0, 0, .5);
  opacity: 0;
  z-index: -1;
  cursor: pointer;
}

#toggle:checked ~ #NavDark {
  z-index: 7; /* 低于菜单层级,避免遮挡菜单 */
  opacity: 1;
  display: block;
}

方案2:统一用jQuery控制(保留JS逻辑)

如果需要保留jQuery交互,就去掉所有CSS中:checked相关的选择器,完全用JS控制元素状态:

修改后代码

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="ButtonMenu">
  <label id="menu-trigger">
    <img src="/img/image 8.png" alt="hamburger icon">
  </label>

  <div id="NavDark"></div>
  <div class='MainMenu'>
    {{ range .Site.Menus.main }}
    <a href="{{ .URL }}" class="navbar-item" title="{{ .Name }}">{{ .Name }}</a>
    {{ end }}
  </div>
</div>

CSS

.ButtonMenu #menu-trigger {
  font-size: 40px;
  color: #000;
  cursor: pointer;
  z-index: 8;
  display: inline-block !important;
}

.MainMenu {
  position: fixed;
  top: 0;
  width: 320px;
  background-color: #222;
  color: #fff;
  transition: all .4s ease;
  overflow-y: auto;
  height: 100vh;
  box-shadow: 0 0 2px #000;
  z-index: 8;
  opacity: 0;
  right: -320px;
  display: none;
}

/* 用active类控制显示状态 */
.MainMenu.active {
  opacity: 1;
  transform: translateX(-100%);
  display: block;
}

#NavDark {
  width: 100%;
  right: 0;
  top: 0;
  height: 100vh;
  position: fixed;
  background-color: rgba(0, 0, 0, .5);
  opacity: 0;
  z-index: -1;
  display: none;
}

#NavDark.active {
  z-index: 7;
  opacity: 1;
  display: block;
}

JS

$("#menu-trigger").click(function() {
  $(".MainMenu, #NavDark").toggleClass("active");
});

$("#NavDark").click(function() {
  $(".MainMenu, #NavDark").removeClass("active");
});

内容的提问来源于stack exchange,提问作者Nedjma Média

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:57:41