rotatein 不是 css 原生动画,需引入 animate.css 或手动定义 @keyframes;手写时须含 from/to、opacity、transform、forwards 和合适的 transform-origin。

rotateIn 动画在 CSS 中没有原生定义
别直接搜 rotateIn——它不是 CSS 标准动画名,也不是浏览器内置关键字。你看到的 rotateIn 几乎都来自第三方动画库(比如 Animate.css),或者开发者自己手写的 @keyframes。直接写 animation: rotateIn 0.5s; 而不引入对应定义,页面不会动,控制台也不会报错,只是静默失效。
- 检查是否漏掉了
animate.css的 CDN 或本地引入(常见于复制示例但没加依赖) - 若想自定义,必须手动声明
@keyframes rotateIn,且需指定from和to的transform: rotate()+ 其他配合属性(如opacity) - 注意:CSS 的
rotate()默认以元素中心为原点,若要绕左上角转,得加transform-origin: top left;
手写一个轻量级 rotateIn 动画(兼容现代浏览器)
不需要整套 Animate.css,几行就能搞定基础旋转入场效果。关键在于起始状态要「不可见+有旋转」,结束时归位并可见:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
@keyframes rotateIn {
from {
transform: rotate(-90deg) scale(0.8);
opacity: 0;
}
to {
transform: rotate(0) scale(1);
opacity: 1;
}
}
.rotate-in {
animation: rotateIn 0.6s ease-out forwards;
}
-
forwards必须加,否则动画播完会闪回初始状态 -
ease-out比linear更自然,避免机械感 - 如果元素本身有
transform(比如已用translateY居中),手写rotateIn时得把原有变换合并进transform值,否则会被覆盖
rotateIn 配合 JavaScript 触发时机容易出问题
很多人用 element.classList.add('rotate-in') 立即触发,但若元素还没渲染或 DOM 尚未挂载,动画可能不执行或只播一半。更稳妥的做法是确保元素已就位再启动:
- 在
DOMContentLoaded后添加类(适用于首屏静态元素) - 对懒加载或动态插入的元素,用
requestAnimationFrame包一层:requestAnimationFrame(() => el.classList.add('rotate-in')) - 若需滚动进入视口才播放,别只靠
IntersectionObserver回调里加类——得确认该元素当前opacity是 0 或visibility: hidden,否则可能「已显示→再旋转」造成视觉跳变
rotateIn 在移动端要注意 transform 重绘性能
单纯 rotate() 在 iOS Safari 和部分安卓 WebView 上,若父容器没开启硬件加速,快速连续触发可能卡顿。这不是动画写错了,而是渲染管线没走 GPU:
- 给动画元素加
transform: translateZ(0)或will-change: transform(后者慎用,仅对明确频繁变化的元素) - 避免同时对同一元素做大量
top/left位移 +rotate,优先用transform: translate() rotate()合并写法 - 真机调试时,打开 Safari 开发者工具的「Layers」面板,看 rotateIn 元素是否生成了独立合成层;没生成,说明加速没生效
forwards 和 transform-origin 的组合效果——比如按钮绕左上角转进来,但没设 transform-origin,结果整个布局跟着晃了一下。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










