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

如何用CSS依次触发两个带延迟的transform实现汉堡按钮转X动画

汉堡按钮分步变换(平移后旋转)的实现方案

要实现translate完成后再触发rotate的分步动画,核心是拆分变换到嵌套元素上,因为单个元素的transform是复合属性,无法单独给translate和rotate设置独立过渡。通过嵌套元素分别承载平移和旋转动作,再利用transition-delay让旋转在平移完成后启动,完全符合你要求的transition实现方式。

完整代码

HTML结构

<div class="hamburger">
  <div class="line"><span></span></div>
  <div class="line"><span></span></div>
  <div class="line"><span></span></div>
</div>

CSS样式

/* 基础重置 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.hamburger {
  width: 40px;
  height: 40px;
  position: relative;
  cursor: pointer;
  /* 可选:调整按钮位置 */
  margin: 20px;
}

/* 外层容器负责平移 */
.line {
  width: 100%;
  height: 4px;
  position: absolute;
  left: 0;
  /* 平移过渡:0.4s完成,无延迟 */
  transition: transform 0.4s ease;
}

/* 内层元素负责旋转 */
.line span {
  display: block;
  width: 100%;
  height: 100%;
  background-color: #333;
  border-radius: 2px;
  /* 旋转过渡:0.4s完成,延迟0.4s(等平移结束) */
  transition: transform 0.4s ease 0.4s;
}

/* 三条线初始位置 */
.line:nth-child(1) {
  top: 8px;
}

.line:nth-child(2) {
  top: 50%;
  transform: translateY(-50%);
}

/* 中间线只做淡出 */
.line:nth-child(2) span {
  transition: opacity 0.4s ease;
}

.line:nth-child(3) {
  bottom: 8px;
}

/* 激活状态(转为X形) */
.hamburger.active .line:nth-child(1) {
  /* 平移到中间位置 */
  transform: translateY(10px);
}

.hamburger.active .line:nth-child(1) span {
  /* 平移完成后旋转45度 */
  transform: rotate(45deg);
}

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

.hamburger.active .line:nth-child(3) {
  /* 平移到中间位置 */
  transform: translateY(-10px);
}

.hamburger.active .line:nth-child(3) span {
  /* 平移完成后旋转-45度 */
  transform: rotate(-45deg);
}

JavaScript交互

const hamburger = document.querySelector('.hamburger');
hamburger.addEventListener('click', () => {
  hamburger.classList.toggle('active');
});

关键细节说明

  1. 拆分变换动作:用外层.line处理平移,内层span处理旋转,两个元素的transition独立设置,避免单个transform属性的冲突。
  2. 延迟控制顺序:旋转的transition设置了0.4s的延迟,正好等于平移的过渡时长,确保平移完全完成后才启动旋转。
  3. 居中旋转保障:内层span的旋转默认以自身中心为轴,外层平移到按钮中间位置后,旋转自然形成对称的X形,解决了你提到的居中旋转问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:33:19