css动画如何给图片添加旋转动画_通过@keyframes结合transform: rotate实现旋转-css教程

用@keyframes定义图片旋转动画需指定0%和100%关键帧,使用transform:rotate(0deg)和rotate(360deg);img元素须设display:inline-block或block,并通过animation:spin 2s linear infinite调用,transform-origin应写在元素选择器中而非@keyframes内。

如何用 @keyframes 定义图片旋转动画

直接在 CSS 中定义关键帧,用 transform: rotate() 控制角度变化。注意:必须指定起始(0%)和结束(100%)状态,否则动画不会触发。

  • 0% 必须写成 0% 或 from,不能省略单位或写成 0
  • 旋转值推荐用 deg(如 360deg),避免用 turn 或 rad 以防兼容性问题
  • 如果只写 to { transform: rotate(360deg); },缺少 from,部分浏览器(尤其是旧版 Safari)可能不执行动画
@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

给 元素应用旋转动画的正确写法

不能直接在 上写 animation 就完事——需确保该元素是「可变换元素」,且未被其他样式(比如 display: block 以外的布局干扰)阻断动画渲染。

  • 给 设置 display: inline-block 或 block,否则在某些文档流中旋转中心可能偏移
  • 用 animation: spin 2s linear infinite; 调用,其中 infinite 表示循环,漏掉它就只转一次
  • 若图片有父容器且设置了 overflow: hidden,旋转时边缘可能被裁切,需检查容器尺寸和 transform-origin
img.rotate {
  display: inline-block;
  animation: spin 2s linear infinite;
}

transform-origin 对图片旋转中心的影响

默认以图片中心点(50% 50%)为轴心旋转。但很多场景需要绕左上角、底部中点等位置转,这时必须显式设置 transform-origin,且它要写在动画规则里或元素样式中,不能只写在 @keyframes 里。

  • 写在 @keyframes 内部无效:浏览器会忽略 transform-origin 的关键帧动画
  • 正确做法是把 transform-origin 放在调用动画的元素选择器中,例如 img.rotate { transform-origin: top left; }
  • 值支持关键字(center、top)、百分比(20% 80%)、长度(10px 2em),注意两个值顺序是 x y

常见动效失效原因和调试建议

图片没转,大概率不是代码写错,而是被隐性规则拦截。优先检查这几项:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » css动画如何给图片添加旋转动画_通过@keyframes结合transform: rotate实现旋转-css教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996525+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996525+
  • 本周更新: 0+
  • 最后更新: 2026-03-16