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. C# 集合之Dictionary详解

    开讲. 我们知道Dictionary的最大特点就是可以通过任意类型的key寻找值.而且是通过索引,速度极快. 该特点主要意义:数组能通过索引快速寻址,其他的集合基本都是以此为基础进行扩展而已. 但其索 ...

  2. Android面试收集录 Android组件

    1.请说出Android SDK支持哪些方式显示富文本信息? 使用TextView组件可以显示富文本信息,如果要实现图文混排,需实现ImageGetter接口 使用WebView组件显示HTML页面 ...

  3. MySQL基础复习

    三范式定义 1NF:每个数据项都是最小单元,不可分割,其实就是确定行列之后只能对应一个数据. 2NF:每一个非主属性完全依赖于候选码(属性组的值能唯一的标识一个元组,但是其子集不可以).  3NF: ...

  4. Git使用之一:创建仓储和提交文件

    一.前期工作:   1.准备自己的文件夹用于同步文件   2.准备自己的Git账号,并设置好项目(推荐使用国产的码云)   3.安装Git软件 (下载地址: 32-bit Git for Window ...

  5. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(五):测试项目

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  6. Delphi中ModalResult的使用

    Delphi中ModalResult的功能非常实用. 在自己设计的Dialog界面中,选择相应的按钮,设置按钮的 ModalResult属性为mrOK .mrCancel 等.这样的设置,当按下该按钮 ...

  7. struts2官方 中文教程 系列七:消息资源文件

    介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...

  8. 高德API+.NET解决租房问题(JS相关)

    在线地址:58同城品牌公寓高德搜房 Github地址:https://github.com/liguobao/58HouseSearch 知乎专栏(点赞用的):高德API+Python解决租房问题(. ...

  9. React+DvaJS 之 hook 路由权限控制

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP 活动 招聘 ITeye 写博客 发Chat 登录注册 原 React+DvaJS 之 hook 路由权限控制 20 ...

  10. react实现页面切换动画效果

    一.前情概要 注:(我使用的路由是react-router4)     如下图所示,我们需要在页面切换时有一个过渡效果,这样就不会使页面切换显得生硬,用户体验大大提升:     but the 问题是 ...