一、CSS动画基础:理解动画原理
1. 动画三要素
要素 | 说明 | 示例 |
---|---|---|
变化属性 | 哪些属性需要改变 | width, opacity, transform |
时间控制 | 动画持续时间和速度曲线 | 2s, ease-in-out |
触发机制 | 如何启动动画 | hover, 页面加载 |
2. 两种实现方式
方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Transition | 简单易用 | 只能定义开始和结束状态 | 简单状态切换 |
Animation | 功能强大,可定义关键帧 | 相对复杂 | 复杂动画效果 |
二、Transition:平滑过渡效果
1. 核心属性
.element {
transition: property duration timing-function delay;
}
-
property:要过渡的属性(如
all
) -
duration:持续时间(如
1s
) -
timing-function:速度曲线(如
ease-in-out
) -
delay:延迟时间(如
0.5s
)
2. 常用速度曲线
值 | 效果描述 |
---|---|
ease | 默认值,慢快慢 |
linear | 匀速 |
ease-in | 慢开始 |
ease-out | 慢结束 |
ease-in-out | 慢开始和慢结束 |
cubic-bezier | 自定义贝塞尔曲线 |
3. 实战案例:按钮悬停效果
.button {
background: #3498db;
color: white;
padding: 10px 20px;
border-radius: 5px;
transition: all 0.3s ease;
}
.button:hover {
background: #2980b9;
transform: translateY(-2px);
box-shadow: 0 5px 10px rgba(0,0,0,0.2);
}
三、Animation:关键帧动画
1. 核心概念
关键帧动画允许动画师在动画过程中设置特定的帧,这些帧包含了动画对象的重要位置、形状、颜色或其他属性的变化。动画软件或引擎会自动计算这些关键帧之间的过渡,从而创建出平滑的动画效果。在关键帧动画中,关键帧的选择和设置是至关重要的,因为它们决定了动画的整体效果和流畅度。
2. 定义动画
@keyframes slideIn {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(0);
}
}
3. 使用动画
.element {
animation: slideIn 1s ease-in-out;
}
-
animation-name:动画名称
-
animation-duration:持续时间
-
animation-timing-function:速度曲线
-
animation-delay:延迟时间
-
animation-iteration-count:播放次数(
infinite
表示无限) -
animation-direction:播放方向(
alternate
表示往返) -
animation-fill-mode:动画结束状态(
forwards
保持最后一帧)
4. 实战案例:加载动画
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.loader {
width: 40px;
height: 40px;
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
border-radius: 50%;
animation: spin 1s linear infinite;
}
四、Transform:变形魔法
1. 常用变换
函数 | 效果描述 | 示例 |
---|---|---|
translate() | 移动元素 | translate(50px, 100px) |
rotate() | 旋转元素 | rotate(45deg) |
scale() | 缩放元素 | scale(1.2) |
skew() | 倾斜元素 | skew(30deg) |
matrix() | 矩阵变换 | matrix(a,b,c,d,e,f) |
2. 3D变换
.element {
transform: perspective(500px) rotateY(45deg);
}
3. 实战案例:卡片翻转
.card {
width: 200px;
height: 300px;
position: relative;
transform-style: preserve-3d;
transition: transform 1s;
}
.card:hover {
transform: rotateY(180deg);
}
.front, .back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
}
.back {
transform: rotateY(180deg);
}
五、性能优化技巧
1. 硬件加速
.element {
will-change: transform;
transform: translateZ(0);
}
2. 优化建议
-
优先使用
transform
和opacity
-
避免频繁重排(reflow)
-
使用
requestAnimationFrame
-
减少图层数量
3. 调试工具
-
Chrome DevTools > Performance
-
Layers面板查看图层
六、实战案例:个人简介页面动画
HTML结构
<div class="profile">
<div class="avatar"></div>
<h1>张三</h1>
<p>前端开发工程师</p>
</div>
CSS动画
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.profile {
animation: fadeIn 1s ease-out;
}
.avatar {
width: 100px;
height: 100px;
background: #3498db;
border-radius: 50%;
animation: bounce 2s infinite;
}
@keyframes bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-10px);
}
}
七、常见问题解答
Q1:如何实现无限循环动画?
animation-iteration-count: infinite;
Q2:如何暂停动画?
animation-play-state: paused;
Q3:如何实现动画延迟?
animation-delay: 1s;
八、学习路线建议
-
先掌握Transition基础
-
学习关键帧动画
-
练习Transform变换
-
研究性能优化
-
使用Chrome开发者工具调试