CSS过渡与动画
Vue 过渡系统与原生 CSS 深度集成,支持 transition 过渡和 @keyframes 动画两种方案。
CSS Transition 过渡
基础过渡
CSS
/* 淡入淡出 */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s ease;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
/* 滑动效果 */
.slide-enter-active,
.slide-leave-active {
transition: transform 0.3s ease;
}
.slide-enter-from,
.slide-leave-to {
transform: translateX(-20px);
}
多属性过渡
CSS
.multi-enter-active,
.multi-leave-active {
transition: opacity 0.3s ease, transform 0.3s ease;
}
.multi-enter-from,
.multi-leave-to {
opacity: 0;
transform: scale(0.9);
}
多个属性过渡使用逗号分隔,时长可独立设置。
CSS @keyframes 动画
进入动画
vue
<template>
<Transition name="bounce" enter-active-class="animate__animated animate__bounceIn">
<p v-if="show">弹跳进入</p>
</Transition>
</template>
<style>
@keyframes bounceIn {
0% {
opacity: 0;
transform: scale(0.3);
}
50% {
opacity: 1;
transform: scale(1.05);
}
70% {
transform: scale(0.9);
}
100% {
transform: scale(1);
}
}
.bounce-enter-active {
animation: bounceIn 0.5s ease;
}
</style>
自定义动画类
CSS
/* 使用第三方动画库 */
@import 'animate.css';
.custom-enter-active {
animation-duration: 0.5s;
}
.custom-leave-active {
animation-duration: 0.3s;
}
Transition 与 Animation 区别
| 特性 | Transition | Animation |
|---|---|---|
| 定义方式 | 起始/结束状态 | @keyframes 关键帧 |
| 控制粒度 | 两点之间过渡 | 多关键帧精细控制 |
| 触发条件 | 状态变化自动触发 | 可自动播放或手动触发 |
| 适用场景 | 简单显隐、位置变化 | 复杂序列动画 |
自定义过渡类名
vue
<Transition
enter-from-class="opacity-0"
enter-active-class="transition-opacity duration-300"
enter-to-class="opacity-100"
leave-from-class="opacity-100"
leave-active-class="transition-opacity duration-300"
leave-to-class="opacity-0"
>
<p v-if="show">自定义类名</p>
</Transition>
适用于 Tailwind CSS 等原子化 CSS 框架,避免手写完整样式。
duration 属性
vue
<!-- 统一时长 -->
<Transition :duration="500">
<component :is="view" />
</Transition>
<!-- 分别设置进入/离开时长 -->
<Transition :duration="{ enter: 500, leave: 300 }">
<component :is="view" />
</Transition>
当 Vue 无法自动推断动画时长时,使用
duration显式指定。
要点总结
- CSS
transition适用于简单状态过渡,@keyframes适用于复杂动画 - 支持原生 CSS、第三方动画库(如 Animate.css)、原子化 CSS(Tailwind)
enter-active-class等属性可自定义过渡类名- 无法自动推断时长时使用
:duration显式设置
存放路径: articles/VUE/进阶/过度动画与状态复用/CSS过渡与动画.md
📝 发现内容有误?点击此处直接编辑