一、
CSS 过渡(transition)是通过定义元素从 起点的状态 和 结束点的状态 ,在一定的时间区间内实现元素平滑地过渡或变化 的一种补间动画机制。你可以让属性的改变过程持续一段时间,而不是立即生效。
通过transition你可以决定哪个属性发生动画效果 (可以通过明确地列出这些属性),何时开始动画 (通过设置delay), 动画持续多久 (通过设置duration), 以及如何动画 (通过定义timing函数,比如线性地或开始快结尾慢)。
如何定义transition(过渡)
Transition又包含了四个子属性,分别为:
二、
CSS3的过渡效果,让一个元素从一种效果转换到另一种效果。
要做到这一点,你必须指定两件事:
举例说明:
div { transition: width 2s; -moz-transition: width 2s; /* Firefox 4 */ -webkit-transition: width 2s; /* Safari and Chrome */ -o-transition: width 2s; /* Opera */ }
注意:如果未指定动画延迟时间,过渡将没有任何效果,因为默认值是0。
鼠标放上去的时候,变换开始:
div:hover { width:300px; }
三、
如何执行动画效果?(在哪里定义动画效果?)
css3动画一般通过鼠标事件或者鼠标状态定义动画,通常我们可以用CSS中伪类、使用js修改元素的样式属性或追加删除样式来执行定义的动画。通常我们可以用CSS中伪类和js中的鼠标事件来定义,CSS中伪类执行动画包括:
动态伪类 | 起作用的元素 | 描述 |
:link | 只有链接 | 未访问的链接 |
:visited | 只有链接 | 访问过的链接 |
:hover | 所有元素 | 鼠标经过元素 |
:active | 所有元素 | 鼠标点击元素 |
:focus | 所有可被选中的元素 | 元素被选中 |
上面的例子就是使用CSS中伪类执行动画的。 使用js修改元素的样式属性或追加删除样式来执行动画: 一般是鼠标事件操作和定时操作(window.setTimeout(),window.setInterval());
还应注意当一个元素使用过渡(transition)后,立即使用.appendChild()
将其加入到DOM中或删除其display: none;
。这被视为如果初始状态从来没有存在过那么元素总是在它的最终状态。克服这个限制最简单的办法是使用极少毫米数的window.setTimeout()。
js的事件也可以,比如click,focus,mousemove,mouseover,mouseout等等
css3动画通过transition属性和其他css属性(颜色,宽高,变形,位置等等)配合来实现。
1、transition-property(过渡属性)
- 可以单独指定元素哪些属性改变时执行过渡(transition),可以触发浏览器reflow或repaint的属性那些CSS属性可以应用动画,可参见:https://developer.mozilla.org/zh-CN/docs/CSS/CSS_animated_properties这里列出所有的CSS属性,如果可以做动画,那么会说明是如何设置。
- 可以指定为
all
,元素任何可过渡(transition)属性值变化时都将执行过渡(transition)效果。- 可以指定为
none
时,动画立即停止。- 初始默认值为
all
些属性可以变换?
transition-property:要变化的属性,比如元素变宽则是width,文字颜色要变色这是W3C给出了一个可变换属性的列表:
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 | 数字 |
几乎所有的有色彩、大小或位置等组件的CSS属性,包括许多新添加的CSS3属性, 都可以应用变换。一个值得注意的例外是box-shadow,不过部分浏览器还是对box-shadow添加了支持。
该取值还有个强大的“all”取值,表示上表所有属性;
除了以上属性外,当然还有css3中大放异彩的css3变形,比如放大缩小,旋转斜切,渐变等等。
transition-timing-function : ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(
transition-timing-function :(过渡时间函数)动画执行的计算方式,这里时间函数是令人崩溃的贝塞尔曲线,幸好
指定CSS属性的变换速率,预设的有:ease, linear, ease-in, ease-out, ease-in-out, cubic-bezier(x1, y1, x2, y2),默认值时easy:ease:(逐渐变慢)默认值,等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0). linear:(匀速),等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0). ease-in:(加速),等同于贝塞尔曲线(0.42, 0, 1.0, 1.0). ease-out:(减速),等同于贝塞尔曲线(0, 0, 0.58, 1.0) ease-in-out:(加速然后减速),等同于贝塞尔曲线(0.42, 0, 0.58, 1.0) cubic-bezier为通过贝塞尔曲线来计算“转换”过程中的属性值,如下曲线所示,通过改变P1(x1, y1)和P2(x2, y2)的坐标可以改变整个过程的Output Percentage。w3c文档中表述是所有值需在[0, 1]区域内,否则无效。但一些浏览器下对此没有限制
4、动画延迟
transition-delay :
transition-delay:在动作和变换开始之间等待多久,通常用秒来表示(比如, .1s)。如果你不想延迟,该值可省略。
指定一个动画开始执行的时间,即当改变元素属性值后多长时间开始执行“转换效果”,初始默认值为0;
例如:
经常会碰到同一元素会有多个动画同时执行的时侯,比如文字颜色和背景同时变化:
-webkit-transition: color .25s linear , background-color 1s linear;
这时候transition-property建议取值为“all”;
典型的应用举例:
放大缩小:
#scale { -webkit-transition: all .3s ease-in-out; }
#scale:hover { -webkit-transform: scale(1.5); }
旋转:
#rotate { -webkit-transition: all 1s ease-in-out;}
#rotate:hover {-webkit-transform: rotate(720deg);}