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

仅用CSS如何实现鼠标悬停移出时双transform属性差异化过渡动画

问题原因

你当前的代码将transition统一设置在元素默认状态下,所有transform相关属性的变化都会被应用过渡效果,因此鼠标移出时,旋转和平移会同步执行反向动画,无法达到“移出时仅平移、不旋转”的要求。

实现方案

核心逻辑是分开控制两种状态下的过渡规则:

  • 鼠标移入(进入hover态)时:给平移、旋转两个属性都加500ms过渡,让两个动画同步执行
  • 鼠标移出(回到默认态)时:只给平移属性加500ms过渡,旋转属性过渡时长设为0,移出瞬间直接复位,不产生旋转动画

使用现代浏览器原生支持的独立变换属性实现代码如下:

.check {
  display: flex;
  min-height: 100vh;
  justify-content: center;
  align-items: center;
  color: #000;
  font-size: 25px;
  cursor: pointer;
  /* 初始状态:仅平移有过渡,旋转无过渡直接复位 */
  transition: translate 500ms ease-in-out, rotate 0ms ease-in-out;
  translate: 0 0;
  rotate: 0deg;
}

.check:hover {
  /* 悬停状态:平移、旋转都加过渡,同步执行动画 */
  transition: translate 500ms ease-in-out, rotate 500ms ease-in-out;
  translate: -100px 0;
  rotate: 360deg;
}

对应的HTML代码无需修改,和你原有代码一致:

<div class="check">Hello</div>

效果说明

  • 鼠标悬停到元素上时:元素会一边向左平移100px,一边完成360度旋转,两个动画同步在500ms内完成
  • 鼠标移出元素时:旋转角度会瞬间复位到初始状态,不会出现反向回转的动画,仅平移动作会平滑过渡回初始位置,完全匹配需求。

如果需要兼容不支持独立translate/rotate属性的老旧浏览器,可以用双层嵌套元素的方案实现:外层元素负责平移动画、内层元素负责旋转动画,分别给两个元素单独设置对应状态的过渡规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:09:21