transition
和 animation
是 CSS 中常用的两种用于元素过渡和动画效果的属性。它们虽然都可以实现元素的动态变化,但在使用场景和功能上存在差异。
一、区别
1. 触发方式
transition
:- 需要事件触发,如
hover
、focus
、active
等状态变化。 - 只能在两个状态之间平滑过渡,即从一个状态变为另一个状态时产生效果。
示例:
css.button { background-color: blue; transition: background-color 0.3s; } .button:hover { background-color: red; }
在鼠标悬停时触发
hover
,使背景颜色在 0.3 秒内从蓝色过渡到红色。- 需要事件触发,如
animation
:- 无需事件触发,可以自动循环播放或根据自定义的触发条件执行。
- 可以定义复杂的关键帧(
keyframes
)动画,允许在动画过程中设置多个状态,并控制每个状态的变化。
示例:
css@keyframes fadeInOut { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } .box { animation: fadeInOut 2s infinite; }
该
animation
在 2 秒内通过关键帧使元素透明度从 0 到 1 再回到 0,并循环播放。
2. 复杂性
transition
: 适合简单的状态变化,只支持两个状态之间的过渡。animation
: 可以定义多个状态(通过keyframes
),适合复杂的动画效果,如元素的移动、旋转、颜色变化等。
3. 控制力度
transition
: 控制较为简单,只能设置属性的开始状态和结束状态,并定义过渡的时间、方式和延迟。animation
: 提供更强的控制能力,包括控制动画的循环、播放方向、动画的播放次数、暂停与继续等。
二、基本属性
1. transition
基本属性
transition-property
: 指定要应用过渡效果的 CSS 属性(如width
、opacity
等)。可以设置all
来应用到所有可过渡的属性。- 示例:
transition-property: opacity;
- 示例:
transition-duration
: 定义过渡效果的持续时间(如0.5s
表示 0.5 秒)。- 示例:
transition-duration: 0.3s;
- 示例:
transition-timing-function
: 设置过渡的速度曲线(如ease
、linear
、ease-in
、ease-out
、cubic-bezier()
)。- 示例:
transition-timing-function: ease-in-out;
- 示例:
transition-delay
: 定义过渡效果的开始时间延迟。- 示例:
transition-delay: 0.2s;
- 示例:
综合示例:
css.box { transition: width 1s ease-in-out 0.5s; }
2. animation
基本属性
animation-name
: 指定要应用的关键帧动画名称,对应@keyframes
中定义的名称。- 示例:
animation-name: fadeInOut;
- 示例:
animation-duration
: 定义动画的持续时间。- 示例:
animation-duration: 2s;
- 示例:
animation-timing-function
: 设置动画的速度曲线(如linear
、ease
、ease-in
等)。- 示例:
animation-timing-function: ease-in-out;
- 示例:
animation-delay
: 定义动画开始前的延迟时间。- 示例:
animation-delay: 1s;
- 示例:
animation-iteration-count
: 设置动画播放的次数,可以是一个具体数字,也可以是infinite
表示无限循环。- 示例:
animation-iteration-count: infinite;
- 示例:
animation-direction
: 定义动画的播放方向(如normal
、reverse
、alternate
等)。- 示例:
animation-direction: alternate;
- 示例:
animation-fill-mode
: 指定动画结束时元素状态的表现(如none
、forwards
、backwards
、both
)。- 示例:
animation-fill-mode: forwards;
- 示例:
animation-play-state
: 控制动画的播放状态,可以设置为running
(播放)或paused
(暂停)。- 示例:
animation-play-state: paused;
- 示例:
综合示例:
css@keyframes slideIn { 0% { transform: translateX(-100px); } 100% { transform: translateX(0); } } .box { animation: slideIn 1s ease-in 0.5s infinite alternate; }
总结
transition
适用于简单的两状态过渡,需要触发事件才能生效。animation
适合复杂的多状态动画,自动执行且提供更多的控制选项。