css动画小技巧

css动画主要利用transform, transitionanimation 等属性实现。下面是一些动画小技巧的总结。

利用animation-delay负值

animation-delay 表示动画的延迟执行时间。0表示立即执行,正数表示延迟一定时间执行,负数表示跳转到特定时间点立即执行。

1
2
3
4
5
6
7
<div class="spinner">
<div class="line1"></div>
<div class="line2"></div>
<div class="line3"></div>
<div class="line4"></div>
<div class="line5"></div>
</div>

设置动画和对应的延时:

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
.spinner {
width: 50px;
height: 50px;
margin: 10px auto;
}
.spinner > div {
display: inline-block;
width: 5px;
height: 100%;
background: green;
animation: strechdelay 1.2s infinite ease-in-out;
}
.spinner .line2 {
animation-delay: -1.1s;
}
.spinner .line3 {
animation-delay: -1s;
}
.spinner .line4 {
animation-delay: -.9s;
}
.spinner .line5 {
animation-delay: -.8s;
}
@keyframes strechdelay {
0%,40%,100% {
transform: scaleY(.4)
}
20% {
transform: scaleY(1)
}
}

运行效果:

设置border

实现一个转圈的loader是非常简单的,只要设置一边的border 和执行循环旋转的动画即可。

1
<div class="loading"></div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.loading {
width: 50px;
height: 50px;
margin: 100px auto;
border: 5px solid #CCC;
border-left-color: green;
border-radius: 50%;
animation: load 1.1s infinite linear;
}
@keyframes load {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

效果:

利用transform-origin

transform-origin 属性可以改变元素转换的位置。在设置rotate 旋转的时候默认是都是center,如果设置x轴一定的偏移,就可以设置正圆运动。

1
2
3
 <div class="container">
<div class="circle"></div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.container {
width: 300px;
margin: 100px auto;
}
.circle {
width: 50px;
height: 50px;
background: green;
border-radius: 50%;
transform-origin: 150% center;
animation: rotate 1s infinite linear;
}
@keyframes rotate {
to {
transform: rotate(1turn);
}
}

运行效果:

通过这个属性可以设置许多不同轨迹的运动,比如椭圆运动和弧形运动等。