CSS 过渡(transition)是通过定义元素从起点的状态和结束点的状态,在一定的时间区间内实现元素平滑地过渡或变化的一种补间动画机制。你可以让属性的改变过程持续一段时间,而不是立即生效。

通过transition你可以决定哪个属性发生动画效果 (可以通过明确地列出这些属性),何时开始动画 (通过设置delay), 动画持续多久 (通过设置duration), 以及如何动画 (通过定义timing函数,比如线性地或开始快结尾慢)。

如何定义transition(过渡)

Transition又包含了四个子属性,分别为:

  • transition-property,变换延续的时间。
  • transition-duration,在延续时间段。
  • transition-timing-function,变换的速率变化。
  • transition-delay:变换延迟时间。

定义也非常灵活,先介绍一下这4个子属性:

transition-property(过渡属性)

  1. 可以单独指定元素哪些属性改变时执行过渡(transition),可以触发浏览器reflow或repaint的属性那些CSS属性可以应用动画。
  2. 可以指定为all,元素任何可过渡(transition)属性值变化时都将执行过渡(transition)效果。
  3. 可以指定为none时,动画立即停止。
  4. 初始默认值为all。

语法:

  1. transition-property: none | all | [ <IDENT> ] [, <IDENT> ]*

例如:

  1. transition-property: all;
  2. transition-property: none;
  3. transition-property: background-color;
  4. transition-property: background-color, height, width;

transition-duration(过渡持续时间)

  1. 用来指定元素过度过程的持续时间,时间值,1s(秒),4000ms(毫秒)。
  2. 其默认值是0s,也可以理解为无过渡(transition)效果。

语法:

  1. transition-duration: <time> [, <time>]*

例如:

  1. transition-duration: 2s;
  2. transition-duration: 4000ms;
  3. transition-duration: 1s, 800ms;

transition-timing-function(过渡时间函数)

指定CSS属性的变换速率,预设的有:ease, linear, ease-in, ease-out, ease-in-out, cubic-bezier(x1, y1, x2, y2),默认值时easy:

  1. ease:(逐渐变慢)默认值,等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0).
  2. linear:(匀速),等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0).
  3. ease-in:(加速),等同于贝塞尔曲线(0.42, 0, 1.0, 1.0).
  4. ease-out:(减速),等同于贝塞尔曲线(0, 0, 0.58, 1.0).
  5. ease-in-out:(加速然后减速),等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)
  6. cubic-bezier为通过贝塞尔曲线来计算“转换”过程中的属性值,如下曲线所示,通过改变P1(x1, y1)和P2(x2, y2)的坐标可以改变整个过程的Output Percentage。w3c文档中表述是所有值需在[0, 1]区域内,否则无效。但是在一些浏览器(Chrome,Firefox,Opera,IE11 预览版)下对P1(x1, y1)和P2(x2, y2)的坐标中的y1和y2并没有这个限制,曲线可以是负值,也可以取大于1的值。如果x1和x2是负数,或者大于1的值那么直接应用最终样式没有过渡效 果。而一些老版本的浏览器曲线值仍需在[0, 1]区域内,否则直接应用最终样式,比如Opera 12,和老版本的webkit浏览器,其他没测试。

transition-delay(过渡延迟函数)

指定一个动画开始执行的时间,即当改变元素属性值后多长时间开始执行“转换效果”,初始默认值为0;
语法:

  1. transition-delay: <time> [, <time>]*

 例如:

  1. transition-delay: 5s;
  2. transition-delay: 4000ms, 8000ms;
  3. transition-delay: -5s;

transition的简写

过渡可以简写。

语法:

  1. transition: <transition> [, <transition>]*
  2. <transition> = <transition-property> <transition-duration> <transition-timing-function> <transition-delay>

 例如:

  1. transition: background-color 3s linear 1s;
  2. transition:width 2s ease-in 2000ms,border 2s linear,height 5s, background-color 2s, transform 2s;
  3. transition: 4s ease-in-out;
  4. transition: 5s;

其他情况:当属性值列表长度不一致时

以 transition-property 的值列表长度为标准,如果某个属性值列表长度短于它的,则重复值以长度一致, 例如:

  1. div {
  2. transition-property: opacity, left, top, height;
  3. transition-duration: 3s, 5s;
  4. }

将按下面这样处理:

  1. div {
  2. transition-property: opacity, left, top, height;
  3. transition-duration: 3s, 5s, 3s, 5s;
  4. }

类似地,如果某个属性的值列表长于 transition-property 的,将被截短。 例如:

  1. div {
  2. transition-property: opacity, left;
  3. transition-duration: 3s, 5s, 2s, 1s;
  4. }

将按下面这样处理:

  1. div {
  2. transition-property: opacity, left;
  3. transition-duration: 3s, 5s;
  4. }

如何执行动画效果?

css3动画一般通过鼠标事件或者鼠标状态定义动画,通常我们可以用CSS中伪类、使用js修改元素的样式属性或追加删除样式来执行定义的动画。CSS中伪类执行动画包括:

动态伪类 起作用的元素 描述
:link 只有链接 未访问的链接
:visited 只有链接 访问过的链接
:hover 所有元素 鼠标经过元素
:active 所有元素 鼠标点击元素
:focus 所有可被选中的元素 元素被选中

上面的例子就是使用CSS中伪类执行动画的。   使用js修改元素的样式属性或追加删除样式来执行动画: 一般是鼠标事件操作和定时操作(window.setTimeout(),window.setInterval());

还应注意当一个元素使用过渡(transition)后,立即使用.appendChild()将其加入到DOM中或删除其display: none;。这被视为如果初始状态从来没有存在过那么元素总是在它的最终状态。克服这个限制最简单的办法是使用极少毫米数的window.setTimeout()。

关于:transitionend事件

transitionend 事件会在 CSS transition 过渡完成时触发. 当transition完成前被移除或者取消,比如移除css的transition-property 属性,此事件将不会被触发。哥浏览器下事件的支持情况。

Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
1.0 开始
webkitTransitionEnd
4.0 (2.0) 开始
transitionend
10开始
transitionend
10.5 开始
oTransitionEnd12 开始
otransitionend12.10 开始
transitionend

3.2 开始
webkitTransitionEnd

transitionend 事件会在 每个过渡属性完成时都触发该事件,而且浏览器下还有不一致的地方,比如border过渡的时候,webkit下只触发一次,输出:

过渡属性: border; 时间:2

而firefox输出:

过渡属性: border-left-color; 时间:2
过渡属性: border-bottom-color; 时间:2
过渡属性: border-right-color; 时间:2
过渡属性: border-top-color; 时间:2
过渡属性: border-left-width; 时间:2
过渡属性: border-bottom-width; 时间:2
过渡属性: border-right-width; 时间:2
过渡属性: border-top-width; 时间:2

建议在使用的时候判断是否所有的属性是否已经过渡完成,或者判断特定的属性名在执行该事件。

transition和animation的区别:

    1. transition完成后会保留过渡后的状态,而animation会跳至默认状态
    2. 后者更精细,具体到每一祯都可以控制,而前者是平滑过渡。

transition(动画属性)的更多相关文章

  1. CSS3中动画属性transform、transition和animation

    Transform:变形 在网页设计中,CSS被习惯性的理解为擅长表现静态样式,动态的元素必须借助于javascript才可以实现,而CSS3的出现改变了这一思维方式.CSS3除了增加革命性的创新功能 ...

  2. CSS3中动画属性transform、transition 和 animation

    CSS3中和动画有关的属性有三个 transform.transition 和 animation.下面来一一说明:        transform   从字面来看transform的释义为改变,使 ...

  3. css动画属性性能

    性能主要表现:流量.功耗与流畅度 在现有的前端动画体系中,通常有两种模式:JS动画与CSS3动画. JS动画是通过JS动态改写样式实现动画能力的一种方案,在PC端兼容低端浏览器中不失为一种推荐方案. ...

  4. CSS3的transition动画功能

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. CSS3展现精彩的动画效果 css3的动画属性

    热火朝天的css3无疑吸引了很多前端开发者的眼球,然而在css3中的动画属性则是新功能中的主打招牌,说到css3的动画属性不得不让人想起这三个属性:Transform﹑Transition﹑Anima ...

  6. 移动端 transition动画函数的封装(仿Zepto)以及 requestAnimationFrame动画函数封装(仿jQuery)

    移动端 css3 transition 动画 ,requestAnimationFrame 动画  对于性能的要求,h5优先考虑: 移动端 单页有时候 制作只用到简单的css3动画即可,我们封装一下, ...

  7. CSS动画属性性能详细介绍

    CSS动画属性会触发整个页面的重排relayout.重绘repaint.重组recomposite Paint通常是其中最花费性能的,尽可能避免使用触发paint的CSS动画属性,这也是为什么我们推荐 ...

  8. CSS3集锦之新增选择器、圆角、阴影、透明度、transition动画、transform变形、animation动画

    ---恢复内容开始--- 一.CSS3新增选择器 1.nth-chlid(n)用法 selector:nth-chlid(n)指找到第n个子元素并且该元素为selector标签 <!DOCTYP ...

  9. 解决transition动画与display冲突的几种方法

    如demo(如果没有显示,请查看源地址http://jsfiddle.net/ihardcoder/HNduT/2/)所示,基本的效果是在点击“Translate”按钮后,蓝色区域透明度变为0,然后隐 ...

随机推荐

  1. 【转】Linux系统安装Redis详细过程

    本文来源 https://blog.csdn.net/qq_20989105/article/details/76390367 ,转载前请先联系原作者并声明出处. 一.安装gcc 1.Redis在li ...

  2. Quartz,启动不立即执行问题

    我的Quartz 是2.2版本, 在java程序中写了两个加入计划方法 //// 添加简单计划任务 author:iresearch.com.cn -- jackical public static ...

  3. 线上环境HBASE-1.2.0出现oldWALs无法自动回收情况;

    正常情况下,hmaster会定期清理oldWALs文件夹,一般该文件大小也就几百兆,但是我们线上 环境出现了该文件没有自动回收情况,如图: 该目录占用hdfs空间多达7.6T,浪费空间: 后来经过多番 ...

  4. CCS实例,网页栏目

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. 命令行下对apk签名

    l创建key,需要用到keytool.exe (位于jdk安装目录\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk安装目录\bin目录下),把上两个软件所 ...

  6. mvc4 Forms验证存储 两种登录代码

    自己也不知道网上看到的第一种居多,第二种用到的人很少,第二种代码十分简洁,就是不清楚是否有安全隐患. 要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置: <a ...

  7. Selenium PageFactory页面工厂

    使用Selenium PageFactory页面工厂的好处是: 当页面元素的位置发生变化时, 我们只需要去修改id或者xpath, 而不用去修改测试用例. import org.openqa.sele ...

  8. LR创建数据源读取excel

    1 在window上创建数据源   2 创建对应的数据文件 excel 注:注意格式和底部的表单名称 3 Vegen中创建参数 注意:机器数据源选择windows的ODBC数据源 SQL查的是(she ...

  9. python3 安装win32clipboard 和 win32con 报No matching distribution found for win32con错误

    win32con.win32clipboad不能用pip install 安装,也不能够查找到这个包,原来,这个是pypiwin32的一部分,直接安装pypiwin32就可以了 pip install ...

  10. BZOJ1222[HNOI 2001]产品加工

    题面描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工 ...