CSS3 常用属性(四)-- 过渡、动画
过渡--transition
过渡这个属性的作用是当元素的样式发生变化时,使用动画的效果进行变化。有了过渡属性后,很多情况下,写一些简单效果,将不需要再借助 javascript 去计算。
transition 过渡属性简写,可以设置四个值
transition-property 过渡的CSS的名字,或是all
transition-duration 从一个状态到另一个状态的的时间
transition-timing-function 过渡效果的动画曲线,默认easy,linear是匀速,cubic-bezier(n,n,n,n)可以自定义动画曲线
transition-delay 延时
下面是利用CSS3过渡制作的一个旋转方块,鼠标移入方块后等待1s,然后10s 内匀速旋转 3600deg。
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <div class="box"></div> 9 <style> 10 .box{ 11 width: 200px; 12 height: 200px; 13 background: red; 14 margin: 0 auto; 15 transition:all 10s linear 1s; 16 } 17 .box:hover{ 18 transform: rotate(3600deg); 19 } 20 </style> 21 </body> 22 </html>
动画--animation
过渡是当元素状态发生改变时,触发了过渡的动画效果,而动画属性,则是当页面打开时,就开始执行了,一直到执行结束或页面关闭。
执行动画时,是需要先定义动画规则,有了规则,元素才可以按照预设规则执行动画效果。定义动画规则时,是使用 @keyframes 来设置。
用法如下:
@keyframes animation_name{ 0%{ width:200px; } 100%{ width:400px; } }
以上代码的规则是表示,规则名字是animation_name,规则是某个元素的宽度从 200px 到400px 。
animation属性可以添加的值有以下几条:
animation:动画属性的简写
animation-name:动画规则的名称
animation-duration:动画执行一个周期的时间
animation-timing-function:动画的运动曲线
animation-delay:延时
animation-iteration-count:动画执行次数,默认是1,infinite是无穷次
animation-direction:默认是normal,alternate表示可逆向播放
animation-play-state:动画运行或暂停,running/paused
下面是一个小例子,运行在浏览器中是,一个小方块,在打开页面后就开始匀速可逆性的转动,而且一直在转动不会停止,点击停止,再次点击,继续转动。
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <div class="box"></div> 9 <style> 10 .box{ 11 width: 200px; 12 height: 200px; 13 background: red; 14 margin: 0 auto; 15 animation:zhuan .5s linear infinite alternate; 16 } 17 @keyframes zhuan{ 18 0%{ 19 transform:rotate(0deg); 20 } 21 100%{ 22 transform:rotate(180deg); 23 } 24 } 25 </style> 26 </body> 27 </html> 28 <script> 29 var box = document.getElementsByClassName('box')[0]; 30 var flag = true; 31 box.onclick = function () { 32 if (flag) { 33 box.style.animationPlayState = 'paused'; 34 }else{ 35 box.style.animationPlayState = 'running'; 36 } 37 flag = !flag; 38 } 39 </script>