FontAwesome 图标动画完全指南

旋转、跳动、闪烁、呼吸、自定义 CSS 动画——让图标"活"起来

FontAwesome 内置了 6 种动画类名,同时支持通过自定义 CSS 实现无限可能的动画效果。以下所有示例均使用免费版图标。

内置动画类名

FontAwesome 提供了开箱即用的动画 CSS 类。在图标的基础类名后加上动画类即可:

类名效果示例说明
fa-spin 匀速旋转 适用于加载中、刷新等场景
fa-pulse 8 步旋转 比 fa-spin 更省资源,Perf 友好
fa-beat 缩放跳动 心跳效果,适合收藏、喜欢按钮
fa-fade 淡入淡出 通知提醒、闪烁提示
fa-beat-fade 跳动 + 淡出 组合效果,更醒目的提醒
fa-bounce 弹跳 引导用户向下滚动
fa-shake 左右抖动 错误提示、警告效果
fa-flip 3D 翻转 翻转卡片、相机切换
fa-spin-pulse 脉冲旋转 类似 fa-spin 但节奏感更强

实战场景:加载动画

最常用的场景——数据加载时的旋转图标:

<!-- 页面加载中 --> <div class="text-center py-5"> <i class="fa-solid fa-circle-notch fa-spin fa-3x text-primary"></i> <p class="mt-2">加载中...</p> </div> <!-- 按钮加载状态 --> <button class="btn btn-primary" disabled> <i class="fa-solid fa-spinner fa-spin"></i> 提交中... </button>

实战场景:通知与提醒

<!-- 未读通知小红点 + 跳动 --> <span class="position-relative"> <i class="fa-solid fa-bell fa-beat-fade fa-2x"></i> <span class="badge bg-danger position-absolute top-0 start-100 translate-middle">3</span> </span> <!-- 错误提示抖动 --> <div class="alert alert-danger"> <i class="fa-solid fa-triangle-exclamation fa-shake"></i> 请输入有效的邮箱地址 </div>

实战场景:交互反馈

<!-- 收藏按钮(点击后跳动) --> <button class="btn btn-link" onclick="this.querySelector('i').classList.toggle('fa-beat')"> <i class="fa-regular fa-heart fa-2x"></i> </button> <!-- 向下滚动引导 --> <a href="#content" class="d-block text-center"> <i class="fa-solid fa-chevron-down fa-bounce fa-3x"></i> <p>向下滚动</p> </a>

自定义动画速度

内置动画的速度可以通过 CSS 变量调整:

/* 减半旋转速度 */ .fa-spin { --fa-animation-duration: 3s; } /* 加速跳动 */ .fa-beat { --fa-animation-duration: 0.3s; } /* 自定义淡出透明度 */ .fa-fade { --fa-fade-opacity: 0.3; } /* 自定义跳动缩放比例 */ .fa-beat { --fa-beat-scale: 1.3; }

自定义 CSS 动画(高级)

当内置动画不够用时,可以编写自定义 @keyframes:

/* 彩色旋转动画 */ @keyframes rainbow-spin { 0% { transform: rotate(0deg); color: #dc3545; } 25% { transform: rotate(90deg); color: #fd7e14; } 50% { transform: rotate(180deg); color: #198754; } 75% { transform: rotate(270deg); color: #0d6efd; } 100% { transform: rotate(360deg); color: #dc3545; } } .rainbow-spin { animation: rainbow-spin 3s linear infinite; } /* 呼吸灯效果 */ @keyframes breathe { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.2); opacity: 0.6; } } .breathe { animation: breathe 2s ease-in-out infinite; }

使用方式:

<i class="fa-solid fa-star rainbow-spin fa-3x"></i> <i class="fa-solid fa-circle breathe fa-3x text-success"></i>

动画性能注意事项

  • 优先使用 CSS 动画而非 JavaScript 以获得更好的性能
  • 使用 transform 和 opacity 属性触发 GPU 加速
  • 为复杂动画添加 will-change 提示
  • 尊重 prefers-reduced-motion 用户偏好设置
/* 尊重用户动画偏好 */ @media (prefers-reduced-motion: reduce) { .fa-spin, .fa-beat, .fa-bounce, .fa-fade, .fa-shake, .fa-flip { animation: none !important; } }
分享

相关推荐