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

求助:实现点击时切换Span式hamburger menu的颜色(黑白色互转)

实现汉堡菜单点击切换颜色的方案

你不需要额外修改核心JavaScript逻辑,利用现有的active类切换就能实现颜色变化,先帮你修复代码里的一个关键小错误:

1. 修正JavaScript的选择器错误

你代码里的document.querySelector(".nav.link")是错误写法,应该用document.querySelectorAll(".nav-link")获取所有导航链接,否则点击菜单选项无法关闭菜单。修正后的JS代码:

const hamburger = document.querySelector(".hamburger");
const navMenu = document.querySelector(".nav-menu");

hamburger.addEventListener("click", () => {
  hamburger.classList.toggle("active");
  navMenu.classList.toggle("active");
});

// 修正选择器并获取所有导航链接
document.querySelectorAll(".nav-link").forEach((n) =>
  n.addEventListener("click", () => {
    hamburger.classList.remove("active");
    navMenu.classList.remove("active");
  })
);

2. 添加CSS实现颜色切换

在现有CSS基础上,给激活状态的汉堡菜单添加白色bar样式即可。当菜单打开时hamburger会带上active类,此时bar自动变白色;关闭时active类移除,bar恢复黑色:

/* 保留原有.bar样式 */
.bar {
  display: block;
  width: 25px;
  height: 3px;
  margin: 5px auto;
  -webkit-transition: all 0.3s ease-in-out;
  transition: all 0.3s ease-in-out;
  background-color: black;
}

/* 新增激活状态的白色样式 */
.hamburger.active .bar {
  background-color: white;
}

完整可运行代码示例

HTML

<nav id="nav" class="navbar">
          <ul class="nav-menu">
            <li id="current" class="nav-item">
              <a
                href="file:///C:/Users/.../index.html"
                class="nav-link"
                >Home</a
              >
            </li>
            <li>
              <a
                href="file:///C:/Users/.../about.html"
                class="nav-link"
                >About</a
              >
            </li>
          </ul>
          <div class="hamburger">
            <span class="bar"></span>
            <span class="bar"></span>
            <span class="bar"></span>
          </div>
        </nav>

CSS

.hamburger {
  display: none;
  cursor: pointer;
}

.bar {
  display: block;
  width: 25px;
  height: 3px;
  margin: 5px auto;
  -webkit-transition: all 0.3s ease-in-out;
  transition: all 0.3s ease-in-out;
  background-color: black;
}

/* 激活状态的白色bar */
.hamburger.active .bar {
  background-color: white;
}

@media (max-width: 1000px) {
  .hamburger {
    display: block;
  }

  .hamburger.active .bar:nth-child(2) {
    opacity: 0;
  }
  .hamburger.active .bar:nth-child(1) {
    transform: translateY(8px) rotate(45deg);
  }
  .hamburger.active .bar:nth-child(3) {
    transform: translateY(-8px) rotate(-45deg);
  }

  .nav-menu {
    position: fixed;
    left: -100%;
    top: 0px;
    gap: 0;
    flex-direction: column;
    background-color: black;
    width: 100%;
    text-align: center;
  }

  .nav-item {
    margin: 16px 0;
    display: flex;
    flex-direction: column;
  }

  .nav-menu.active {
    left: 0;
  }

  .menu a {
    color: white;
  }
}

JavaScript

const hamburger = document.querySelector(".hamburger");
const navMenu = document.querySelector(".nav-menu");

hamburger.addEventListener("click", () => {
  hamburger.classList.toggle("active");
  navMenu.classList.toggle("active");
});

document.querySelectorAll(".nav-link").forEach((n) =>
  n.addEventListener("click", () => {
    hamburger.classList.remove("active");
    navMenu.classList.remove("active");
  })
);

这样修改后,点击汉堡菜单时,三个bar会随着active类的切换自动在黑色和白色之间变化,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:55:37