第100天:CSS3中animation动画详解
CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation;
一、Animation定义动画
CSS3的Animation是由“keyframes”这个属性来实现这样的效果,keyframes就是关键帧。下面先来看看Keyframes:
Keyframes语法规则:
@keyframes 动画名 {
from{开始状态}
to{结束状态}
}
调用
animation: 动画名称 持续时间 执行次数(infinite无限) alternate(来回) 运动曲线(linear线性) 延迟时间;
定义有两种方式,from......to和百分比。具体方法如下:
1 <style> 2 div{ 3 width: 200px; 4 height: 200px; 5 background-color: green; 6 margin: 100px; 7 /*调用动画:动画名 持续时间 执行次数(数字或无限) alternate(来回) 线性 延迟*/ 8 /* animation: move 2s infinite alternate linear 1s;*/ 9 10 animation: move2 4s infinite 1s; 11 } 12 13 /*定义动画*/ 14 @keyframes move { 15 from{ 16 transform: translateX(100px) rotate(0deg); 17 } 18 to{ 19 transform: translateX(800PX) rotate(360deg); 20 } 21 22 } 23 /*定义多组动画*/ 24 @keyframes move2 { 25 0%{ 26 transform: translate(100px,100px); 27 background-color: green; 28 border-radius: 0; 29 } 30 25%{ 31 transform: translate(600px,100px); 32 background-color: yellow; 33 } 34 50%{ 35 transform: translate(600px,600px); 36 background-color: blue; 37 } 38 75%{ 39 transform: translate(100px,600px); 40 background-color: orange; 41 } 42 100%{ 43 transform: translate(100px,100px); 44 background-color: red; 45 border-radius: 50%; 46 } 47 } 48 </style>
二、动画属性
- animation-name: move;/*动画名称*/
- animation-duration: 2s; /*持续时间*/
- animation-iteration-count:3 ; /*动画执行次数 无数次:infinite*/
- animation-direction: alternate;/*动画方向 normal 正常,alternate 反向*/
- animation-delay: 1s;/*动画延迟*/
- animation-fill-mode: forwards;/*设置动画结束后盒子的状态 forwards:动画结束后的状态 backwards:保持动画开始前的状态*/
- animation-timing-function: steps(3);/*运动曲线 linear线性 ease减速 ease-in 加速 ease-in-out先加速后减速 帧动画 steps()*/
三、案例
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>太阳系</title> 6 <style> 7 body{ 8 background-color: #000; 9 } 10 .sun{ 11 width: 100px; 12 height: 100px; 13 position: absolute; 14 left:50%; 15 top:50%; 16 transform: translate(-50%,-50%); 17 background-color: yellow; 18 box-shadow: 0 0 30px 3px gold; 19 border-radius: 50%; 20 } 21 .earth{ 22 width: 300px; 23 height: 300px; 24 position: absolute; 25 left:50%; 26 top:50%; 27 transform: translate(-50%,-50%); 28 border: 1px solid #ccc; 29 border-radius: 50%; 30 } 31 .earth::before{ 32 content: ''; 33 width: 40px; 34 height: 40px; 35 position: absolute; 36 left:0; 37 top:50%; 38 transform: translate(-50%,-50%); 39 background-color: dodgerblue; 40 border-radius: 50%; 41 } 42 .moon{ 43 width: 80px; 44 height: 80px; 45 position: absolute; 46 left:0; 47 top:50%; 48 transform: translate(-50%,-50%); 49 border-radius: 50%; 50 animation: rot 2s infinite linear; 51 } 52 .moon::before{ 53 content: ''; 54 width: 10px; 55 height: 10px; 56 position: absolute; 57 left:0; 58 top:50%; 59 transform: translate(-50%,-50%); 60 background-color: #fff; 61 border-radius: 50%; 62 } 63 .venus{ 64 width: 500px; 65 height: 500px; 66 position: absolute; 67 left:50%; 68 top:50%; 69 transform: translate(-50%,-50%); 70 border: 1px solid #ccc; 71 border-radius: 50%; 72 animation: rot 6s infinite linear; 73 } 74 .venus::before{ 75 content: ''; 76 width: 30px; 77 height: 30px; 78 position: absolute; 79 left:0; 80 top:50%; 81 transform: translate(-50%,-50%); 82 background-color: red; 83 border-radius: 50%; 84 } 85 .mars{ 86 width: 600px; 87 height: 600px; 88 position: absolute; 89 left:50%; 90 top:50%; 91 transform: translate(-50%,-50%); 92 border: 1px solid #ccc; 93 border-radius: 50%; 94 animation: rot 10s infinite linear; 95 } 96 .mars::before{ 97 content: ''; 98 width: 50px; 99 height: 50px; 100 position: absolute; 101 left:0; 102 top:50%; 103 transform: translate(-50%,-50%); 104 background-color: green; 105 border-radius: 50%; 106 } 107 @keyframes rot { 108 0%{ 109 transform:translate(-50%,-50%) rotate(0deg); 110 } 111 100%{ 112 transform:translate(-50%,-50%) rotate(360deg); 113 } 114 } 115 </style> 116 </head> 117 <body> 118 <div class="sun"></div> 119 <div class="earth"> 120 <div class="moon"></div> 121 </div> 122 <div class="venus"></div> 123 <div class="mars"></div> 124 </body> 125 </html>
运行效果: