css3之transition、transform、animation比较
css3动画多少都有些了解,但是对于transition、transform、animation这几个属性一直是比较模糊的,所以啊,这里做一个总结,也希望大家都可以对此有一个更好地理解。
其实,最简单的理解,我么可以这么认为:transition、transform、animation分别为过渡、变换、动画。 他们三者的作用实际上是不一样的,比如transition过渡一般都是配合hover使用的,对于transform呢,如果不配合,就是简单的拉伸、缩放、偏移等静态的变换,但是呢,如果配合transition,然后再使用hover这些触发的方式,就会好得多啦。 最后,animation是最为强大的,这个属性可以做更多事情,下面就具体的说一说吧。
一、transition
它的作用很简单,就是平滑的改变CSS值, 包括点击事件、焦点事件、hover等,只要值改变了,就是平滑的动画。 其属性如下所示:
- transition-property 过渡的性质,比如background过渡。
- transition-duration 过渡持续的时间,比如2s
- transition-delay 延迟过渡时间,比如1s
- transition-timing-function 指定过渡类型,有ease|linear|ease-in|ease-out|ease-in-out|cubic-bezier
一般,我们是将这些属性全部用transition写在一起的,而不是分开写,并且由于兼容性的问题,我们需要添加各个浏览器的前缀才可以。
另外,对于transition-property、transition-duration、transition-delay都不难理解,但是,transition-timing-function应该如何去理解呢?恩,张鑫旭大神是这么理解的:
其实呢,理一理,也还好。首先cubic-bezier这个基本上就不用鸟了,99%的情况都用不到这个东西,所以,难得清闲,直接pass掉。linear很好记,线性嘛。至于ease-in | ease-out | ease-in-out,就是指缓动效果啦,说白了就是指开始时候慢慢动呢还是结束的时候慢慢动。那么in和out那个先慢慢动呢?啊,我们可以联想记忆,很好记的。我们都知道OOXX吧,ease-in中的in就表示进入,进入的时候显然一开始都是慢的,等瞄准就绪后才能快速冲刺进入,于是ease-in表示先慢后快;ease-out其out表示出来,出来肯定是先快后慢的,因为出来时临近洞口速度肯定要降下来,免得跑出来乱了节奏,于是ease-out表示先快后慢;最后,很好理解的,ease-in-out表示一进一出,也就是先慢后快再慢。
我们可以通过点击这个例子看效果。
下面就是一个简单的使用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>left</title>
<style>
* {
margin: ;
}
html,body {
width: %;
height: %;
}
div.test {
width: 100px;
height: 100px;
background: #feedad;
border-radius: 10px;
transition: all 2s ease-in-out;
}
div.test:hover {
width: 200px;
height: 200px;
background: pink;
border-radius: 30px;
margin-left: 300px;
transform: rotate(720deg);
}
</style>
</head>
<body>
<div class="test"></div>
</body>
</html>
从上面的代码来看,我们是在没有hover的类中,即本身class上填写的 transition,通过all,就可以让所有的属性发生变化,并且属性不需要只在一个地方写,比如 div.test 中没有margin-left,但是我们在div.hover中使用了 margin-left,这样也是可以起作用的。
最终的效果如下:
、
二、 transform
transform从英文上来看,就知道是变换的意思, 即常见的拉伸、压缩、旋转、偏移等:
.trans_skew { transform: skew(35deg); }
.trans_scale { transform:scale(, 0.5); }
.trans_rotate { transform:rotate(45deg); }
.trans_translate { transform:translate(10px, 20px); }
我们在对一个块级元素进行居中的时候,也常常会用到 transform: tranlate(50%, 50%) 属性。但是呢? 如果我们只是简单地添加到某个元素上,是没有动态效果的,而只是静态的拉伸等。
但是,transform属性要是和transition一起,那么就会行云流水了~ (另外,也是可以配置animation的~)
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>left</title>
<style>
* {
margin: ;
}
html,body {
width: %;
height: %;
}
div.test {
width: 100px;
height: 100px;
background: #feedad;
border-radius: 10px;
transition: transform 2s ease-in-out;
}
div.test:hover {
/* transform: scale(2); */
/* transform: skewX(90deg); */
/* transform: translate(50%, 50%); */
transform: scale(, ) skewX(30deg) translate(%, %) rotate(720deg);
}
</style>
</head>
<body>
<div class="test"></div>
</body>
</html>
注意: 这里的transform不能分开写,否则肯定是会覆盖的,所以比较好的做法就是写在一起拉,然后在div.test中写 transition: transform 2s ease-in-out; 就会出现炫酷的效果啦!
三、animation
animation即动画, 当然要比过渡、变换更为强大了。 缺点也是现在不能很好地在各个浏览器上收到支持。
这个animation的作用其实主要是为了替代flash的。 要创建css3动画,我们就不得不使用@keyframes 规则, 使用该规则创建动画, 它规定了一个css样式和动画将逐步从目前的样式更新为新的样式。
使用了@keyframes之后,我们就必须把它绑定到animation选择器,否则动画是没有任何效果的,这个animation选择器至少需要两个属性:
- 动画的名称,即由@keyframes规定的名称
- 动画的总时长,即动画完成需要的时间
举例如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>left</title>
<style>
* {
margin: ;
}
html,body {
width: %;
height: %;
}
div.test {
width: 100px;
height: 100px;
background: #feedad;
border-radius: 10px;
-webkit-animation: myAnimation;
-o-animation: myAnimation;
animation: myAnimation 2s;
}
@keyframes myAnimation {
from {
background: blue;
}
to {
background: yellow;
width: 300px;
height: 300px;
margin-left: 500px;
transform: skew(30deg) rotate(50deg);
}
}
</style>
</head>
<body>
<div class="test"></div>
</body>
</html>
这样,是不是很简单啊,只要使用@keyframes定义,然后在animation中使用就可以了。
四、三者比较
transitoin主要是用来做属性的过渡的。
- transform主要来做变换。(一般要和transition或者animation配合使用)
- animation主要用来做复杂的动画。
且transition从hover延伸而来,animation从flash延伸而来。
css3之transition、transform、animation比较的更多相关文章
- 弄清 CSS3 的 transition 和 animation
弄清 CSS3 的 transition 和 animation transition transition 属性是 transition-property, transition-duration, ...
- css transition transform animation例子讲解
1.transition属性: transition属性是一个速记属性有四个属性:transition-property , transition-duration, transition-timin ...
- CSS3动画 transition和animation的用法和区别
transition和animation都是CSS3新增的特性,使用时需要加内核 浏览器 内核名称 W3C IE -ms- Chrome/Safari -webkit- Firefoc - ...
- CSS3之transition&transform
参考网页: CSS3 transform 属性使用详解: http://www.renniaofei.com/code/css3-transform-shuxing-shiyong-xiangjie/ ...
- 2018年1月17日总结 css3里transition 和animation 区别
transition 和animation两个CSS3属性经常被用到实际项目中,想把它整理出来. 1.先介绍transition >>>>> a. 在做项目中经常会遇见 ...
- css动画(transition/transform/animation)
在开发中,一个好的用户操作界面,总会夹杂着一些动画.css用对少的代码,来给用户最佳的体验感,下面我总结了一些css动画属性的使用方法及用例代码供大家参考,在不对的地方,希望大佬直接拍砖评论. 1 t ...
- css3,transition,animation两种动画实现区别
我们为页面设置动画时,往往会用到transition还有animation以及transfrom属性或者用到js. 其实通常情况下,对于使用js我们更加倾向于使用css来设置动画. transfrom ...
- [CSS3备忘] transform animation 等
一些CSS不经常用就会忘记,好吧,现在整理再学习一下,也留做备忘,方便以后查看... perspective的理解: 1.数值越小,用户与3D空间Z平面距离越近,视觉效果更令人印象深刻(比如看电影,越 ...
- css3中transition和animation的回调处理
弱鸡最近在准备面试,网上找了一些题,发现一些基础题也完全答不好(┬_┬)看来还是要再接再励啊w(゚Д゚)w 言归正传,今天的主题是CSS3中的动画回调处理,这里动画执行完毕后触发的事件是transit ...
- css3中trastion,transform,animation基本的了解
毕业答辩一耽误就是一个月的时间,感觉自己浪费好多时间,而且学习劲头都没有以前的好,学习是个漫长艰苦的事情,也出现了好多问题,希望自己有则改之,无则加冕,曾国藩曾说过:悔者,所以守其缺而禾取求全也.虽然 ...
随机推荐
- vee-validate表单校验的基本使用
今天主要记录一下用vee-validate来进行表单校验的几个基本使用.包括最基础的必填和长度校验:异步请求服务的校验(重名校验),还有延迟校验.如何引入等就不在这里赘述了,直接进入主题. 1.必填和 ...
- GCC 显示所有的warning option
此事需求的来源是有要求调查,gcc中的那些warning是有问题的,代码必须要修改,那些事需要确认的,就要显示所有的warning选项是什么 查了下,方法如下 显示所有的warning和warning ...
- C#上位机中ZedGraph控件的使用
上位机程序控制PLC模拟量通道输出周期性正弦波信号,并采集所造成改变的模拟量输入信号,并绘制数据变化曲线. 界面如图: 最后测试效果如图: 代码: using System; using System ...
- WebService 天气预报webservice接口
WebService 天气预报webservice接口 地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 常用接口: 1. ...
- 【大数据系统架构师】0.2 Linux基础
1. Linux基本环境 1.1 大数据Hadoop前置大纲讲解 1)Linux系统,基本命令 2)Java语言,JavaSE相关知识 3)MySQL基本的DML和DDL 1.2 常见Linux系统. ...
- 单元测试unittest
unittest.TestSuite():用例集合 uinttest.defaultTestLoader.discover():寻找测试用例,去哪个目录下寻找测试用例,加载测试用例
- 使用IIS服务器部署网页,需要开启服务里的“ASP.NET 状态服务”
否则会提示“请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同.如果服务器位于远程计算机上,请检查 HKEY_LOCAL_MACHI ...
- c++多线程基础5(future,async,packaged_task,promise)
以下内容整理自:https://www.cnblogs.com/my_life/articles/5401190.html future 是一个能从其他地方获取到一个值的对象,如果是在不同的线程中,则 ...
- model中的Meta类
通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model): bar = models.CharFi ...
- 滴滴插件化方案 VirtualApk 源码解析
那么其中的难点很明显是对四大组件支持,因为大家都清楚,四大组件都是需要在AndroidManifest中注册的,而插件apk中的组件是不可能预先知晓名字,提前注册中宿主apk中的,所以现在基本都采用一 ...