动画与过渡效果:UnoCSS内置动画库的实战应用

动画和过渡效果是提升用户体验的关键,但写CSS动画总是让人头大:关键帧定义、动画属性、兼容性处理......今天咱们用UnoCSS内置的动画库,直接通过原子类搞定这些烦人的细节,让动画开发变得轻松又高效。

一、UnoCSS动画库的核心能力

UnoCSS内置了丰富的动画工具类,直接开箱即用:

  1. 预设动画 :如animate-spin(旋转)、animate-bounce(弹跳)
  2. 过渡效果 :如transition-allduration-300
  3. 延迟与缓动 :如delay-200ease-in-out

先看一个简单的配置(uno.config.ts):

typescript 复制代码
export default defineConfig({
  presets: [
    presetUno(),
    presetAttributify(),
    presetIcons()
  ]
})

二、基础动画实战

2.1 旋转动画

html 复制代码
<div class="w-16 h-16 bg-blue-500 animate-spin"></div>

效果:元素无限旋转,适合加载状态。

2.2 弹跳动画

html 复制代码
<button class="px-6 py-2 bg-green-500 text-white rounded-lg animate-bounce">
  点击我
</button>

效果:按钮上下弹跳,吸引用户注意力。

三、过渡效果实战

3.1 悬停放大

html 复制代码
<div class="w-40 h-40 bg-red-500 transition-transform duration-300 hover:scale-110"></div>

代码解释

  • transition-transform:启用变换过渡
  • duration-300:过渡时长300ms
  • hover:scale-110:悬停时放大1.1倍

3.2 渐变背景

html 复制代码
<div class="w-40 h-40 bg-gradient-to-r from-blue-500 to-purple-500 transition-all duration-500 hover:(from-purple-500 to-blue-500)">
</div>

效果:悬停时背景渐变方向反转。

四、组合动画实战

4.1 加载动画

html 复制代码
<div class="flex space-x-4">
  <div class="w-4 h-4 bg-gray-500 rounded-full animate-bounce delay-100"></div>
  <div class="w-4 h-4 bg-gray-500 rounded-full animate-bounce delay-200"></div>
  <div class="w-4 h-4 bg-gray-500 rounded-full animate-bounce delay-300"></div>
</div>

效果:三个圆点依次弹跳,适合加载提示。

4.2 卡片悬停效果

html 复制代码
<div class="group relative w-64 h-64 bg-white shadow-lg rounded-lg overflow-hidden">
  <img src="image.jpg" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"/>
  <div class="absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity duration-500">
    <button class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-white px-6 py-2 rounded-full hover:bg-gray-100">
      查看详情
    </button>
  </div>
</div>

效果:悬停时图片放大,遮罩层渐显。

五、自定义动画

5.1 扩展动画库

uno.config.ts中添加自定义动画:

typescript 复制代码
export default defineConfig({
  theme: {
    animation: {
      keyframes: {
        'fade-in': '{0% {opacity:0;} 100% {opacity:1;}}',
        'slide-in': '{0% {transform:translateX(-100%);} 100% {transform:translateX(0);}}'
      },
      durations: {
        'fade-in': '0.5s',
        'slide-in': '0.8s'
      }
    }
  }
})

5.2 使用自定义动画

html 复制代码
<div class="animate-fade-in animate-duration-500">
  淡入效果
</div>
<div class="animate-slide-in animate-duration-800">
  滑入效果
</div>

六、性能优化技巧

  1. 硬件加速 :为动画元素添加transform-gpu,启用GPU加速。

    html 复制代码
    <div class="animate-spin transform-gpu"></div>
  2. 减少重绘 :优先使用transformopacity属性,避免布局抖动。

  3. 按需生成 :通过safelist过滤未使用的动画类:

    typescript 复制代码
    safelist: [
      'animate-spin',
      'animate-bounce',
      'animate-fade-in'
    ]

七、说点实在的

UnoCSS动画库的爽点:

  1. 开发效率高:不用写冗长的关键帧定义
  2. 代码可读性强:类名即语义,一目了然
  3. 维护成本低:修改动画只需调整类名组合

但也要注意:

  • 复杂动画建议走独立CSS文件
  • 动画性能优化不能忽视
  • 别滥用动画,影响用户体验

以上代码已经分享到UnoCss Playground,如有所需,欢迎自取!

相关推荐
竹林81810 分钟前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花27 分钟前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12271 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪2 小时前
Vue3-生命周期
前端
莪_幻尘2 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4532 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅3 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端
kyriewen3 小时前
别再每次都 Google 了:我整理了前端日常最常踩的 10 个 Git 坑,附速查表
前端·javascript·git
一颗奇趣蛋3 小时前
Web 视频开发完全指南:从入门到精通
前端
非洲农业不发达4 小时前
windows终端体验大升级,让你拥有macos级别的美化
前端·后端