当前位置:首页 > JavaScript

js实现汉堡收缩

2026-03-15 14:19:59JavaScript

使用 CSS 和 JavaScript 实现汉堡菜单

HTML 结构 创建一个基本的汉堡菜单结构,包含一个按钮和导航链接:

<button class="hamburger" id="hamburger">
  <span class="hamburger-line"></span>
  <span class="hamburger-line"></span>
  <span class="hamburger-line"></span>
</button>
<nav class="nav-menu" id="navMenu">
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Contact</a></li>
  </ul>
</nav>

CSS 样式 为汉堡菜单和导航菜单添加样式:

.hamburger {
  background: none;
  border: none;
  cursor: pointer;
  padding: 10px;
  display: inline-block;
}

.hamburger-line {
  display: block;
  width: 25px;
  height: 3px;
  background: #333;
  margin: 5px 0;
  transition: all 0.3s ease;
}

.nav-menu {
  display: none;
  background: #f9f9f9;
  padding: 20px;
}

.nav-menu.active {
  display: block;
}

.hamburger.active .hamburger-line:nth-child(1) {
  transform: rotate(45deg) translate(5px, 5px);
}

.hamburger.active .hamburger-line:nth-child(2) {
  opacity: 0;
}

.hamburger.active .hamburger-line:nth-child(3) {
  transform: rotate(-45deg) translate(7px, -7px);
}

JavaScript 交互 添加点击事件来切换菜单状态:

js实现汉堡收缩

document.getElementById('hamburger').addEventListener('click', function() {
  this.classList.toggle('active');
  document.getElementById('navMenu').classList.toggle('active');
});

使用纯 CSS 实现汉堡菜单

如果不需要 JavaScript,可以使用纯 CSS 和 checkbox 实现:

<input type="checkbox" id="hamburger-toggle" class="hamburger-toggle">
<label for="hamburger-toggle" class="hamburger">
  <span class="hamburger-line"></span>
  <span class="hamburger-line"></span>
  <span class="hamburger-line"></span>
</label>
<nav class="nav-menu">
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Contact</a></li>
  </ul>
</nav>

对应的 CSS:

js实现汉堡收缩

.hamburger-toggle {
  display: none;
}

.hamburger {
  display: inline-block;
  cursor: pointer;
  padding: 10px;
}

.nav-menu {
  display: none;
}

.hamburger-toggle:checked ~ .nav-menu {
  display: block;
}

.hamburger-toggle:checked + .hamburger .hamburger-line:nth-child(1) {
  transform: rotate(45deg) translate(5px, 5px);
}

.hamburger-toggle:checked + .hamburger .hamburger-line:nth-child(2) {
  opacity: 0;
}

.hamburger-toggle:checked + .hamburger .hamburger-line:nth-child(3) {
  transform: rotate(-45deg) translate(7px, -7px);
}

动画效果优化

为菜单添加平滑的展开/收起动画:

.nav-menu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}

.hamburger-toggle:checked ~ .nav-menu {
  max-height: 500px;
}

响应式设计建议

在移动设备上显示汉堡菜单,桌面设备上显示常规导航:

@media (max-width: 768px) {
  .desktop-nav {
    display: none;
  }
  .hamburger {
    display: block;
  }
}

@media (min-width: 769px) {
  .hamburger {
    display: none;
  }
  .nav-menu {
    display: block;
  }
}

标签: js
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…