可用纯CSS实现抽象化猫Loading动画:通过clip-path裁剪与transform逐帧驱动,配合@keyframes控制耳朵抖动(错峰延迟+非线性缓动)、眯眼呼吸(异步scaleY+自定义cubic-bezier)及顿挫式尾巴摆动(steps(2,end))。

用纯CSS画一只会动的猫Loading动画,关键在“不依赖图片和JS”
能做,但别指望用border-radius硬抠出写实猫脸——实际可行的是抽象化、符号化的猫:两个圆耳朵、椭圆脸、眯眼、晃动尾巴。核心思路是用clip-path裁剪+transform逐帧驱动,配合@keyframes控制循环节奏。浏览器兼容性上,clip-path在 Safari 15.4+ 和 Chrome/Firefox 稳定支持,旧版 Safari 需降级为mask或改用box-shadow堆叠法。
CSS里怎么让猫耳朵“抖”起来而不是生硬旋转
直接rotate(10deg)来回切会卡顿,真实感来自非线性缓动+错峰动画。建议:
- 给左耳加
animation: wiggle 1.2s ease-in-out infinite,右耳延迟0.3s启动,避免同步抖动 - 在
@keyframes wiggle里用0% { transform: rotate(0) }、50% { transform: rotate(-8deg) }、100% { transform: rotate(0) },比单纯ease-in-out更自然 - 耳朵本身用
border-radius: 50% 50% 0 50%模拟尖角,再套一层overflow: hidden父容器防溢出
猫咪眼睛怎么实现“眯眼Loading”的呼吸效果
不用opacity淡入淡出(太像眨眼),要模拟瞳孔收缩/舒张的节奏感:
- 左右眼分别用两个
div,宽高设为12px×6px,border-radius: 6px做成横椭圆 - 动画用
scaleY(0.3) → scaleY(1) → scaleY(0.3),周期2.8s,配合animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1)制造“缓慢收缩→快速睁开”错觉 - 避免同时缩放:右眼
animation-delay: -0.7s,形成轻微异步,更像活物
尾巴摆动为什么总显得僵硬?三个参数必须调准
尾巴是Loading动画的动态锚点,90%的“假动感”源于这里:
立即学习“前端免费学习笔记(深入)”;
- 尾巴用
before伪元素画,width: 4px、height: 32px、background: #333,根部transform-origin: bottom center - 关键帧里只动
rotate(),不要加translate——浏览器对旋转的硬件加速更稳 - 幅度控制在
-12deg → 0 → +12deg,周期1.6s,且用animation-timing-function: steps(2, end)模拟猫尾“顿挫式”甩动,比ease真实得多
真正难的不是画猫,是让所有部件的动画时长、延迟、缓动函数彼此咬合——差0.1秒,就从“萌系Loading”变成“抽搐故障”。动手前先用animation-play-state: paused逐个冻结部件检查节奏。



















