manlili blog

CSS3实现文字淡入的动画

今天有空把css3里面动画研究一下,都是一些简单的东西,但是千里之行始于足下,我虽然走的慢,但是未停下前进的脚步,
下来看下我做的“淡入的文字”最终动态效果:
文字淡入
上面这个动画效果制作的过程是:
(1)先自定义一个透明度从0到1变化的动画,然后在animation中调用这个动画效果
(2)注意不同行文字出现的时间先后,这个通过animation中延时属性可以实现
(3)规定文字最终动态为动画的最终显示状态,否则文字显示完会自动消失,这个用animation-fill-mode可以实现

主体结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>淡入的文字</title>
<link type="text/css" rel="stylesheet" href="css/animate.css" />
</head>
<body>
<div class="fade-in-words">
<div class="first-words">山一程,水一程,</div>
<div class="second-words">身向榆关那畔行,</div>
<div class="third-words">夜深千帐灯。</div>
<div class="four-words">风一更,雪一更,</div>
<div class="five-words">聒碎乡心梦不成,</div>
<div class="six-words">故园无此声。</div>
</div>
</body>
</html>

由于只是单纯的练习css,暂时不牵扯太多js,文字都是提前布局好的,先来看下知识点

css3中动画属性

1
animation: name duration timing-function delay iteration-count direction;

其中各种属性含义

  • animation-name 规定需要绑定到选择器的 keyframe 名称。
  • animation-duration 规定完成动画所花费的时间,以秒或毫秒计。(必须设置)
  • animation-timing-function 规定动画的速度曲线。
  • animation-delay 规定在动画开始之前的延迟。
  • animation-iteration-count 规定动画应该播放的次数。
  • animation-direction 规定是否应该轮流反向播放动画。

animation-name

animation-name是@keyframes动画规定名称,关于keyframes用法如下

1
2
3
4
5
@keyframes mymove
{
from {width:10px;}
to {width:200px;}
}

或者

1
2
3
4
5
6
@keyframes mymove
{
0% {width:10px;}
50% {width: 150px}
100% {width:200px;}
}

结合本次写的主题是文字淡入,即透明度从0到1的动画,那么写一个fade-in的动画

1
2
3
4
5
@keyframes fade-in
{
0%{ opacity: 0;}
100%{opacity:1;}
}

animation-duration

动画完成所需花费的全部时间,默认值为0,如果想做动画,则时间不能为0,要不然看不到效果

animation-timing-function

animation-timing-function 使用名为三次贝塞尔(Cubic Bezier)函数的数学函数,来生成速度曲线。您能够在该函数中使用自己的值,也可以预定义的值

  • linear 动画从头到尾的速度是相同的。
  • ease 默认。动画以低速开始,然后加快,在结束前变慢。
  • ease-in 动画以低速开始。
  • ease-out 动画以低速结束。
  • ease-in-out 动画以低速开始和结束。
  • cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。
    关于贝塞尔曲线,网上有很多帮助生成曲线的工具,可以自己搜索一下

animation-delay

规定在动画开始之前的延迟。为负值代表跳过多少秒的动画立马开始

animation-iteration-count

  • n 定义动画播放次数的数值。
  • infinite 规定动画应该无限次播放。

animation-direction

  • normal 默认值。动画应该正常播放。
  • alternate 动画应该轮流反向播放。

结合本次写的淡入文字的题目,总体来说animate代码如下:

1
animation: fade-in 4s ease 0s 1;

animation-fill-mode

这个是最重要的,让动画停在某个状态,以本次淡入文字为例,文字透明状态从0变为1,最后需要停在1状态,需要用到这个属性

  • none 不改变默认行为。
  • forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。
  • backwards 在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。
  • both 向前和向后填充模式都被应用。

全部的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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
.fade-in-words{
width: 200px;
margin: 0 auto;
text-align: center;
}
/*自定义一个透明度从0到1的动画,它的名称是fade-in*/
@keyframes fade-in{
0%{ opacity: 0;}
100%{opacity:1;}
}
@-webkit-keyframes fade-in{
0%{ opacity: 0;}
100%{opacity:1;}
}
@-ms-keyframes fade-in{
0%{ opacity: 0;}
100%{opacity:1;}
}
@-o-keyframes fade-in{
0%{ opacity: 0;}
100%{opacity:1;}
}
@-moz-keyframes fade-in{
0%{ opacity: 0;}
100%{opacity:1;}
}
.first-words{
opacity: 0; /*实先规定文字的状态是不显示的*/
animation: fade-in 4s ease 0s 1; /*调用名称为fade-in的动画,全程动画显示时间4S,进入方式为ease,延时0S进入,播放次数1次*/
-webkit-animation: fade-in 4s ease 0s 1;
-moz-animation: fade-in 4s ease 0s 1;
-o-animation: fade-in 4s ease 0s 1;
-ms-animation: fade-in 4s ease 0s 1;
/*规定动画的最后状态为结束状态*/
animation-fill-mode:forwards;
-webkit-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
}
.second-words{
opacity: 0;
animation: fade-in 4s ease 2s 1;
-webkit-animation: fade-in 4s ease 2s 1;
-moz-animation: fade-in 4s ease 2s 1;
-o-animation: fade-in 4s ease 2s 1;
-ms-animation: fade-in 4s ease 2s 1;
/*规定动画的最后状态为结束状态*/
animation-fill-mode:forwards;
-webkit-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
}
.third-words{
opacity: 0;
animation: fade-in 4s ease 4s 1;
-webkit-animation: fade-in 4s ease 4s 1;
-moz-animation: fade-in 4s ease 4s 1;
-o-animation: fade-in 4s ease 4s 1;
-ms-animation: fade-in 4s ease 4s 1;
/*规定动画的最后状态为结束状态*/
animation-fill-mode:forwards;
-webkit-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
}
.four-words{
opacity: 0;
animation: fade-in 4s ease 6s 1;
-webkit-animation: fade-in 4s ease 6s 1;
-moz-animation: fade-in 4s ease 6s 1;
-o-animation: fade-in 4s ease 6s 1;
-ms-animation: fade-in 4s ease 6s 1;
/*规定动画的最后状态为结束状态*/
animation-fill-mode:forwards;
-webkit-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
}
.five-words{
opacity: 0;
animation: fade-in 4s ease 8s 1;
-webkit-animation: fade-in 4s ease 8s 1;
-moz-animation: fade-in 4s ease 8s 1;
-o-animation: fade-in 4s ease 8s 1;
-ms-animation: fade-in 4s ease 8s 1;
/*规定动画的最后状态为结束状态*/
animation-fill-mode:forwards;
-webkit-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
}
.six-words{
opacity: 0;
animation: fade-in 4s ease 10s 1;
-webkit-animation: fade-in 4s ease 10s 1;
-moz-animation: fade-in 4s ease 10s 1;
-o-animation: fade-in 4s ease 10s 1;
-ms-animation: fade-in 4s ease 10s 1;
/*规定动画的最后状态为结束状态*/
animation-fill-mode:forwards;
-webkit-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
}

面的程序我在注释里面都写得很清楚,感兴趣的可以看我写的注释,我觉得比较简单,没有难度,但是需要注意浏览器前缀的添加,否则你懂得.

请我喝杯果汁吧!