CSS Transition (变换动画)

最近学习CSS的过程中,发现了不少有用的东西。包括一些神奇的,纯CSS的特效,只需简单的几笔即可完成jQuery实现的效果。

CSS 3 中提供了一种属性,Transition(变换),这种属性能够实现在元素的某些属性的数值发生改变时产生过渡的效果。比如长度增加,能产生类似拉长的动画效果;颜色改变时,也可以利用Transition产生一种颜色渐变的效果。

  • 转载原链接地址:http://blog.netsh.org/posts/css-transition-animate-tutorial_522.netsh.html

浏览器支持情况

CSS Transition受到浏览器的广泛支持。

Chrome 2+(-webkit-transition)
Firefox3.7+(-moz-transition)
Safari 3.1+(-webkit-transition)
Opera 10.5+(-o-transition)

From:axiu.me

不过经过我的观察,现在IE还是不能支持,即使是在IE9中。不过也没有关系,至少并不会出现什么令人感觉糟糕的结果。

CSS变换的由来

CSS Transition曾经是只属于Apple Safari Webkit的东西,仅能由Safari UI实现的动画效果。

可是W3C有部分工作人员认为变换动画是脚本该做的事情而不是CSS,不过去年三月份,来自Apple、Mozilla开始将CSS变换模块添加到CSS 3特性里面,非常接近原来Safari Webkit的效果。由此得来CSS Transition。

书写方法

在CSS代码中,要使用Transition属性需要这么书写:

-moz-transition: // Firefox

-webkit-transition: // Safari、Chrome

-o-transition: // Opera

transition: //官方标准

建议在书写时,将上述全写上。

效果之:颜色变换

使用Transition可以实现颜色的变换,比如一个锚链接的鼠标移上产生颜色渐变动画:

链接

其核心代码如下:

a:hover {
 color: red;
 background-color: rgb(255,204,255);
 -webkit-transition: color .5s linear, background-color .5s linear;
 transition: color .5s linear, background-color .5s linear;
}

效果之:拉伸、伸缩效果

  • About Us

其核心代码如下:

#example2 {
	height:200px;
}
#example2 a:link {
color: blue;
text-decoration: none;
-webkit-transition: color .25s ease-in 0s;
transition: color .25s ease-out 0s;
}
#example2 a:hover {
color: red;
-webkit-transition: color .25s ease-in .1s;
transition: color .25s ease-out .1s;
}
#example2 a:active {
color: green;
transition: color .25s ease;
}
#example2 ul {
list-style: none;
margin: 0;
padding: 0;
}
#example2 .menu {
display: block;
position: relative;
top: .9em;
left: 0;
padding: 10px;
height: auto;
width: 100px;
border: 8px solid rgba(204,204,204,.5);
cursor: pointer;
background-color: rgba(255,255,255,.75);
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
#example2 ul.menu  li {
font-weight: normal;
list-style: none;
margin:0
}
#example2 ul.menu  li a:link {
font-weight: normal;
list-style: none;
font-size: 12px;
margin-left: 0;
padding-left: 0;
}
#example2 ul.menu ul li {
font-weight: normal;
padding: 5px 0;
margin:0;
border-top: 1px solid rgb(204,204,204);
background-color: rgb(255,255,255);
-webkit-transition: background-color .5s ease;
transition: background-color .2s ease;
}
#example2 .drop {
display: block;
position: relative;
height: 0;
overflow: hidden;
width: 100px;
opacity: 0;
-webkit-transition: opacity .25s linear 0s, height .25s ease-out .1s;
transition: opacity .25s linear 0s, height .25s ease-out .1s;
}
#example2 ul.menu ul li:hover {
background-color: rgb(234,234,234);
-webkit-transition: background-color .5s ease;
transition: background-color .2s ease;
}
#example2 ul.menu:hover .drop {
height: 140px;
opacity: 1;
-webkit-transition: opacity .25s linear 0s,  height .25s linear 0s;
transition: opacity .25s linear 0s,  height .25s linear 0s;
}

效果之:位置移动

你可以试想,如果在发生位置之间的改变时,如果使用Transition属性,则可以做到过渡移动的动画效果,这非常像是脚本做出的事情。

位置移动

按住鼠标不放

其核心代码如下:

#example3 {
	background-color: black;
	color: white;
}
#example3 .control {
	text-align: center; font-size: 3em;
}
#example3 .move { cursor: pointer;}
#example3 .move>#astro {
	position: relative;
	top: 0;
	left: 250px;
	-webkit-transition: top 2s ease-in-out, left 2s ease;
	transition: top 2s  ease-in-out, left 2s ease;
}
#example3 .move:active>#astro {
	top: 10px;
	left: 10px;
	-webkit-transition: top 2s ease-in-out, left 2s ease;
	transition: top 2s  ease-in-out, left 2s ease;
}

补充

同时添加多种变换

如果你希望你的元素的颜色、背景都发生渐变,例如:

a:hover {
  color: red;
  background-color: pink;
  -webkit-transition: color .25s linear;
  transition: color .25s linear;
  -webkit-transition: background-color .15s linear .1;
  transition: background-color .15s linear .1;
}

这并不能达到目的,后面的将会覆盖掉前面的,因此方法是使用逗号同时使用多种变换效果:

a:hover {
  color: red;
  background-color: pink;
   -webkit-transition: color .25s linear, background-color .15s linear .1s;
  transition: color .25s linear, background-color .15s linear .1s;
 }

变换计时与延迟

如果你希望自定义你的变换效果,比如你希望自定义动画改变的速率,CSS提供了如下关键字可以添加在位尾后:

名称 如何工作
cubic-bezier(x1, y1, x2, y2) X 和 Y 值在0到1之间,以定义用于Time function的贝塞尔曲线的形状。
linear 均速
ease 逐渐慢下来
ease-in 加速(渐入)
ease-out 减速(淡出)
ease-in-out 加速然后减速

附录:可以发生变换的属性

那些属性可以变换呢?几乎除了box-shadow以外,其他的都可以发生变换。

CSS属性 改变的对象
background-color 色彩
background-image 只是渐变
background-position 百分比,长度
border-bottom-color 色彩
border-bottom-width 长度
border-color 色彩
border-left-color 色彩
border-left-width 长度
border-right-color 色彩
border-right-width 长度
border-spacing 长度
border-top-color 色彩
border-top-width 长度
border-width 长度
bottom 百分比,长度
color 色彩
crop 百分比
font-size 百分比,长度
font-weight 数字
grid-* 数量
height 百分比,长度
left 百分比,长度
letter-spacing 长度
line-height 百分比,长度,数字
margin-bottom 长度
margin-left 长度
margin-right 长度
margin-top 长度
max-height 百分比,长度
max-width 百分比,长度
min-height 百分比,长度
min-width 百分比,长度
opacity 数字
outline-color 色彩
outline-offset 整数
outline-width 长度
padding-bottom 长度
padding-left 长度
padding-right 长度
padding-top 长度
right 百分比,长度
text-indent 百分比,长度
text-shadow 阴影
top 百分比,长度
vertical-align 百分比,长度,关键词
visibility 可见性
width 百分比,长度
word-spacing 百分比,长度
z-index 正整数
zoom 数字

谢谢收看。

时间: 2024-10-11 23:28:45

CSS Transition (变换动画)的相关文章

CSS vs JS动画:谁更快?

CSS vs JS动画:谁更快? 2016-05-16 前端大全 (点击上方公众号,可快速关注) 英文:Julian Shapiro 译者:MZhou's blog 链接:http://zencode.in/19.CSS-vs-JS动画:谁更快?.html 这篇文章翻译自 Julian Shapiro 的 CSS vs. JS Animation: Which is Faster?.Julian Shapiro 也是 Velocity.js 的创造者.这是一个非常高效.简单易用的JS动画库.他在

CSS图片翻转动画技术详解

因为不断有人问我,现在我补充一下:IE是支持这种技术的!尽管会很麻烦.需要做的是旋转front和back元素,而不是旋转整个容器元素.如果你使用的是最新版的IE,可以忽略这一节.IE10+是支持的,IE9完全不支持CSS动画. CSS动画非常的有趣:这种技术的美就在于,通过使用很多简单的属性,你能创建出就连皮克斯动画制作公司也会赞叹的漂亮的消隐效果.其中代表性的一种就是CSS图片翻转效果,能让你看到一张卡片的正反两面上的内容.本文就是要用最简单的方法向大家介绍如何创建这种效果. 简单说明:这并不

CSS VS JS动画,哪个更快[译]

英文原文:https://davidwalsh.name/css-js-animation 原作者Julian Shapiro是Velocity.js的作者,Velocity.js是一个高效易用的js动画库.在<Javascript网页动画设计>一书中对这个库有很多更具体的剖析,对Velocity及JS动画感兴趣的可以一看. 基于Javascript的动画怎么可能总是和 CSS transition 一样快,甚至更快呢?到底是什么秘密呢?Adobe 和 Google 是怎么做到让他们的富媒体移

那些好玩的CSS - transition transform animation - 北大青鸟教员授课技术交流会

那些好玩的CSS - transition transform animation 北大青鸟教员授课技术交流会 前言: 无意间翻到了之前做的一个PPT,就想着发出来给大家分享一下. 因为公司招了不少新员工,所以经理借着那次的授课交流会,让大家彼此学习一下授课技巧 上课方式 课堂互动等等. 我做的这个是用的极客学院的PPT风格,简单地介绍了一下CSS3里面的几个动画相关的东西,transition过渡.transform变换.animation自定义动画等等. PPT内容如下: (PS:如果需要P

transition(动画属性)

CSS 过渡(transition)是通过定义元素从起点的状态和结束点的状态,在一定的时间区间内实现元素平滑地过渡或变化的一种补间动画机制.你可以让属性的改变过程持续一段时间,而不是立即生效. 通过transition你可以决定哪个属性发生动画效果 (可以通过明确地列出这些属性),何时开始动画 (通过设置delay), 动画持续多久 (通过设置duration), 以及如何动画 (通过定义timing函数,比如线性地或开始快结尾慢). 如何定义transition(过渡) Transition又

CSS VS JS动画,哪个更快

JQuery 让我们从最基础的开始说起: Javascript 和 jQuery 两者不能错误的混为一谈.Javascript 动画很快,而 jQuery 动画却慢下来.为什么呢?因为尽管 jQuery 非常强大,但是它的设计目标并不是一个高效的动画引擎: 1.JQuery不能避免layout thrashing,由于它不仅仅要服务于动画,也需要用于其他场景. 2.JQuery的内存消耗会频繁的触发垃圾回收机制,而垃圾回收会让动画暂时卡住. 3.JQuery使用了setInterval而不是re

Atitti &#160;css &#160;&#160;transition&#160;Animation&#160;differ区别

Atitti  css   transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限.  1 1.2. js 动态改变 style 内容 ,样式覆盖 1 1.3. Velocity 和 GSAP2 1.1. transition的优点在于简单易用,但是它有几个很大的局限. (1)transition需要事件触发,所以没法在网页加载时自动发生. (2)transition是一次性的,不能重复发生,除非一再触发. (3)tr

Atitti css transition Animation differ区别

Atitti  css   transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限.  1 1.2. Transition是可以自动触发的使用timeout1 1.3. js 动态改变 style 内容 ,样式覆盖 2 1.4. Velocity 和 GSAP2 1.1. transition的优点在于简单易用,但是它有几个很大的局限. (2)transition是一次性的,不能重复发生,除非一再触发. (3)tran

CSS3的过渡效果(transition)与动画(animation)

1.Transition Transition是一种直观上的效果,让DOM元素的某个属性在固定时间内从一旧值到一新值.目前Firefox.Opera.Safari和Chrome都支持transition ,IE还不支持. 语法:transition: property duration timing-function delay; transition-property  指定的要改变的css属性名称 transition-duration 指定过度效果要花多少时间(s/ms) transiti