其实css3动画是就是2种实现,一种是transition,另一种就是animation。transition实现的话就是只能定制开始帧,和结束2帧;而animation实现的话可以写很多关键帧。
没有前戏,直进主题。
transition
包含4个值,例如:-webkit-transition:all .5s ease 1s;
分别顺序是(m代表必须): 变换的属性(m)、变换过渡的时间(m)、变换的速率、变换延时执行的时间。
来个小demo:
<!DOCTYPE html> <html> <head><title></title><meta charset="utf-8"><style>.transition {width:30px;height: 30px;line-height: 30px;border-radius: 50%;text-align: center;display: inline-block;background:lightblue;-webkit-transition:all .5s ease;transition:all .5s ease;color:#fff;}.transition:hover {-webkit-transform:rotate(360deg);transform:rotate(360deg);}</style> </head> <body><div class="transition">×</div> </body> </html>
应用例子:
http://skyweaver213.github.io/slide/widget/slide2/slide.html
http://skyweaver213.github.io/slide/widget/slide3/slide.html
animation:
就是一个动画对应一个keyframes,然后一个keyframes 里可以有N多个关键帧。例如一个keyframes里我们可以这样写:
@-webkit-keyframes go {0%, 100% {-webkit-transform: translateX(0);}50% {-webkit-transform: translateX(500px);} }
然后我们需要在应用这个keyframes的元素上写一个animation,
例如:-webkit-animation:go 2.5s ease infinite 0;
参数顺序分别是(m代表必须):动画名字(m)、执行的时间(m)、过渡的速率、执行多小次、延迟执行的时间
<!DOCTYPE html> <html> <head><title></title><style>.animation {width: 100px;height: 100px;display: block;background: pink;-webkit-animation: go 2.5s infinite;/*-webkit-animation: go 2.5s cubic-bezier(.25, -0.25, .75, 1.25) infinite;*/}@-webkit-keyframes go {0%, 100% {-webkit-transform: translateX(0);}50% {-webkit-transform: translateX(500px);}}</style> </head> <body><div class="animation"></div></body> </html>
应用deom:loading状态、三条线变箭头。
http://skyweaver213.github.io/slide/widget/slide1/slide.html
<!DOCTYPE html> <html> <head><title></title><style>.loading {position: relative;width: 40px;height: 40px;margin: 40px auto;-webkit-transform:rotate(165deg);}.loading:before, .loading:after {content: '';position: absolute;width: 8px;height: 8px;top: 50%;left: 50%;display: inline-block;border-radius: 4px;-webkit-transform: translate(-50%, -50%);}.loading:before {-webkit-animation:before 2s infinite;}.loading:after {-webkit-animation:after 2s infinite;}@-webkit-keyframes before {0% {width: 8px;box-shadow: 16px -8px rgba(225, 20, 98, 0.75), -16px 8px rgba(111, 202, 220, 0.75);}35% {width: 40px;box-shadow: 0 -8px rgba(225, 20, 98, 0.75), 0 8px rgba(111, 202, 220, 0.75);}70% {width: 8px;box-shadow: -16px -8px rgba(225, 20, 98, 0.75), 16px 8px rgba(111, 202, 220, 0.75);}100% {box-shadow: 16px -8px rgba(225, 20, 98, 0.75), -16px 8px rgba(111, 202, 220, 0.75);}}@-webkit-keyframes after {0% {height: 8px;box-shadow: 8px 16px rgba(61, 184, 143, 0.75), -8px -16px rgba(233, 169, 32, 0.75);}35% {height: 40px;box-shadow:8px 0 rgba(61, 184, 143, 0.75),-8px 0 rgba(233, 169, 32, 0.75);}70% {height: 8px;box-shadow: 8px -16px rgba(61, 184, 143, 0.75), -8px 16px rgba(233, 169, 32, 0.75);}100% {box-shadow: 8px 16px rgba(61, 184, 143, 0.75), -8px -16px rgba(233, 169, 32, 0.75);}}</style> </head> <body><div class="loading"></div> </body> </html>
变换成箭头:
<!DOCTYPE html> <html> <head><title></title><style>* {margin:0;padding:0;}.arrow_div {width: 100px;height: 100px;background: #000;position: relative;}.arrow {width: 33px;height: 4px;display: inline-block;background: #fff;position: absolute;left:0;right:0;}.arrow_body {margin: auto;top:40px;-webkit-animation: 2s linear body_kf infinite;}@-webkit-keyframes body_kf {0% {}30%, 50% {-webkit-transform: rotate(180deg);}80%, 100% {-webkit-transform: rotate(360deg);}}.sleft {width: 33px;height: 33px;border: transparent;position: absolute;top: 25px;margin: 0 auto;left: 0;right: 0;-webkit-animation: 2s linear sleft_kf infinite;}.sleft:before {content: '';width: 33px;height: 4px;display: inline-block;background: #fff;top: 0;position: absolute;-webkit-animation: 2s linear sleft_before_kf infinite;}@-webkit-keyframes sleft_kf {0% {}30%, 50% {-webkit-transform: rotate(222deg);}80%,100% {-webkit-transform: rotate(360deg);}}@-webkit-keyframes sleft_before_kf {0%, 100%{}20% {width: 28px;top: 1px;left: 3px;}25% {width: 26px;top: 2px;left: 6px;}30%, 40%, 50% {width: 22px;top: 3px;left: 8px;}80% {width: 33px;top:0;left:0;}}.sright {width: 33px;height: 33px;border: transparent;position: absolute;margin: 0 auto;left: 0;right: 0;top: 25px;position: absolute;-webkit-animation: 2s linear sright_kf infinite;}.sright:before {content: '';width: 33px;height: 4px;display: inline-block;background: #fff;bottom: 0;position: absolute;-webkit-animation: 2s linear sright_before_kf infinite;}@-webkit-keyframes sright_kf {0% {}30%, 50% {-webkit-transform: rotate(135deg);}80%,100% {-webkit-transform: rotate(360deg);}}@-webkit-keyframes sright_before_kf {0%,100% {}20% {width: 28px;bottom: 1px;right: 1px;}25% {width: 25px;bottom: 2px;right: 2px;}30%, 40%, 50% {width: 22px;bottom: 3px;right: 3px;}80% {width: 33px;bottom: 0;right:0;}}</style> </head> <body><div class="arrow_div"><div class="sleft"></div><i class="arrow arrow_body"></i><div class="sright"></div></div> </body> </html>