码迷,mamicode.com
首页 > Web开发 > 详细

CSS3 动画

时间:2016-07-15 11:16:33      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

1、CSS3 @keyframes 规则

  如需在 CSS3 中创建动画,您需要学习 @keyframes 规则。@keyframes 规则用于创建动画。在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。

2、浏览器支持

技术分享

   Internet Explorer 10、Firefox 以及 Opera 支持 @keyframes 规则和 animation 属性。

   Chrome 和 Safari 需要前缀 -webkit-。

  注释:Internet Explorer 9,以及更早的版本,不支持 @keyframe 规则或 animation 属性。

3、CSS3 动画

  当您在 @keyframes 中创建动画时,请把它捆绑到某个选择器,否则不会产生动画效果。通过规定至少以下两项 CSS3 动画属性,即可将动画绑定到选择器:

  (1)、规定动画的名称

  (2)、规定动画的时长

  实例:把 "myfirst" 动画捆绑到 div 元素,时长:5 秒,背景颜色由红色逐渐变为黄色再变为红色。

<!DOCTYPE html>
<html>
<head>
<style>
div
{
width:100px;
height:100px;
background:red;
animation:myfirst 5s;
-moz-animation:myfirst 5s; /* Firefox */
-webkit-animation:myfirst 5s; /* Safari and Chrome */
-o-animation:myfirst 5s; /* Opera */
}
@keyframes myfirst
{
from {background:red;}
to {background:yellow;}
}
@-moz-keyframes myfirst /* Firefox */
{
from {background:red;}
to {background:yellow;}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
from {background:red;}
to {background:yellow;}
}
@-o-keyframes myfirst /* Opera */
{
from {background:red;}
to {background:yellow;}
}
</style>
</head>
<body>
<div></div>
<p><b>注释:</b>本例在 Internet Explorer 中无效。</p>
</body>
</html>

   注释:您必须定义动画的名称和时长。如果忽略时长,则动画不会允许,因为默认值是 0。

 技术分享技术分享

4、什么是 CSS3 中的动画?

  动画是使元素从一种样式逐渐变化为另一种样式的效果。您可以改变任意多的样式任意多的次数。请用百分比来规定变化发生的时间,或用关键词 "from" 和 "to",等同于 0% 和 100%。0% 是动画的开始,100% 是动画的完成。为了得到最佳的浏览器支持,您应该始终定义 0% 和 100% 选择器。

实例:当动画为 25% 及 50% 时改变背景色,然后当动画 100% 完成时再次改变,同时改变位置。

<!DOCTYPE html>
<html>
<head>
<style>
div
{
width:100px;
height:100px;
background:red;
position:relative;
animation:myfirst 5s;
-moz-animation:myfirst 5s; /* Firefox */
-webkit-animation:myfirst 5s; /* Safari and Chrome */
-o-animation:myfirst 5s; /* Opera */
}
@keyframes myfirst
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
@-moz-keyframes myfirst /* Firefox */
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
@-o-keyframes myfirst /* Opera */
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<p><b>注释:</b>本例在 Internet Explorer 中无效。</p>
<div></div>
</body>
</html>

技术分享    技术分享


技术分享              技术分享

 

 

5、CSS3 动画属性

(1)、@keyframes 规定动画

   目前浏览器都不支持 @keyframes 规则。Firefox 支持替代的 @-moz-keyframes 规则。Opera 支持替代的 @-o-keyframes 规则。Safari 和 Chrome 支持替代的 @-webkit-keyframes 规则。

   语法: @keyframes animationname {keyframes-selector {css-styles;}}

    animationname:必需。定义动画的名称。

    keyframes-selector:必需。动画时长的百分比。合法的值:0-100%,from(与 0% 相同)to(与 100% 相同)

    css-styles:必需。一个或多个合法的 CSS 样式属性。

(2)、animation所有动画属性的简写属性,除了 animation-play-state 属性

   animation 属性是一个简写属性,用于设置六个动画属性:animation-name、animation-duration、animation-timing-function、animation-delay、animation-iteration-count、animation-direction

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

(3)、animation-name规定 @keyframes 动画的名称

    语法:animation-name: keyframename|none;

     keyframename:规定需要绑定到选择器的 keyframe 的名称。

     none:规定无动画效果(可用于覆盖来自级联的动画)。

(4)、animation-duration规定动画完成一个周期所花费的秒或毫秒。默认是 0

    语法:animation-duration: time;

(5)、animation-timing-function规定动画的速度曲线。默认是 "ease"

    语法:animation-timing-function: value;

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

     linear:动画从头到尾的速度是相同的。

     ease默认:动画以低速开始,然后加快,在结束前变慢。

     ease-in:动画以低速开始。

     ease-out:动画以低速结束。

     ease-in-out:动画以低速开始和结束。

     cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。

(6)、animation-delay 规定动画何时开始。默认是 0

    语法:animation-delay: time

(7)、animation-iteration-count 规定动画被播放的次数。默认是 1

    语法:animation-iteration-count: n|infinite;

      n:定义动画播放次数的数值。

      infinite:规定动画应该无限次播放。

(8)、animation-direction规定动画是否在下一周期逆向地播放

    语法:animation-direction: normal|alternate;

      normal:默认值。动画应该正常播放。

      alternate:动画应该轮流反向播放。

(9)、animation-play-state 规定动画是否正在运行或暂停

    语法:animation-play-state: paused|running;

      paused:规定动画已暂停。

      running:规定动画正在播放。

(10)、animation-fill-mode规定对象动画时间之外的状态

   语法:animation-fill-mode : none | forwards | backwards | both;

      none:不改变默认行为。

      forwards:当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。

      backwards:在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。

      both:向前和向后填充模式都被应用。

实例:运行名为 myfirst 的动画,其中设置了所有动画属性:

<!DOCTYPE html>
<html>
<head>
<style>
div
{
width:100px;
height:100px;
background:red;
position:relative;
animation-name:myfirst;
animation-duration:5s;
animation-timing-function:linear;
animation-delay:2s;
animation-iteration-count:infinite;
animation-direction:alternate;
animation-play-state:running;
/* Firefox: */
-moz-animation-name:myfirst;
-moz-animation-duration:5s;
-moz-animation-timing-function:linear;
-moz-animation-delay:2s;
-moz-animation-iteration-count:infinite;
-moz-animation-direction:alternate;
-moz-animation-play-state:running;
/* Safari and Chrome: */
-webkit-animation-name:myfirst;
-webkit-animation-duration:5s;
-webkit-animation-timing-function:linear;
-webkit-animation-delay:2s;
-webkit-animation-iteration-count:infinite;
-webkit-animation-direction:alternate;
-webkit-animation-play-state:running;
/* Opera: */
-o-animation-name:myfirst;
-o-animation-duration:5s;
-o-animation-timing-function:linear;
-o-animation-delay:2s;
-o-animation-iteration-count:infinite;
-o-animation-direction:alternate;
-o-animation-play-state:running;
}
@keyframes myfirst
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
@-moz-keyframes myfirst /* Firefox */
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
@-o-keyframes myfirst /* Opera */
{
0%   {background:red; left:0px; top:0px;}
25%  {background:yellow; left:200px; top:0px;}
50%  {background:blue; left:200px; top:200px;}
75%  {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<p><b>注释:</b>本例在 Internet Explorer 中无效。</p>
<div></div>
</body>
</html>

技术分享        技术分享

技术分享             技术分享

 

6、手机APP启动界面动画实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello MUI</title>
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="stylesheet" href="../css/mui.min.css">
<style>
#close {
position: absolute;
width: 160px;
left: 50%;
margin-left: -80px;
bottom: 15%;
padding: 10px;
color: #fff;
border-color: #fff;
}
.item-logo {
width: 100%;
height: 100%;
position: relative;
}
.item-logo a {
width: 200px;
height: 200px;
display: block;
border: 1px solid #FFFFFF;
border-color: rgba(255, 255, 255, 0.5);
text-align: center;
line-height: 200px;
border-radius: 50%;
font-size: 40px;
color: #fff;
position: absolute;
top: 15%;
left: 50%;
margin-left: -100px;
}
.animate {
position: absolute;
left: 0;
bottom: 15%;
width: 100%;
color: #fff;
display: -moz-box;
}
.animate h2 {
text-align: center;
margin-bottom: 20px;
}
.animate li {
width: 50%;
height: 30px;
line-height: 30px;
list-style: none;
font-size: 16px;
text-align: right;
}
.animate li:nth-child(3) {
text-align: left;
float: right;
}
.animated {
-webkit-animation-duration: 1s;
-webkit-animation-play-state: paused;
-webkit-animation-fill-mode: both;
}
.guide-show .bounceInDown {
-webkit-animation-name: bounceInDown;
-webkit-animation-play-state: running;
-webkit-animation-delay: 1s;
display: block;
}
.guide-show .bounceInLeft {
-webkit-animation-name: bounceInLeft;
display: block;
-webkit-animation-play-state: running;
}
.guide-show .bounceInRight {
-webkit-animation-name: bounceInRight;
display: block;
-webkit-animation-play-state: running;
-webkit-animation-delay: 0.5s;
}
@-webkit-keyframes bounceInDown {
0%, 60%, 75%, 90%, 100% {
-webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
}
0% {
opacity: 0;
-webkit-transform: translate3d(0, -3000px, 0);
transform: translate3d(0, -3000px, 0);
}
60% {
opacity: 1;
-webkit-transform: translate3d(0, 25px, 0);
transform: translate3d(0, 25px, 0);
}
75% {
-webkit-transform: translate3d(0, -5px, 0);
transform: translate3d(0, -5px, 0);
}
90% {
-webkit-transform: translate3d(0, 3px, 0);
transform: translate3d(0, 3px, 0);
}
100% {
-webkit-transform: none;
transform: none;
}
}
@-webkit-keyframes bounceInLeft {
0%, 60%, 75%, 90%, 100% {
-webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
}
0% {
opacity: 0;
-webkit-transform: translate3d(-3000px, 0, 0);
transform: translate3d(-3000px, 0, 0);
}
60% {
opacity: 1;
-webkit-transform: translate3d(25px, 0, 0);
transform: translate3d(25px, 0, 0);
}
75% {
-webkit-transform: translate3d(-10px, 0, 0);
transform: translate3d(-10px, 0, 0);
}
90% {
-webkit-transform: translate3d(5px, 0, 0);
transform: translate3d(5px, 0, 0);
}
100% {
-webkit-transform: none;
transform: none;
}
}
@-webkit-keyframes bounceInRight {
0%, 60%, 75%, 90%, 100% {
-webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
}
0% {
opacity: 0;
-webkit-transform: translate3d(3000px, 0, 0);
transform: translate3d(3000px, 0, 0);
}
60% {
opacity: 1;
-webkit-transform: translate3d(-25px, 0, 0);
transform: translate3d(-25px, 0, 0);
}
75% {
-webkit-transform: translate3d(10px, 0, 0);
transform: translate3d(10px, 0, 0);
}
90% {
-webkit-transform: translate3d(-5px, 0, 0);
transform: translate3d(-5px, 0, 0);
}
100% {
-webkit-transform: none;
transform: none;
}
}
</style>
</head>
 
<body>
<div id="slider" class="mui-slider mui-fullscreen" style="background-color: black;">
<div class="mui-slider-group">
<!-- 第一张 -->
<div class="mui-slider-item">
<div class="item-logo" style="background-color: #D74B28">
<a href="#">
MUI
</a>
<div class="animate guide-show">
<h2 class="animated bounceInDown">小巧高能</h2>
<li class="animated bounceInLeft">几十K的JS和CSS</li>
<li class="animated bounceInRight">上百种控件样式和模板</li>
</div>
</div>
</div>
<!-- 第二张 -->
<div class="mui-slider-item">
<div class="item-logo" style="background-color: #02C1ED;">
<a href="#">
MUI
</a>
<div id="tips-2" class="animate mui-hidden">
<h2 class="animated bounceInDown">原生UI</h2>
<li class="animated bounceInLeft">以iOS原生UI为基础</li>
<li class="animated bounceInRight">补充Android特有样式</li>
</div>
</div>
</div>
<!-- 第三张 -->
<div class="mui-slider-item">
<div class="item-logo" style="background-color: #67C962;">
<a href="#">
MUI
</a>
<div id="tips-3" class="animate mui-hidden">
<h2 class="animated bounceInDown">流畅体验</h2>
<li class="animated bounceInLeft">下拉刷新、转场动画</li>
<li class="animated bounceInRight">整个世界都流畅了</li>
</div>
</div>
</div>
<!-- 第四张 -->
<div class="mui-slider-item">
<div class="item-logo" style="background-color: #FCD208;">
<a href="#">
MUI
</a>
<div class="animate">
<button id='close' class="mui-btn mui-btn-warning mui-btn-outlined">立即体验</button>
</div>
</div>
</div>
</div>
<div class="mui-slider-indicator">
<div class="mui-indicator mui-active"></div>
<div class="mui-indicator"></div>
<div class="mui-indicator"></div>
<div class="mui-indicator"></div>
</div>
</div>
<script src="../js/mui.min.js"></script>
<script>
mui.back = function() {};
mui.plusReady(function() {
if(mui.os.ios){
plus.navigator.setFullscreen(true);
}
plus.navigator.closeSplashscreen();
});
//立即体验按钮点击事件
document.getElementById("close").addEventListener('tap', function(event) {
plus.storage.setItem("lauchFlag", "true");
plus.navigator.setFullscreen(false);
plus.webview.currentWebview().close();
}, false);
//图片切换时,触发动画
document.querySelector('.mui-slider').addEventListener('slide', function(event) {
 	//注意slideNumber是从0开始的;
 	var index = event.detail.slideNumber+1;
 	if(index==2||index==3){
 	var item = document.getElementById("tips-"+index);
 	if(item.classList.contains("mui-hidden")){
 	item.classList.remove("mui-hidden");
 	item.classList.add("guide-show");
 	}
 	}
});
</script>
</body>
</html>

技术分享             技术分享


技术分享           技术分享

 

 

 

 

 

CSS3 动画

标签:

原文地址:http://blog.csdn.net/qq_27626333/article/details/51910927

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!