CSS3 动画(Animations)允许在一定时间内改变元素的多个样式属性。与过渡不同,动画提供了更强的控制和更多的功能,例如关键帧和循环。
基本属性
1. @keyframes
规则
@keyframes
规则用于定义动画。它指定了动画过程中在不同时间点上的样式。
语法:
@keyframes animation-name {
from {
/* 初始状态的样式 */
}
to {
/* 结束状态的样式 */
}
}
可以使用百分比来定义更精确的关键帧:
@keyframes animation-name {
0% {
/* 初始状态的样式 */
}
50% {
/* 中间状态的样式 */
}
100% {
/* 结束状态的样式 */
}
}
2. animation
属性
animation
是一个简写属性,用于设置动画的各个方面。它可以包含以下几个属性:
animation-name
: 指定要绑定到选择器的@keyframes
动画。animation-duration
: 指定动画完成一个周期所需的时间。animation-timing-function
: 指定动画的速度曲线。animation-delay
: 指定动画何时开始。animation-iteration-count
: 指定动画重复的次数。animation-direction
: 指定动画在每次循环时是否反向播放。animation-fill-mode
: 指定动画在播放前后对元素的影响。animation-play-state
: 指定动画是运行还是暂停。
语法:
animation: [animation-name] [animation-duration] [animation-timing-function] [animation-delay] [animation-iteration-count] [animation-direction] [animation-fill-mode] [animation-play-state];
示例:
animation: slidein 3s ease-in-out 1s infinite alternate both running;
各个属性的详细说明
animation-name
animation-name
指定要应用的 @keyframes
动画的名称。
animation-name: slidein;
animation-duration
animation-duration
指定动画完成一个周期所需的时间,单位是秒(s
)或毫秒(ms
)。
animation-duration: 3s;
animation-timing-function
animation-timing-function
指定动画的速度曲线。
animation-timing-function: ease-in-out;
animation-delay
animation-delay
指定动画何时开始,单位是秒(s
)或毫秒(ms
)。
animation-delay: 1s;
animation-iteration-count
animation-iteration-count
指定动画重复的次数,可以是一个具体的数字或 infinite
(无限次)。
animation-iteration-count: infinite;
animation-direction
animation-direction
指定动画在每次循环时是否反向播放。可能的值有:
normal
: 正常播放。reverse
: 反向播放。alternate
: 交替反向播放。alternate-reverse
: 交替反向播放,从反向开始。
animation-direction: alternate;
animation-fill-mode
animation-fill-mode
指定动画在播放前后对元素的影响。可能的值有:
none
: 默认值。动画不会影响元素的初始和最终状态。forwards
: 动画结束后,元素将保持最后一个关键帧的样式。backwards
: 在动画播放之前,元素将应用第一个关键帧的样式。both
: 元素在动画播放前后都应用关键帧的样式。
animation-fill-mode: both;
animation-play-state
animation-play-state
指定动画是运行还是暂停。可能的值有:
running
: 动画正在运行。paused
: 动画暂停。
animation-play-state: running;
示例
以下是一个使用 CSS3 动画的示例,展示了一个方块从左侧滑动到右侧:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS3 动画示例</title>
<style>
@keyframes slidein {
from {
transform: translateX(0);
}
to {
transform: translateX(100%);
}
}
.box {
width: 100px;
height: 100px;
background-color: #4CAF50;
animation: slidein 3s ease-in-out infinite alternate;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个示例中,@keyframes slidein
定义了动画的关键帧,指定方块从左侧滑动到右侧。.box
元素应用了这个动画,动画持续 3 秒钟,使用 ease-in-out
速度曲线,无限次循环,并在每次循环时反向播放。
进阶用法
1. 多个动画
一个元素可以同时应用多个动画,每个动画的属性之间用逗号分隔。
animation: slidein 3s ease-in-out, fadein 2s linear 1s;
2. 动画与过渡结合
动画效果可以与过渡效果结合使用,创建更加丰富和动态的用户界面效果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS3 动画与过渡示例</title>
<style>
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.box {
width: 100px;
height: 100px;
background-color: #4CAF50;
animation: rotate 4s linear infinite;
transition: background-color 1s;
}
.box:hover {
background-color: #FF5722; /* 鼠标悬停时背景颜色变为橙色 */
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
在这个示例中,.box
元素应用了一个旋转动画,并且在鼠标悬停时背景颜色会平滑地从绿色过渡到橙色。通过结合动画和过渡,可以实现更复杂和精美的效果。