如何实现点击汉堡菜单时切换颜色:展开变白、收起变蓝?
实现汉堡菜单点击颜色切换方案
需求说明
需要实现汉堡菜单的颜色切换逻辑:
- 菜单收起状态:汉堡菜单为蓝色(
var(--clr-primary)) - 菜单展开状态:汉堡菜单变为白色(
var(--clr-secondary)) - 汉堡菜单仅在页面宽度≤600px时显示
修改后的完整代码
HTML(无需修改)
<nav class="nav" id="home"> <a href="#" class="toggle-button"> <span class="bar"></span> <span class="bar"></span> <span class="bar"></span> </a> <div class="navbar-links"> <ul class="nav-list"> <li class="nav-item"><a href="#home" class="nav-link">home</a></li> <li class="nav-item"><a href="#about-me" class="nav-link">about me</a></li> <li class="nav-item"><a href="#services" class="nav-link">services</a></li> <li class="nav-item"><a href="#contact" class="nav-link">contact</a></li> </ul> </div> </nav>
CSS(关键修改)
.nav { display: flex; justify-content: right; align-items: center; background-color: var(--clr-main); } .nav-item { margin-right: 10px; list-style: none; } .nav-link{ font-size: 20px; text-decoration: none; color: var(--clr-secondary); font-weight: var(--fw-bold); display: block; } .nav-list{ display: flex; } .nav-item:hover{ background-color: #00a6ff; } .toggle-button{ position: absolute; top: 18px; right: 1rem; display: none; flex-direction: column; justify-content: space-between; width: 31px; height: 21px; } .toggle-button .bar{ height: 3px; width: 100%; background-color: var(--clr-primary); /* 初始蓝色 */ border-radius: 10px; transition: background-color 0.3s ease; /* 可选:平滑过渡动画 */ } /* 展开状态下的白色样式 */ .toggle-button.active .bar { background-color: var(--clr-secondary); } @media (max-width: 600px){ .toggle-button{ display: flex; } .nav{ flex-direction: column; align-items: flex-start; } .navbar-links{ width: 100%; display: none; } .navbar-links.active{ display: flex; } .nav-list{ flex-direction: column; width: 100%; padding-left: 0; margin: 0; } .nav-item{ text-align: center; margin: 0; padding: 15px 0; } }
JavaScript(关键修改)
const toggleButton = document.getElementsByClassName("toggle-button")[0] const navbarLinks = document.getElementsByClassName("navbar-links")[0] toggleButton.addEventListener("click", () => { navbarLinks.classList.toggle("active") toggleButton.classList.toggle("active") // 同步切换汉堡按钮的active类 })
核心逻辑
- 通过JavaScript在点击汉堡按钮时,同时给按钮自身添加/移除
active类 - 利用CSS类选择器
.toggle-button.active .bar,控制展开状态下的汉堡条颜色 - 可选添加
transition属性实现颜色切换的平滑动画
内容的提问来源于stack exchange,提问作者derrickogole
相关产品推荐
相关产品推荐

