CSS动画中的transform,transition以及animation的区别小结

在css学习中,尤其是动画部分,相信很多人都会接触过transform,transition以及animation属性,如果望文生义从字面上这些词翻译成中文好像都差不多,其实他们三者分别还是很大的。

transform

先来看跟变形金刚transformer很像的transform,** 首先要注意的是transform属性是静态属性!静态属性!静态属性!只要写进style里就会直接显示生效,不会出现动画过程。**通过使用transform属性,能够对元素进行移动(translate)、缩放(scale)、旋转(rotate)、翻转(skew)。对于这些就不展开说,有兴趣的可以自行实践下就明白了。

div
{
transform: translate(50px,100px) rotate(30deg);
-ms-transform: translate(50px,100px) rotate(30deg);     /* IE 9 */
-webkit-transform: translate(50px,100px) rotate(30deg); /* Safari and Chrome */
-o-transform: translate(50px,100px) rotate(30deg);      /* Opera */
-moz-transform: translate(50px,100px) rotate(30deg);        /* Firefox */
}

transition

不同于静态的transform,被称为过渡的transition是一个简单的动画属性,可以看作是是animation的简化版本,通常拿来配合事件触发使用,简单易用。
他的语法是transition: property duration timing-function delay;
单纯的代码不会触发过渡操作,需要通过用户的行为(如点击,悬浮等)触发,常见的触发的方式有:

  • :hover
  • :focus
  • :checked
  • 媒体查询触发
  • javascript触发
div
{
width:100px;
height:100px;
background:yellow;
transition:width 2s ease-in-out 1.5s;
-moz-transition:width 2s ease-in-out 1.5s; /* Firefox 4 */
-webkit-transition:width 2s ease-in-out 1.5s; /* Safari and Chrome */
-o-transition:width 2s ease-in-out 1.5s; /* Opera */
}
div:hover
{
width:300px;
}

transition的属性

属性 描述
transition-property 执行过渡的css属性
transition-duration 执行过渡的持续时间
transition-timing-function 执行过渡的运动速率曲线
transition-delay 执行过渡的延迟时间

顺带一提transition-property的注意事项,他的可取值如下

  • none :没有属性会获得过渡效果。
  • all :所有属性都将获得过渡效果。
  • property :定义应用过渡效果的 CSS 属性名称列表,以逗号分隔。

不是所有属性都能过渡,只有属性具有一个中间点值才具备过渡效果。完整列表,见这里

transition的优点在于简单易用,但是它有几个很大的局限。

(1)transition需要事件触发,所以没法在网页加载时自动发生。

(2)transition是一次性的,不能重复发生,除非一再触发。

(3)transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。

(4)一条transition规则,只能定义一个属性的变化,不能涉及多个属性。
CSS Animation就是为了解决这些问题而提出的。

animation

最后来说说最强的animation,animation与keyframes属性搭配使用,有类似flash的概念,animation实现动画效果主要由两部分组成:

(1)通过类似Flash动画中的帧来声明一个动画

(2)在animation属性中调用关键帧声明的动画。

关键帧 keyframe 实现自定义动画,通过对关键帧的设定来实现,也就是规定从起始点(0%)到终点(100%)之间的具体节点上的动画样式。就好比一个人起床,睁开眼睛(0%),站起来(10%),穿上衣(40%),穿裤子(80%),整理面容(100%),这样子把每个节点串起来便是动画了。上面提到的transition局限性在于只有两个状态,其实就是相当于只能定义0%和100%。而animation能够自定义任意时间段节点的动画动作。

当在 @keyframes中创建动画时,需要将它捆绑到某个选择器,否则不会产生动画效果。

通过规定至少以下两项 CSS3 动画属性,即可将动画绑定到选择器:

  • 规定动画的名称(animation-name)
  • 规定动画的时长(animation-duration)

animation属性类似于transition,都是随着时间改变元素的属性值,其主要区别在于:transition需要触发一个事件才会随着时间改变其CSS属性;animation在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素CSS属性,达到一种动画的效果。

以下实例为把 "myfirst" 动画捆绑到 div 元素,时长:4 秒,infinite 表示运动次数为无限次,alternate 表示下一周期将逆向地播放。

div
{
width:100px;
height:100px;
background:red;
animation:myfirst 4s infinite alternate;
-moz-animation:myfirst 4s infinite alternate;/* Firefox */
-webkit-animation:myfirst 4s infinite alternate; /* Safari and Chrome */
-o-animation:myfirst 4s infinite alternate; /* Opera */
}
@keyframes myfirst
{
0% {background:red;}
50%{background:blue; transform: translate(20px,-20px)}
75%{background:green;transform: translate(40px,0px) scale(1.5)}
100% {background:yellow;transform: rotate(-45deg)}
}

下面的表格列出了 @keyframes 规则和所有动画属性:

属性 描述
@keyframes 规定动画
animation 所有动画属性的简写属性
animation-name 规定 @keyframes 动画的名称
animation-duration 规定动画完成一个周期所花费的秒或毫秒。默认是 0。
animation-timing-function 规定动画的运动速率曲线
animation-delay 规定动画何时开始,默认是 0。
animation-iteration-count 规定动画被播放的次数。默认是 1。
animation-direction 规定动画是否在下一周期逆向地播放。默认是 "normal"。
animation-play-state 规定动画是否正在运行或暂停。默认是 "running"。
animation-fill-mode 规定对象动画时间之外的状态。

参考资料:
http://www.w3school.com.cn/css3/css3_animation.asp
http://www.cnblogs.com/aimyfly/p/3195898.html
http://blog.csdn.net/XIAOZHUXMEN/article/details/52003135

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,301评论 0 11
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,730评论 0 2
  • transform、transition、animation分别代表着转换、过渡以及动画。从各自的名字我们就可以大...
    Ginkela阅读 3,785评论 0 12
  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,854评论 0 4
  • 变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转。它主要在二维空间...
    阿振_sc阅读 934评论 1 5