Skip to content

汉堡菜单 Hamburger

经典的三横线汉堡菜单,点击后通过 CSS transform 变形为关闭 X 图标。

实时预览

代码

css
.ham-btn {
  width: 40px; height: 32px; cursor: pointer;
  display: flex; flex-direction: column;
  justify-content: space-between; padding: 4px 0;
}
.ham-btn span {
  display: block; width: 100%; height: 3px;
  background: #fff; border-radius: 2px;
  transition: all 0.3s ease; transform-origin: center;
}
/* 使用 checkbox hack 或 JS 切换 .active 类 */
.ham-btn.active span:nth-child(1) {
  transform: translateY(12.5px) rotate(45deg);
}
.ham-btn.active span:nth-child(2) { opacity: 0; }
.ham-btn.active span:nth-child(3) {
  transform: translateY(-12.5px) rotate(-45deg);
}
html
<label class="ham-btn"><span></span><span></span><span></span></label>

纯 CSS 实现的汉堡菜单导航动画——通过过渡和变换让导航菜单的交互更有质感。适用于响应式导航、单页应用路由指示、粘性收缩等场景。

快速使用

  1. 复制 CSS 代码到你的样式文件中
  2. 将导航 HTML 结构粘贴到页面中(注意 .active 类标记当前页面)
  3. 修改导航项的数量和文字内容
  4. 调整颜色以匹配你的导航栏设计

使用场景

  • 响应式导航:移动端汉堡菜单展开/收起动画适配小屏幕
  • 单页应用导航:活跃下划线指示器平滑滑动到当前页面
  • 大型导航菜单:下拉菜单的展开动画配合内容区的滑入
  • 粘性导航栏:滚动时导航栏收缩+背景半透明节省屏幕空间

常见问题

Q: 导航动画如何适配移动端? A: 移动端导航建议以下策略:折叠为汉堡菜单(320-768px),用 CSS transition 实现滑入/展开;触摸目标至少 44x44px;下拉菜单在移动端改为手风琴展开模式。

Q: 下划线指示器如何实现平滑跟随? A: 纯 CSS 方案用 :hover::after + transition 展开下划线。如果要精确跟随鼠标位置(磁吸效果),需要 JS 计算 getBoundingClientRect() 动态设置指示器的 leftwidth

Q: 粘性导航的性能如何优化? A: 使用 position: sticky 而非 JS scroll 监听,避免主线程频繁计算。导航栏本身用 will-change: transform 提升合成层,内容区预留 scroll-margin-top 避免锚点跳转被导航遮挡。

浏览器兼容性

浏览器兼容性
Chrome / Edge✅ 完全支持
Firefox✅ 完全支持(position: sticky 需注意)
Safari✅ 完全支持
移动端浏览器✅ 完全支持
IE 11❌ position: sticky 不支持,需 JS 降级

使用说明

属性说明
transform: translateY + rotate将第一和第三条线移至中间并旋转 45°/-45°
opacity: 0隐藏中间横线
transition控制变形动画时长
transform-origin旋转中心点