CSS3动画效果之transition

  CSS3中有两种方式实现动画,transition和[email protected]。

  两者的作用机制不一样:transition定义在可能要进行动画的元素上,对某些CSS属性进行监听,一旦CSS改变则进行动画;animation定义在马上要进行动画的元素上,一旦定义动画即进行。

  比如当鼠标悬浮的时候,某元素由红色改为绿色。使用transition和animation实现的共同代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div {
            width: 300px;
            height: 200px;
            background-color: red;
            /*不同的代码*/
        }
        div:hover {
            /*不同的代码*/
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

  使用transition的代码量更少,简介直观。

div {
    width: 300px;
    height: 200px;
    background-color: red;
    transition: background-color 2s;
}
div:hover {
    background-color: green;
}

  其中transition可作为监听器,监听background-color的改变,一旦改变则之前的值作为初始状态,后来的值作为终止状态,进行整个过渡动画。

  使用animation先要定义各种时间段的状态,这里只需要定义开始时间和结束时间,这个定义放在@keyframes中,anmation再调用这个keyframes。

div {
    width: 300px;
    height: 200px;
    background-color: red;
    -webkit-animation: test1 2s forwards;
}
div:hover {
    -webkit-animation: test2 2s forwards;
}
@-webkit-keyframes test1 {
    from {background-color: green;}
    to {background-color: red;}
}
@-webkit-keyframes test2 {
    from {background-color: red;}
    to {background-color: green;}
}

  这里定义了两套动画和关键帧,一套应用于普通状态,一套应用于鼠标悬浮状态。而且开始状态的CSS和元素之前的CSS没关系,需要重新定义。更需要注意的是,animation的表现和transition有一点不同,在页面加载后会先执行普通状态下的动画一次。乍看一下,似乎animation完全不如transition好用,对于这个简单的需求确实如此,但animation可以应付一些更复杂的需求。

  以下先从简单的开始,也就是transition。

  transition的意思不是动画,而是过渡,从一个状态过渡到另一个状态。这意味着这个动画的执行包含三个要素,初始状态、过渡、终止状态。简单的结构意味着简单的实现和受限制的功能。transiton只包含四个属性:

  1. transition-property: 要监听的CSS属性,如果有多个属性,用逗号分隔,且不能用transition简写。
  2. transition-duration: 动画执行的时间。
  3. transition-timing-function: 动画执行的方式。linear(匀速) / ease(先慢中快后慢,默认值) / ease-in(先慢后快) / ease-out(先快后慢) / ease-in-out(先慢中快后慢) / cubic-bezier(n, n, n, n) (贝塞尔曲线)
  4. transition-delay: 动画延迟执行的时间。

  首先用transition-property监听多个属性,代码如下:

div {
    width: 300px;
    height: 200px;
    background-color: red;
    transition-property: background-color, width;
    transition-duration: 2s;
}
div:hover {
    background: green;
    width: 500px;
}

  如果想移出鼠标不要立即执行动画,而是等0.5秒,则代码如下:

div {
    width: 300px;
    height: 200px;
    background-color: red;
    transition-property: background-color, width;
    transition-duration: 2s;
    transition-delay: .5s;
}
div:hover {
    background: green;
    width: 500px;
    transition-delay: 0;
}

  transition-delay需要定义在普通状态下的CSS中,因为移开鼠标后div立即恢复到普通状态,读取的是普通状态下的CSS属性。另外普通状态下的CSS属性会应用到hover状态下,导致鼠标悬浮的动画也延迟了0.5s,所以要在hover状态下将此属性定义为0。

  可以看出,悬浮鼠标和移出鼠标都会执行动画是因为定义在div中的transition-property和transition-duration同样作用在了div:hover中,所以可以定义transition: none移除某一阶段的动画。比如:

div {
    width: 300px;
    height: 200px;
    background-color: red;
    transition-property: none;
}
div:hover {
    background: green;
    width: 500px;
    transition-property: background-color, width;
    transition-duration: 2s;
}

  上面移除了移出鼠标后的动画效果。

  可见,定义在元素上的transition是可以作用于其伪类的,并在伪类状态下再度运行动画,那么animation是不是一样呢,比如:

div {
    width: 300px;
    height: 200px;
    background-color: red;
    -webkit-animation: test1 2s forwards;
}
@-webkit-keyframes test1 {
    from {background-color: green;}
    to {background-color: red;}
}

  下一篇animation会解释其不同的现象。

时间: 2024-10-28 01:46:04

CSS3动画效果之transition的相关文章

CSS3 动画效果带来的bug

css3 动画效果比如transition:all 2s linear;这种用来计算及时的物体坐标的话会带来一定的问题 比如把一个DIV从A点移动到B点.JS为DIV.style.left=B; 但是当我们使用上面的transition属性后,A点移动到B点是2秒内完成的,当执行JS代码时候,DIV还没到应该的位置,那么,在Div.style.left=B; console.log(Div.offsetLeft); 这样console出来的是起点坐标而不是终点坐标. 即使你让其JS线程主动挂起使

35个让人惊讶的 CSS3 动画效果演示

35个让人惊讶的 CSS3 动画效果演示 本文收集了35个惊人的 CSS3 动画演示,它们将证明 CSS3 Transform 和 Transition 属性的强大能力.CSS 是网页设计非常重要的一部分(基础教程qkxue.net),随着越来越多的浏览器对 CSS3 支持的不断完善(腾云科技ty300.com),设计师和开发者们有了更多的选择.如今,用纯 CSS 就可以实现各种各样很酷的效果,甚至是动画. 1. Pure CSS Coke Can 2. Colorful Clock 3. jQ

CSS自学笔记(14):CSS3动画效果

在CSS3中也新增了一些能够对元素创建动画处理的属性.通过这些新增的属性,我们可以实现元素从一种样式变换成另一种样式时为元素添加动态效果,我们就可以取代网页中的动态图片.flash动画和JavaScript了. CSS3中新增的动画效果的属性以及主流浏览器支持情况 属性 浏览器支持 transition IE Firefox Chrome Safari(-webkit-) Opera @keyframes IE Firefox Chrome(-webkit-) Safari(-webkit-)

css3 动画效果

css3 动画效果  做css3的动画效果,w3c的文档的文档已有事例.动画事例,也是看了半天才搞出来. 下面我就是结合个人理解进行介绍.最后个人做的一个动画demo css3的动画事例主要需要理解animation:可以算是动画的声明部分.你可以把动画属性的内容全部写到后边,动画的属性主要有:animation-name animation-duration还有一些动画延时,动画播放次数.这些要根据动画效果进行添加. 格式有:animation:animation-name animation

第八十三节,CSS3动画效果

CSS3动画效果 学习要点: 1.动画简介 2.属性详解 3.简写和版本 本章主要探讨HTML5中CSS3的动画效果,可以通过类 Flash那样的关键帧模式控制运行. 一.动画简介     CSS3提供了类 Flash关键帧控制的动画效果,通过animation属性实现.     animation实现动画效果主要由两个部分组成:     1.通过类 Flash动画中的关键帧声明一个动画:     2.在animation属性中调用关键帧声明的动画.     CSS3提供的animation是一

Bounce.js – 快速创建漂亮的 CSS3 动画效果

Bounce.js 是一个用于制作漂亮的 CSS3 关键帧动画的 JavaScript 库,使用其特有的方式生成的动画效果.只需添加一个组件,选择预设,然后你就可以得到一个短网址或者导出为 CSS 代码. 您可能感兴趣的相关文章 太赞了!超炫的页面切换动画效果[附源码下载] 创意无限!一组网页边栏过渡动画[附源码下载] 好东西!动感的页面加载动画效果[附源码下载] 使用 CSS3 实现3D图片滑块效果[附源码下载] 时尚设计!三种奇特网格加载效果[附源码下载] 源码下载      在线演示 本文

鼠标悬停css3动画效果

下载Demo 效果预览 html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠标悬停css3动画效果</title> <link href="css/lanrenzhijia.css" rel="stylesheet" type="text/

css3 动画效果与公司框架简易动画的差异

先看一下该网站的效果 http://2014guangzhouchezhan.dongfeng-citroen.com.cn/mobile/ 该站里面的动画效果由简易动画与css3动画2种方式混合达到的. 一.特点与差异. 1.简易动画直接通过对dom元素追加class类名与属性参数 像这样 <img src="images/page02/text01.png"  class="text01 cmn-animate" cfg="{action:[{s

animate.css 一些常用的CSS3动画效果

大家已经开始在项目中使用一些CSS3动画效果了吧,这让网站在高端浏览器上看起来很上流.animate.css是一个老外做的各种CSS3动画的合集,比较全,也很炫,大家可以参考学习一下. 项目主页:http://daneden.me/animate/ 自定义下载样式:http://daneden.me/animate/build/ git地址:https://github.com/daneden/animate.css