CSS3过渡动画&关键帧动画
一、过渡动画
过渡(transition)动画,就是从初始状态过渡到结束状态这个过程中所产生的动画。
所谓的状态就是指大小、位置、颜色、变形(transform)等等这些属性。
Note:不是所有属性都能过渡,只有属性具有一个中间点值才具备过渡效果。
点击查看完整列表。
css过渡只能定义首和尾两个状态,所以是最简单的一种动画。
注释:Internet Explorer 9 以及更早版本的IE浏览器不支持 transition 属性。
如何在项目中正确、熟练地应用transition动画?
第一步:在目标元素的样式声明中定义元素的初始状态,然后在同一声明中用 transition 属性配置动画的各种参数。
可定义的参数有:
- transition-property:规定对哪个属性进行过渡。
- transition-duration:定义过渡的时间,默认是0。
- transition-timing-function:定义过渡动画的缓动效果,如淡入、淡出等。
- linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。
- ease(默认值)规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。
- ease-in 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。
- ease-out 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。
- ease-in-out 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。
- cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。
- transition-delay:规定过渡效果的延迟时间,即在过了这个时间后才开始动画,默认是0。
注意:要在同一代码块中定义元素初始状态(样式),添加transition属性。
如果想要同时过渡多个属性,可以用逗号隔开。
第二步:改变元素的状态。
为目标元素添加伪类或添加声明了最终状态的类。
使用 transtion 属性只是规定了要如何去过渡,要想让动画发生,还得要有元素状态的改变。如何改变元素状态呢,当然就是在css中给这个元素定义一个类(:hover等伪类也可以),这个类描述的是过渡动画结束时元素的状态。
除了使用hover等系统提供的伪类外,我们也可以随意的定义自己的类,然后想要过渡时就通过js把类加到元素上面。
注意:单纯的代码不会触发任何过渡操作,需要通过用户的行为(如点击,悬浮等)触发。可触发的方式有::hover :focus :checked 媒体查询触发 JavaScript触发。
示例1:
示例2:
当鼠标悬停在img元素上时,改变img元素的尺寸。改变的整个过程是平滑过渡的,不是快速、突兀的。
img {
height:15px; /*初始值*/
width:15px;
transition:1s1s height; /*过渡*/
}
img:hover {
height:450px; /*最终值*/
width:450px;
}
过渡动画的局限性
transition的优点在于简单易用,但是它有几个很大的局限。
(1)transition需要事件触发,所以没法在网页加载时自动发生。
(2)transition是一次性的,不能重复发生,除非一再触发。
(3)transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。
二、关键帧动画
不同于过渡动画只能定义首尾两个状态,关键帧动画可以定义多个状态,或者用关键帧的话来说,过渡动画只能定义第一帧和最后一帧这两个关键帧,而关键帧动画则可以定义任意多的关键帧,因而能实现更复杂的动画效果。
注释:Internet Explorer 9 以及更早的IE版本不支持 animation 属性。
如何在项目中正确、熟练地应用animation动画?
animation就相当于用@keyframes预先定义好元素在整个过渡过程中将要经历的各个状态,然后再通过animation属性将这些状态一次性赋给该元素。
第一步:通过类似Flash动画中的帧来声明一个动画。
关键帧动画的定义方式也比较特殊,它使用了一个关键字 @keyframes 来定义动画。具体格式为:
@keyframes 动画名称 { 时间点 {元素状态} 时间点 {元素状态} …}
一般来说,0%和100%这两个关键帧是必须要定义的。0%可以由from代替,100%可以由to代替。
第二步:在目标元素的样式声明中使用animation属性调用关键帧声明的动画。
现在我们知道了怎么去定义一个关键帧动画了,那怎么去实现这个动画呢?其实很简单,只要把这个动画绑定到某个要进行动画的元素上就行了。把动画绑定到元素上,我们可以使用animation属性。
可配置的参数有:
- animation-name:none为默认值,将没有任何动画效果,其可以用来覆盖任何动画。
- animation-duration:默认值为0s,意味着动画周期为0s,也就是没有任何动画效果。
- animation-timing-function:与transition-timing-function一样。
- animation-delay:在开始执行动画时需要等待的时间。
- animation-iteration-count:定义动画的播放次数,默认为1,如果为infinite,则无限次循环播放。
- animation-direction:默认为nomal,每次循环都是向前播放,(0-100)。另一个值为alternate,动画播放为偶数次则向前播放,如果为基数词就反方向播放。
- animation-state:默认为running,播放,paused,暂停。
- animation-fill-mode:定义动画开始之前和结束之后发生的操作。
- none(默认值),动画结束时回到动画没开始时的状态;
- forwards,动画结束后继续应用最后关键帧的位置,即保存在结束状态;
- backwards,让动画回到第一帧的状态;
- both:轮流应用forwards和backwards规则;
注意:只要把定义好的动画绑定到元素上,就能实现关键帧动画了,而不是像第一种过渡动画那样,需要一个状态的改变才能触发动画。
animation属性到目前为止得到了大多数浏览器的支持,但是,需要添加浏览器前缀!另外,@keyframes必须要加webkit前缀。
示例:
div:hover {
-webkit-animation:1s changeColor; /*调用动画*/
animation:1s changeColor;
}
@-webkit-keyframes changeColor { /*声明动画*/
0% {background:#c00;}
50%{background:orange;}
100%{background:yellowgreen;}
}
@keyframes changeColor {
0%{background:#c00;}
50%{background:orange;}
100%{background:yellowgreen;}
}
过渡动画与关键帧动画的区别
animation属性类似于transition,他们都是随着时间变化而改变元素的属性值,其主要区别在于:transition需要触发一个事件才会随着时间改变其CSS属性;animation在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素CSS属性,达到一种动画的效果。
三、animate.css动画库
animate.css是一个css3动画库,可以到github上去下载,里面预设了很多种常用的动画,使用也很简单,因为它是把不同的动画绑定到了不同的类里,所以我们想要使用哪种动画的时候,只需要简单的把那个相应的类添加到元素上就行了。
该库大致包含如下这些动画效果:
- bounce(跳动)、flash(闪光)、pulse(脉冲)、rubber band(橡皮筋)、shake(抖动)、swing(摇摆)、wobble(摇摆不定)
- fade(淡入或淡出)
- flip(翻转)
- rotate(旋转)
- slide(滑动)
- zoom(放大或缩小)
如何在项目中正确、熟练地应用animate动画库?
(1):在head中引入animate.min.css文件。
注:由于animate.min.css默认包含所有的动画效果。因此当我们仅使用其中的几个动画效果时,我们最好使用gulp构建仅包含我们需求的animate.min.css,这样可以避免我们引入的animate.min.css文件体积过大。
如何使用gulp构建符合我们需求的animate.min.css?
第一步:将整个animate.css项目下载下来,作为生产环境的依赖:
npm install animate.css --save
第二步:进入animate.css项目根目录下:
$cd path/to/animate.css/
第三步:加载dev依赖:
npm install
第四步:根据实际需要修改animate-config.json文件:
例如:我们只需要这两个动画效果:bounceIn和bounceOut。
{
"bouncing_entrances": [
"bounceIn"
],
"bouncing_exits": [
"bounceOut"
]
}
最后一步:进入animate.css项目下,运行gulp任务:gulp default,生成新的animate.min.css覆盖默认的animate.min.css。
(2)你想要哪个元素进行动画,就给那个元素添加上animated类 以及特定的动画类名,animated是每个要进行动画的元素都必须要添加的类。
你也可以在动画完成后,把动画类移除,以便可以再次进行同一个动画。
至于动画的配置参数,比如动画持续时间,动画的执行次数等等,你可以在你的的元素上自行定义,覆盖掉animate.min.css里面所定义的就行了。注意添加浏览器前缀。
CSS3过渡动画&关键帧动画的更多相关文章
- 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画
[源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimatio ...
- iOS开发UI篇—核心动画(关键帧动画)
转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...
- 重新想象 Windows 8 Store Apps (19) - 动画: 线性动画, 关键帧动画, 缓动动画
原文:重新想象 Windows 8 Store Apps (19) - 动画: 线性动画, 关键帧动画, 缓动动画 [源码下载] 重新想象 Windows 8 Store Apps (19) - 动画 ...
- iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果
先说下基本动画部分 基本动画部分比较简单, 但能实现的动画效果也很局限 使用方法大致为: #1. 创建原始UI或者画面 #2. 创建CABasicAnimation实例, 并设置keypart/dur ...
- ios基础动画、关键帧动画、动画组、转场动画等
概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...
- iOS:核心动画之关键帧动画CAKeyframeAnimation
CAKeyframeAnimation——关键帧动画 关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: –CABasicAnimation只能 ...
- CSS3过渡、变形和动画
1.CSS3过渡 所谓CSS3过渡,就是使用CSS3让元素从一种状态慢慢转换到另一种状态.如鼠标的悬停状态就是一种过渡.如下例子: #content a{ text-decoration: n ...
- 从零开始学习前端开发 — 15、CSS3过渡、动画
一.css3过渡 语法: transition: 过渡属性 过渡时间 延迟时间 过渡方式; 1.过渡属性(transition-property) 取值:all 所有发生变化的css属性都添加过渡 e ...
- 【CSS3】transition过渡和animation动画
转自:http://blog.csdn.net/XIAOZHUXMEN/article/details/52003135 写在前面的话: 最近写css动画发现把tansition和animation弄 ...
随机推荐
- jira使用一:如何给项目分组、sprint并行、禁止发送消息给atlassian
问题一:如何设置多个sprint并行? 问题二: 如何分组显示 设置泳道,并快速过滤 问题3:添加所属产品? 管理员登录Jira后台设置-问题-自定义字段找到:所属产品,进入 配置 界面在配置界面中, ...
- [转帖]Linux 中的零拷贝技术,第 1 部分
Linux 中的零拷贝技术,第 1 部分 https://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy1/index.html 引言 传统的 ...
- 利用Python进行数据分析_Pandas_绘图和可视化_Matplotlib
1 认识Figure和Subplot import matplotlib.pyplot as plt matplotlib的图像都位于Figure对象中 fg = plt.figure() 通过add ...
- S03_CH11_基于TCP的QSPI Flash bin文件网络烧写
S03_CH11_基于TCP的QSPI Flash bin文件网络烧写 11.1概述 针对ZYNQ中使用QSPI BOOT的应用,将BOOT.bin文件烧写至QSPI Flash基本都是通过USB C ...
- scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
各位小伙伴大家好: 到上期我们学习了动作模块的全部指令.接下我们用动作模块做一个小小项目,来总结我们前面学的内容. 在做项目之前我们先来换一个背景. 在左下角舞台区,点击打开背景库,选择自己所需要的背 ...
- CSS之cursor用法
cursor: url('~ROOT/shared/assets/image/vn-text-cursor-31-49.png') 22 22, nw-resize; 另外还有一个 cursor: g ...
- (一)SpringBoot之简介和安装插件以及HelloWorld第一个程序
一.简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...
- 记录我第一篇用Markdown写的Blog
Markdown的介绍 喝水不忘挖井人-Markdown的创造者 Markdown 最初是由 John Gruber 和 Aaron Swartz 于 2004 年共同设计的(在这里插一句,Aaron ...
- Android蓝牙遥控器APP关键代码 guihub项目
package com.car.demo; import java.io.IOException; import java.io.OutputStream; import java.util.UUID ...
- 客户端相关知识学习(十二)之iOS H5交互Webview实现localStorage数据存储
前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...