图标旋转悬停 4 种特效(360°旋转/回弹/反向/上浮 CSS 源码)

CSS 许可:自研原创

图标旋转悬停 4 种玩法:整圈 360°、快转带回弹、反向旋转、旋转上浮,纯 CSS transition 实现,适合导航图标、功能按钮、社交图标。

效果演示(真实可交互)

把鼠标移到任意按钮上,观察图标的不同旋转方式。全部由 CSS transition 驱动,无任何 JS 参与,悬停与移出同样顺滑。

完整代码

HTML 结构:每个按钮包含图标 .is-ico 与文字 .is-label,通过给按钮加 is-360 / is-bounce / is-rev / is-float 切换玩法:

<button class="is-btn is-360">
  <span class="is-ico">⚙️</span>
  <span class="is-label">360° 旋转</span>
</button>

核心 CSS:

.is-ico {
  display: inline-block;
  font-size: 34px;
  line-height: 1;
  transition: transform .5s cubic-bezier(.22, .61, .36, 1);
  will-change: transform;
}

/* ① 整圈 360° 旋转 */
.is-360:hover .is-ico { transform: rotate(360deg); }

/* ② 0.6s 快速转一圈 + 回弹(回弹用 overshoot 缓动) */
.is-bounce .is-ico { transition-duration: .6s; }
.is-bounce:hover .is-ico {
  transform: rotate(360deg) scale(1.15);
  transition-timing-function: cubic-bezier(.68, -.55, .27, 1.55);
}

/* ③ 反向旋转 */
.is-rev:hover .is-ico { transform: rotate(-360deg); }

/* ④ 旋转 + 上浮 */
.is-float:hover .is-ico { transform: rotate(360deg) translateY(-4px); }

参数说明

参数默认值说明
旋转角度360deg也可用 180deg 做半圈,或 -360deg 反向
旋转时长.5s过渡时长,1s 更优雅,.3s 更利落
回弹缓动cubic-bezier(.68,-.55,.27,1.55)超过终点再回弹的”过冲”曲线
缩放倍率1.15回弹玩法中旋转同时的放大
上浮距离-4px旋转同时的垂直位移

兼容性与性能

常见问题

Q: 为什么我的图标旋转时会轻微抖动? 大概率是图标本身不是正方形或基线不齐,给 .is-ico 加上 display: inline-block 与 line-height: 1 即可稳定旋转中心。

Q: 想旋转的同时改变图标颜色? 给 .is-ico 增加 color 属性并在 transition 中声明:transition: transform .5s ease, color .3s ease;,hover 时改色即可。

Q: 图标用 SVG 时能直接旋转吗? 可以,SVG 也是元素,transform: rotate() 同样生效;注意给 SVG 设置固定 width/height,避免视口尺寸波动。

Q: 移动端没 hover,点击有反馈吗? 触屏上首次点击会触发 hover 态并停留,适合展示型页面;需要真正的点击反馈建议配合 :active 伪类加按压缩放。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核