第14章   使用CSS3动画

【学习重点】

  • 设计2D动画
  • 设计3D动画
  • 设计过渡动画
  • 设计帧动画
  • 能够使用CSS3动画功能设计页面特效样式

14.1  设计2D动画

CSS2D Transform表示2D变换,目前获得了各主流浏览器的支持;CSS3D Transform支持程度不是很完善,仅能够在部分浏览器中获得支持。语法如下:

transform:none | <transform-function> [ <transform-function>]*;
  • transform属性的初始值是none,适用于块元素和行内元素。
  • <transform-function>设置变换函数。可以是一个或多个变换函数列表。transform-function函数包括matrix()、translate()、scale()、scaleX()、scaleY()、rotate()、skewX()、skewY()、skew()等。

    关于这些常用变换函数的功能简单说明如下:

    • matrix():定义矩阵变换,即基于X和Y坐标重新定位元素的位置;
    • translate():移动元素对象,即基于X和Y坐标重新定位元素;
    • scale():缩放元素对象,可以使任意元素对象尺寸发生变化,取值包括正数和负数,以及小数;
    • rotate():旋转元素对象,取值为一个度数值;
    • skew():倾斜元素对象,取值为一个度数值。

14.1.1 定义旋转

rotate()函数能够旋转指定的元素对象,主要在二维空间内进行操作,接收一个角度参数值,用来指定旋转的幅度,语法如下:

rotate(<angle>);

14.1.2 定义缩放

scale()函数能够缩放元素大小,该函数包含两个参数值,分别用来定义宽和高缩放比例。语法如下:

scale(<number>[, <number>]);

<number>参数值可以是正数、负数和小数。正数值基于指定的宽度和高度将放大元素。负数值不会缩小元素,而是翻转元素(如文字反转),然后再缩放元素。使用小于1的小数可以缩放元素。如果第2个参数省略,则第二个参数等于第一个参数值。

14.1.3 定义移动

translate()函数能够重新定位元素的坐标,该函数包含两个参数值,分别用来定义x轴和y轴坐标。语法如下:

translate(<translation-value>[,<translation-value>]);

14.1.4 定义倾斜

skew()函数能够让元素倾斜显示,该函数包含两个参数值,分别用来定义x轴和y轴坐标倾斜的角度,语法如下:

skew(<angle> [, <angle>]);

<angle>参数表示角度值,第一个参数表示相对于x轴进行倾斜,第二个参数表示相对于y轴进行倾斜,如果省略了第二个参数,则第二个参数值默认值为0。

14.1.5 定义矩阵

matrix()是矩阵函数,调用该函数可以非常灵活地实现各种变换效果。matrix()函数的语法如下:

matrix(<number>,<number>,<number>,<number>,<number>,<number>);

六个参数分别负责控制x轴缩放,x轴倾斜,y轴倾斜,y轴缩放,x轴移动,y轴移动。使用前面4个参数的配合,可以实现旋转效果。

14.1.6 定义变换原点

CSS变换的原点默认为对象的中心点,如果要改变这个中心点,可以使用transform-origin属性进行定义。语法如下:

transform-origin:[[<percentage>|<length>| left | center | right] [<percentage>|<length>| top | center | bottom]?] | [[ left | center | right ] || [ top | center | bottom ]]

transform-origin属性的初始值为50% 50%,适用于块状元素和内联元素。transform-origin接收两个参数,可以是百分比、em、px等具体的值,也可以是left、center、right或者top、middle、bottom等描述性关键字。

14.2  设计3D变换

CSS3的3D变换主要包括的函数如下:

  • 3D位移:包括translateZ()和translate3d()函数;
  • 3D旋转:包括rotateX()、rotateY()、rotateZ()和rotate3d()函数;
  • 3D缩放:包括scaleZ()和scale3d()函数;
  • 3D矩阵:包含matrix3d()函数。

考虑到浏览器兼容性,主流浏览器对3D变换支持不是很好,具体如下:

  • IE10+,3D变换部分未得到很好支持;
  • Firefox10.0至Firefox15.0版本浏览器,在使用3D变换时应添加私有属性-moz-,Firefox16.0+版本无需添加私有属性;
  • Chrome12.0+版本中使用3D变换时需要添加私有属性-webkit-;
  • Safari4.0+版本中使用3D变换时需要添加私有属性-webkit-;
  • Opera15.0+版本才开始支持3D变换,使用时需要添加私有属性-webkit-;
  • 移动设备中iOS Safari3.2+、Android Browser3.0+、Blackberry Browser7.0+、Opera Mobile14.0+、Chrome for Android25.0+都支持3D变换,但在使用时需要添加私有属性-webkit-,Firefox for Android19.0+支持3D变换,武学添加浏览器私有属性。

14.2.1 定义位移

在CSS3中,3D位移主要包括两种函数translateZ()和translate3d()。translate3d()函数是一个元素在三维空间移动。语法如下:

translate3d(tx,ty,tz);
  • tx:代表横向坐标位移向量的长度;
  • ty:代表纵向坐标位移向量的长度;
  • tz:代表Z轴位移向量的长度,不能为一个百分比值。

当tz值越大,元素离浏览者更近,视觉上元素变得更大;反之其值越小,元素离浏览者更远。

translateZ()函数可以让元素在Z轴进行位移,用法如下:

translateZ(t);

参数值指的是Z轴的向量位移长度。

使用translateZ()函数可以让元素在Z轴进行位移,当其值为负值时,元素在Z轴越离越远,元素变小;反之,当t为正值时,元素在Z轴上越移越近,元素变大。

在实际应用中,translateZ(t)函数等效于translate3d(0,0,tz)。

14.2.2 定义缩放

CSS3 3D缩放主要有scaleZ()和scale()两种函数,当scale3d()中X轴和Y轴同时为1,即scale3d(1,1,sz),效果等同于scaleZ(sz)。

默认值为1,当值大于1时,元素放大;反之小于1大于0.01时,元素缩小。语法如下:

scale3d(sx,sy,sz);
  • sx:横向缩放比例;
  • sy:纵向缩放比例;
  • sz:Z轴缩放比例。
scaleZ(s);

s指元素每个点在Z轴的比例。

scaleZ(-1)定义了一个原点在Z轴的对称点(按照元素的变换原点)。

scaleZ()和scale3d()函数单独使用时没有任何效果,需要配合其它的变换函数一起使用才有效果。

14.2.3 定义旋转

在3D变换中,可以让元素在任何轴旋转。CSS3新增了3个旋转函数:rotateX()、rotateY()和rotateZ()。基本语法为:

rotateX(a);
rotateY(a);
rotateZ(a);

a指的是一个旋转角度值,可以是正值也可以是负值。正值表示元素围绕轴顺时针旋转,反之逆时针旋转。

还有一个rotate3d()函数,在3D空间,旋转一个[x,y,z]向量并经过元素原点。语法如下:

rotate3d(x,y,z,a);

x、y、z是0到1之间的数值,主要用来描述元素围绕X/Y/Z轴旋转的矢量值;a是一个角度值,主要用来指定元素在3D空间旋转的角度,为正值则元素顺时针旋转,反之逆时针旋转。

14.3  设计过渡动画

CSS3使用transition属性定义过渡动画,目前获得所有浏览器支持。

14.3.1 设置过渡属性

transition-property属性用来定义过渡动画的CSS属性名称,语法如下:

transition-property: none | all | [<IDENT> ] [ ',' <IDENT> ]*;
  • none:表示没有元素;
  • all:默认值,表示针对所有元素,包括:before和:after伪元素;
  • IDENT:指定CSS属性列表。

14.3.2 设置过渡时间

transition-duration属性用来定义转换动画的时间长度,语法如下:

transition-duration:<time>[ ,<time>]*;

初始值为0,适用于所有元素,以及:before和:after伪元素。默认情况下,动画过渡时间为0。

14.3.3 设置延迟时间

transition-delay属性用来定义开启过渡动画的延迟时间,语法如下:

transition-delay:<time> [, <time>]*;

初始值为0,适用于所有元素,以及:before和:after伪元素。设置时间可以是正整数、负整数和零。设置为非零值时,必须带上单位——s或ms。

为负数时,过渡动画会从该时间点开始,之前的动画会被截断;

为正数时,过度动画会延迟触发。

14.3.4 设置过渡动画类型

transition-timing-function属性用来定义过渡动画的类型,语法如下:

transition-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>,<number>,<number>,<number>) [, ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>,<number>,<number>,<number>) ]*
  • ease:平滑过渡,等同于cubic-bezier(0.25,0.1,0.25,1.0)函数,即立方贝塞尔;
  • linear:线性过渡,等同于cubic-bezier(0,0,1.0,1.0)函数;
  • ease-in:由慢到快,等同于cubic-bezier(0,0,0.58,1.0)函数;
  • ease-out:由快到慢,等同于cubic-bezier(0.42,0,0.58,1.0)函数;
  • cubic-bezier:特殊的立方贝塞尔曲线效果。

14.3.5  设置触发方式

CSS3动画一般通过鼠标事件火庄台定义动画,如CSS伪类和JavaScript事件。

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

JavaScript事件包括click、focus、mousemove、mouseover、mouseout等。

14.4  设计帧动画

CSS3使用animation属性定义帧动画。最新版本主流浏览器均支持CSS帧动画。

animation和transition属性功能相同——通过改变元素的属性值实现动画效果。区别在于:

animations通过定义多个关键帧以及定义每个关键帧中元素的属性值来实现更为复杂的动画效果;

transitions通过指定属性的开始值与结束值,以及这两个属性值之间进行过渡的方式,实现比较简单的动画效果。

14.4.1 设置关键帧

CSS3使用@keyframes定义关键帧,用法如下:

@keyframes animationname{
keyframes-selector{
css-styles;
}
}
  • animationname:定义动画的名称;
  • keyframes-selector:定义帧的时间未知,也就是动画时长的百分比,合法值有0~100%、from(等价于0%)、to(等价于100%);
  • css-styles:表示一个或多个合法的CSS样式属性。

14.4.2 设置动画属性

  1. 定义动画名称

    使用animation-name属性定义CSS动画名称,语法如下:

    animation-name:none | IDENT [, none | IDENT ]*;

    初始值为none,定义一个适用的动画列表。每个名字用来选择关键帧,提供属性值;如名称为none,不会有动画。

  2. 定义动画时间

    animation-duration定义动画播放时间,语法如下:

    animation-duration:<time> [, <time>]*;

    默认值为0,不会有动画。若为负值,视为0。

  3. 定义动画类型

    animation-timing-function定义动画类型,语法如下:

    animation-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>,<number>,<number>,<number>) [, ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>,<number>,<number>,<number>) ]*

    初始值为ease,取值参考transition-timing-function。

  4. 定义延迟时间

    animation-delay定义CSS动画延迟播放的时间,参考transition-delay。

  5. 定义播放次数

    animation-iteration-count属性定义动画播放的次数,语法如下:

    animation-iteration-count:infinite | <number> [, infinite | <number>]*;

    默认值为1,infinite表示无限次。如果取值为非整数,导致动画结束一个周期的一部分;取值为负值,在交替周期内反向播放动画。

  6. 定义播放方向

    animation-direction属性定义动画的播放方向,语法如下:

    animation-direction:normal | alternate [, normal | alternate]*;

    默认值为normal。为normal时,动画的每次循环向前播放;为alternate时,偶数次向前播放,奇数次向反方向播放。

  7. 定义播放状态

    animation-play-state定义动画正在运行还是暂停,语法如下:

    animation-play-state: paused | running;

    初始值为running,paused定义动画暂停,running定义动画正在播放。

  8. 定义播放外状态

    使用animation-fill-mode属性定义动画外状态,语法如下:

    animation-fill-mode: none | forwards | backwards | both [, none | forwards | backwards | both ]*;

    初始值为none,如果提供多个属性值,以逗号分隔。取值说明如下:

    • none:不设置动画外的状态;
    • forwards:设置对象状态为动画结束时的状态;
    • backwards:设置对象状态为动画开始时的状态;
    • both:设置对象状态为动画结束或开始的状态。

学习笔记 第十四章 使用CSS3动画的更多相关文章

  1. 《机器学习实战》学习笔记第十四章 —— 利用SVD简化数据

    相关博客: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) <机器学习实战>学习笔记第十三章 —— 利用PCA来简化数据 奇异值分解(SVD)原理与在降维中的应用 机器学习( ...

  2. [HeadFirst-HTMLCSS学习笔记][第十四章交互活动]

    表单 <form action="http://wickedlysmart.com/hfhtmlcss/contest.php" method="POST" ...

  3. JavaScript高级程序设计学习笔记第十四章--表单

    1.在 HTML 中,表单是由<form>元素来表示的,而在 JavaScript 中,表单对应的则是 HTMLFormElement 类型. HTMLFormElement 继承了 HT ...

  4. VSTO学习笔记(十四)Excel数据透视表与PowerPivot

    原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...

  5. Python学习笔记(十四)

    Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

  6. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  9. C++ Primer Plus学习:第十四章

    第十四章 C++中的代码重用 包含对象成员的类 将类的对象作为新类的成员.称为has-a关系.使用公有继承的时候,类可以继承接口,可能还有实现(纯虚函数不提供实现,只提供接口).使用包含时,可以获得实 ...

随机推荐

  1. C++语言笔记系列之二十——模版

    1.随意输入两个数x和y,输出最大值max. int max(int x, int y) {return x>y? x:y;} 2.函数模版 (1)用一种或者多种通用类型去表示函数--函数模版. ...

  2. [转] logback logback.xml常用配置详解(一)<configuration> and <logger>

    转载文章:原文出处:http://aub.iteye.com/blog/1101260 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 根节点< ...

  3. 欧莱雅浅谈OC中方法调用的顺序中的Category

    OC特有的分类Category,依赖于类.它可以在不改变原来的类内容的基础上,为类增加一些方法.分类的使用注意: (1)分类只能增加方法,不能增加成员变量: (2)在分类方法的实现中可以访问原来类中的 ...

  4. bzoj4593: [Shoi2015]聚变反应炉

    这道题的难点其实是在设DP方程,见过就应该会了 令f0,i表示先激发i的父亲,再激发i,把i的整棵子树都激发的最小费用 f1,i表示先激发i,再激发i的父亲,把i的整棵子树都激发的最小费用 设x,y为 ...

  5. string operation in powershell

    https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/15/keep-your-hands-clean-use-powershell- ...

  6. 强大的DataGrid组件[7]_自定义DataGrid——Silverlight学习笔记[15]

    基本知识讲解 1)两种状态 DataGrid的单元格的状态有两类,即编辑状态和非编辑状态. 在实际开发中,如果一个单元格所在的列不设为只读的话(即要求可读写),那么这个单元格就存在这两种状态.按需要, ...

  7. yum和apt-get 安装方式

    rpm包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道.rpm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上,deb包主要 ...

  8. 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现

    设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...

  9. WebDriverWait显示等待

    等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll_frequency=0.5, ign ...

  10. bzoj3995

    线段树 额 计蒜客竟然把这个出成noip模拟题... 这个东西很像1018,只不过维护的东西不太一样 然后我参考了fuxey大神的代码,盗一波图 具体有这五种情况,合并请看代码,自己写了一个结果wa了 ...