在CSS3中,我们可以使用@keyframes规则来定义动画调用的是哪一个动画名称,即@keyframes定义的哪一个规则。
语法:
animation-name: 动画名;
说明:
注意,animation-name调用的动画名需要和@keyframes规则定义的动画名完全一致(区分大小写),如果不一致将不会产生任何动画效果。
举例:animation-name
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
@keyframes mycolor
{
0%{background-color:red;}
30%{background-color:blue;}
60%{background-color:yellow;}
100%{background-color:green;}
}
@keyframes mytransform
{
0%{border-radius:0;}
50%{border-radius:50px; transform:translateX(0);}
100%{border-radius:50px; transform:translateX(50px);}
}
div
{
width:100px;
height:100px;
background-color:red;
}
div:hover
{
animation-name:mytransform;
animation-duration:5s;
animation-timing-function:linear;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
浏览器预览效果如下图所示。
分析:
在这个例子中,我们使用@keyframes规则定义了两个动画:mycolor和mytransform。不过由于animation-name属性调用的是名为“mytransform”的动画。因此只有名为“mytransform”的动画会生效,而名为“mycolor”的动画则不会生效。
animation-name:mytransform;
animation-duration:5s;
animation-timing-function:linear;
上面代码可以简写为以下一句代码,在实际开发中我们也是采用这种简写形式。
animation: mytransform 5s linear;
此外,在mytransform动画中,在0%至50%之间,div元素的border-radius属性值从0变为50px,然后在50%至100%之间保持50px不变,并且水平向右移动50px。
大家自行测试一下下面两种方式,然后跟上面例子比较一下有何不同?考验大家观察能力的时候到了。
方式一:
@keyframes mytransform
{
0%{border-radius:0;}
50%{border-radius:50px; transform:translateX(0);}
100%{-webkit-transform:translateX(50px);}
}
方式二:
@keyframes mytransform
{
0%{border-radius:0;}
50%{border-radius:50px;}
100%{transform:translateX(50px);}
}
初学者可能还会有一个疑问:“每次我们都是定义鼠标移到元素上时(:hover),动画才会开始。如果想要在打开页面就能自动执行动画,那该怎么实现呢?”
其实很简单,我们只需要把调用动画的代码放在div元素,而不是在:hover伪类中,就能实现了,请看下面的例子。
举例:在div中调用动画
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
@keyframes mycolor
{
0%{background-color:red;}
30%{background-color:blue;}
60%{background-color:yellow;}
100%{background-color:green;}
}
@keyframes mytransform
{
0%{border-radius:0;}
50%{border-radius:50px; transform:translateX(0);}
100%{border-radius:50px; transform:translateX(50px);}
}
div
{
width:100px;
height:100px;
background-color:red;
animation-name:mytransform;
animation-duration:5s;
animation-timing-function:linear;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
浏览器预览效果如下图所示。
分析:
在这个例子中,当我们打开页面,动画就会自行执行了。此外,animation属性的几个子属性跟transition属性的几个子属性是非常相似的,在接下来章节学习中,我们经常对比一下,可以更好地理解和记忆。