第六章-动画
本章目标
- transform动画(重点)
- animation动画(重点、难点)
1.1什么是动画?
动画是使元素从一种样式逐渐变化为另一种样式的效果。可以改变任意多的样式任意多的次数。 动画是 CSS3 中最具颠覆性的特征之一,可通过设置多个节点来精确的控制一个或者一组动画,从而实现复杂的动画效果。
- transform:设置动画函数
- translate:平移动画,基于X、Y坐标重新定位元素的位置
- scale:缩放动画,可以使任意元素对象尺寸发生变化
- rotate:旋转动画,将元素旋转一定度数(单位deg),1个deg等于1度°
- skew:倾斜动画,将元素进行斜切倾斜(单位deg),1个deg等于1度°
- transition:设置动画过渡属性
- transition-property:设置过渡属性
- transition-duration:设置过渡时间
- 0.5s:默认值,单位秒
- 500ms:单位毫秒,1秒等于1000毫秒
- transition-timing-function:动画运动曲线
- linear:线性运动,平缓运动
- ease:默认值,开始缓慢,中间加速,结束缓慢
- ease-in:开始缓慢,中间和结束加速
- ease-out:结束缓慢,开始加速
- ease-in-out:开始和结束缓慢,中间加速
- transition-delay:动画延迟
- 0.5s:默认值,单位秒
- 500ms:单位毫秒,1秒等于1000毫秒
- transition简写方式
- transition:过渡属性 过渡时间 运动曲线 动画延迟;
演示案例:平移动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>平移动画</title> <style> div{ width: 150px; height: 100px; line-height: 100px; margin: 10px; text-align: center; border: solid 1px red; }
div:nth-child(1):hover{ background-color: aqua; transform: translateX(50px); } div:nth-child(2):hover{ background-color: aqua; transform: translateY(50px); }
div:nth-child(3):hover{ background-color: aqua; transform: translateZ(30px); }
div:nth-child(4):hover{ background-color: aqua; transform: translate(50px,30px); }
</style> </head> <body> <div>x轴平移</div> <div>y轴平移</div> <div>Z轴平移</div> <div>综合平移</div> </body> </html>
|
演示案例:缩放动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>缩放动画</title> <style> div{ width: 150px; height: 100px; line-height: 100px; background-color: aqua; margin: 10px; text-align: center; display: inline-block; } div:nth-child(1):hover{ transform:scaleX(2); }
div:nth-child(2):hover{ transform:scaleX(0.5); }
div:nth-child(3):hover{ transform:scaleY(2); }
div:nth-child(4):hover{ transform:scaleY(0.5); }
div:nth-child(5):hover{ transform:scale(2); }
div:nth-child(6):hover{ transform:scale(0.5); } </style> </head> <body> <div>放大2倍-x</div> <div>缩小为1/2-x</div>
<div>放大2倍-y</div> <div>缩小为1/2-y</div>
<div>放大2倍-综合</div> <div>缩小为1/2-综合</div>
</body> </html>
|
演示案例:旋转动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>旋转动画</title> <style> div { width: 150px; height: 100px; line-height: 100px; background-color: aqua; margin: 10px; text-align: center; display: inline-block; }
div:nth-child(1):hover {
transform: rotateX(30deg); }
div:nth-child(2):hover {
transform: rotateY(30deg); }
div:nth-child(3):hover {
transform: rotate(30deg); }
div:nth-child(4):hover {
transform-origin: 0px 0px; transform: rotate(30deg); } </style>
</head>
<body> <div>绕x轴旋转</div> <div>绕y轴旋转</div> <div>常规旋转-1</div> <div>常规旋转-2</div> </body>
</html>
|
演示案例:倾斜动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>倾斜动画</title> <style> div { width: 150px; height: 100px; line-height: 100px; margin: 10px; text-align: center; border: solid 1px red; display: inline-block; background-color: aqua; }
div:nth-child(1):hover {
transform: skewX(30deg); }
div:nth-child(2):hover {
transform: skewX(-30deg); }
div:nth-child(3):hover {
transform: skewY(30deg); }
div:nth-child(4):hover {
transform: skewY(-30deg); }
div:nth-child(5):hover {
transform:skew(30deg,40deg); } </style> </head>
<body> <div>X轴倾斜-1</div> <div>X轴倾斜-2</div>
<div>Y轴倾斜-1</div> <div>Y轴倾斜-2</div>
<div>综合倾斜</div> </body>
</html>
|
演示案例:综合:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> div { width: 100px; height: 100px; margin-bottom: 20px; transition: all 0.5s ease 0s; }
.dv1 { background-color: pink; }
.dv1:hover { transform: translate(50px, 50px); }
.dv2 { background-color: orange; }
.dv2:hover { transform: scale(1.5);
}
.dv3 { background-color: skyblue; }
.dv3:hover { transform: rotate(180deg);
}
.dv4 { background-color: tomato; }
.dv4:hover { transform: skew(30deg, 30deg); } </style> </head>
<body> <div class="dv1"></div> <div class="dv2"></div> <div class="dv3"></div> <div class="dv4"></div> </body>
</html>
|
演示案例:动画过度属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>动画属性过度</title> <style> div{ width: 150px; height: 150px; background-color: antiquewhite; text-align: center; line-height: 150px; margin: 10px; display: inline-block; }
div:nth-child(1):hover{
transition-property: width;
transition-duration: 5s;
transition-timing-function: ease-in;
width: 400px;
}
div:nth-child(2):hover{
transition-property: background-color;
transition-duration: 4s;
transition-delay: 2s;
transition-timing-function: ease-in;
background-color:green;
}
</style> </head> <body> <div>改变宽度</div> <div>改变背景颜色</div> </body> </html>
|
二、animation动画
2.1什么是animation动画?
- 动画使元素逐渐从一种样式变为另一种样式。
- 您可以随意更改任意数量的 CSS 属性。
- 如需使用 CSS 动画,您必须首先为动画指定一些关键帧。
- 关键帧包含元素在特定时间所拥有的样式。
2.2animation动画属性
- @keyframes 关键帧
- animation:设置盒子动画
- animation-name:调用动画(必须的)
- animation-duration:动画过渡时间(必须的)
- animation-iteration-count:动画重复次数
- number:2
- infinite:不停重复循环播放动画
- animation-timing-function:动画运动曲线
- linear:线性运动,平缓运动
- ease:默认值,开始缓慢,中间加速,结束缓慢
- ease-in:开始缓慢,中间和结束加速
- ease-out:结束缓慢,开始加速
- ease-in-out:开始和结束缓慢,中间加速
- animation-direction:动画运动方向
- normal:正常的,正向运动
- reverse:反向运动
- alternate:奇数往正方向运行动画,偶数往反向运行动画
- alternate-reverse:奇数往反方向运行动画,偶数往正向运行动画
- animation-delay:动画延迟
- 0.5s:默认值,单位秒
- 500ms:单位毫秒,1秒等于1000毫秒
- animation-play-state:动画播放状态
- animation-fill-mode: 动画停留位置
- backwards:动画播放完停留在开始状态;
- forwards:动画播放完停留在结束状态;
- animation简写方式
- animation: 动画名称 过渡时间 运动曲线 动画延迟 重复次数 运动方向 停留位置;
2.3@keyframes 规则
如果您在 @keyframes 规则中指定了 CSS 样式,动画将在特定时间逐渐从当前样式更改为新样式。
要使动画生效,必须将动画绑定到某个元素。
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> @keyframes move { from{ transform: translateX(0); } to{ transform: translateX(1000px); } } .dv{ width: 200px; height: 200px; background-color: pink; animation-name: move; animation-duration: 2s; animation-iteration-count: 1; animation-fill-mode:forwards; }
</style> </head> <body> <div class="dv"></div> </body> </html>
|
演示案例:animation动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>animation动画</title> <style> div { width: 200px; height: 200px; border: solid 1px red; margin: 20px; text-align: center; line-height: 200px; }
@keyframes Change1 {
from { background-color: red; }
to { background-color: green; } }
div:nth-child(1):hover { animation-name: Change1;
animation-duration: 5s; }
@keyframes Change2 { from { transform: translateX(0px); }
to { transform: translateX(1100px); } }
div:nth-child(2) { animation-name: Change2;
animation-duration: 5s;
animation-iteration-count: 3;
animation-direction: alternate;
animation-fill-mode: forwards;
}
div:nth-child(2):hover{ animation-play-state: paused; }
</style> </head>
<body> <div> 改变背景颜色 </div>
<div> 改变位置 </div> </body>
</html>
|
课后作业
练习1:制作照片墙
练习2:旋转按钮
练习3:制作多彩照片墙
练习4:QQ彩贝热销时装
练习5:QQ彩贝导航
练习6:QQ彩贝高级搜索
练习7:制作百度糯米购物信息导航
练习8:城市场景动画