`
Pweb
  • 浏览: 55242 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

你需要知道的CSS3 动画技术

    博客分类:
  • CSS
阅读更多

原文链接:http://www.qianduan.net/what-you-need-to-know-about-behavioral-css.html

 

译自:你需要知道的CSS3 动画技术
译自:What You Need To Know About Behavioral CSS
请尊重版权,转载须注明本站链接!

译序: 本文译自Smashingmagazine,但是原文讲述的内容有些浅,也不是很完整,前端观察 在翻译的前提下,增加了更多的更系统的内容。如有不足之处,欢迎指正补充。

随着网络的发展,浏览器具有更强的渲染更高级代码的能力,我们正逐步实现跨越所有平台和浏览器的目标。我们不但可以要花费更少的时间来确保我们的盒模型在IE6中看起来正常,而且形成了鼓励创新、避免hack、重前端脚本的氛围。

 

网络是一个非常好的环境,也是一个有丰富的知识来分享的协作社区。我们想要有圆角 ,我们就实现了它;我们想要多背景图片 ,我们实现了它;我们想要  边框图片 ,我们也让它实现了。所以需求从来不是问题,否则,我们可能还都仍然在使用table来布局页面而且使用过多的代码呢。我们都知道,网络无所不能。

为网络而生

CSS 3的属性比如border-radiusbox-shadow  text-shadow 在webkit(Safari、Chrome等)和Gecko(Firefox)等先进的浏览器中的使用开始出现增长的势头。它们(这些CSS属性)已经为用户创建更轻量的页面和更丰富的体验,而且它们可以优雅的降级。然而,这些只是CSS 3能为我们做的众多事情中的一小部分。

在本文中,我们将走的更远,看一看  变形(transformation)、转换(transition)和动画(animation) 等更高级的CSS3技术。我们将涉及代码本身、浏览器支持以及一些可以正确地展示这些新属性是如何即提升你的设计又增强整体用户体验的例子。

CSS 变形(Transformation)

CSS transformation是W3C的一个草案。但当我第一次坐下来阅读它的全部特性 以了解一些东西的时候,它并没有让我感到开窍。你可以想象的到,这个文档是用技术术语的撰写的,而且它更关注变形的图形(比如绘图)元素和矩阵。大一学习微积分之后就没有碰过矩阵了,我必须为本章节做很多好的旧浏览器测试以及猜测和检验。

在看完我能找到的每一个教程和大量的浏览器测试之后,我总结出一些大家都能从中获益的有用的关于CSS变形 的信息。

transform

transform属性实现了一些可用SVG 实现的同样的功能。它可用于内联(inline)元素和块级(block)元素。它允许我们旋转、缩放和移动元素——只需要一行CSS代码。

一些前卫设计的最大诟病就是文字不可选(必须要使用切图的方法实现)。当你熟练使用transform属性来控制文字的时候,这就不再是问题了,因为这是个纯CSS方法,所以元素内的文字会保持可选。这是CSS相对于使用图片(或背景图片)的一个巨大优势。

一些有趣而有用的变形功能:

  • rotate
    Rotate(旋转)允许你通过传递一个度数值来转动一个对象。
  • scale
    Scale是一个缩放功能,可以让任一元素变的更大。它使用正数和负数以及小数作为参数。
  • translate
    Translate就是基于X和Y 坐标重新定位元素
  • skew
    顾名思义,skew就是要将对象倾斜,参数是度数
  • matrix
    transform支持矩阵变换,就是基于X和Y 坐标重新定位元素

让我们更深入的了解每一个功能吧。

Rotate

transform属性有很多用法,其中一个就是translate(旋转) 。translate就是基于角度转动一个对象并可用于内联元素和块级元素,它可以实现很酷的效果

Transform Rotate in What You Need To Know About Behavioral CSS

1
2
3
4
5
6
#nav
{

	-webkit-transform:
 rotate(
-90deg)
;

	-moz-transform:
 rotate(
-90deg)
;

	-o-transform:
 rotate(
-90deg)
;

	filter:
 progid:DXImageTransform
.Microsoft
.BasicImage(
rotation=
3
)
;

	}

请注意在IE8中(非标准模式)它需要你写成“-ms-filter”而不是“filter”。

浏览器支持

浏览器对translate的支持令人惊奇的广泛。在上面的CSS片段中,我们直接加上-webkit-和-moz-前缀然后将#nav元素旋转-90度。

相当简单吧?唯一的问题是对于一个相当重要的设计元素,如果IE不支持,很多设计师就会不情愿使用它。

幸运的是,IE有这方面的滤镜 :图形旋转滤镜。它可以有4个旋转值:0, 1, 2,和3。你将不会获得和Webkit和Gecko一样的精密控制,但是至少在一定程度上保持统一(甚至IE6)。虽然这个滤镜只支持4个值,显得有些鸡肋,但是对于IE来说,聊胜于无吧。

另外,非常值得一提的是,Opera在前几天发布了Opera 10.50 pre版本,声称支持CSS3 的transition和transform。只是还是需要使用私有属性,也就是要使用前缀 -o-

scale

scale并不像你想象的那样工作:简单的缩小和放大一个元素。缩放功能同时采用宽和高两个值,这些值可以是正数、负数和小数。

正数值放大一个元素,正如你期望的那样,基于指定的宽度和高度。

负数值并不会缩小元素,而是翻转它(比如,文字被反转)然后相应的缩放它。然而,你可以使用小于1的小数(例如.5)来收缩或者缩小一个元素。

Transform Scale in What You Need To Know About Behavioral CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#nav
 {

	/* nav元素的宽和高都会被放大双倍 */

	-webkit-transform:
 scale(
2
)
;

	-moz-transform:
 scale(
2
)
;

	-o-transform:
 scale(
2
)
;
 }

#nav
 {

	/* nav元素的宽会是双倍,而高度保持不变 */
 
	-webkit-transform:
 scale(
2
,
 1
)
;
 
	-moz-transform:
 scale(
2
,
 1
)
;

	-o-transform:
 scale(
2
,
 1
)
;

	}

#nav
 {

	/* nav的宽度将是双倍,并且水平翻转,但是高度保持不变 */
 
	-webkit-transform:
 scale(
-2
,
 1
)
;
 
	-moz-transform:
 scale(
-2
,
 1
)
;
 
	-o-transform:
 scale(
-2
,
 1
)
;
 
	}

浏览器支持

scale属性目前只有Firefox, Safari/Chrome以及 opera 10.50 支持,到目前为止没有一个IE版本支持。缩放一个对象是相当有意义的设计选择。它可以通过渐进增强来使用:hover,这可以在你的导航上添加一个小小的趣味。

1
2
3
4
5
6
#nav
 li a:hover
{

	/* 这可以让你的导航链接在鼠标经过的时候轻微的放大 */
 
	-webkit-transform:
 scale(
1.1
)
;

	-moz-transform:
 scale(
1.1
)
;
 
	-o-transform:
 scale(
1.1
)
;
 
	}

translate

这个名称“translate(转化)”有点容易误解。它事实上是一种使用X和Y坐标值定位元素 的方法。

Transform Translate in What You Need To Know About Behavioral CSS

1
2
3
4
5
6
#nav
{

	/* 这会将nav元素向左移动10像素并向下移动20像素 */

	-moz-transform:
 translate(
10px
,
 20px
)
;

	-webkit-transform:
 translate(
10px
,
 20px
)
;
 
	-o-transform:
 translate(
10px
,
 20px
)
;
 
}

浏览器支持

translate属性目前只被Firefox, Safari/Chrome和Oprea 10.5 支持,而且还要使用浏览器的私有前缀-moz- 和-webkit-。

Skew

Skew也是一个很有用的transform功能,它可以将一个对象围绕着x和y轴按照一定的角度倾斜。这和rotate的旋转不一样,rotate只是旋转,而不会让元素的形状改变。skew会让一个元素的形状改变。skew有两个参数,分别代表x和y轴的倾斜度数

1
2
3
4
5
6
#nav
{

	/* 这会将nav元素向左移动10像素并向下移动20像素 */

	-moz-transform:
 skew(
30deg,
 -10deg)
;

	-webkit-transform:
 skew(
30deg,
 -10deg)
;
 
	-o-transform:
 skew(
30deg,
 -10deg)
;
 
}

浏览器支持

Skew属性目前只被Firefox, Safari/Chrome和Oprea 10.5 支持,而且还要使用浏览器的私有前缀-moz- 和-webkit-。

Matrix

没错,Matrix就是矩阵,矩阵是高等数学中非常基础的一个东东,而在CSS 3中确实一个相当高级的功能,CSS 3引入matrix函数,可以非常灵活的实现上述的各种效果。它有6个参数(a,b,c,d,e,f),它事实上是一个3*3矩阵,经过该矩阵将旧的参数转换成新值:
| a b e |
| c d f |
| 0 0 1 |
如果你有兴趣深入研究,可以看一下这里http://www.w3.org/TR/SVG/coords.html#TransformMatrixDefined ,这是SVG的一个文档,但是对于matrix变换的原理是通用的。

让我们来看一个例子吧:

1
2
3
4
5
6
#nav
{

	/* nav元素将会像右上角倾斜 */

	-moz-transform:
 matrix(
1
,
 -0.2
,
 0
,
 1
,
 0
,
 0
)
;

	-webkit-transform:
 matrix(
1
,
 -0.2
,
 0
,
 1
,
 0
,
 0
)
;
 
	-o-transform:
 matrix(
1
,
 -0.2
,
 0
,
 1
,
 0
,
 0
)
;
 
}
浏览器支持

可喜的是,IE支持matrix滤镜 ,虽然它不支持大部分CSS3变形功能,但是使用它的这个滤镜,基本也可以实现相同的效果,不过,你要先搞明白矩阵运算再说。webkit和Firefox(3.5+)、Opera 10.5都支持该功能。

链式变形

变形常常是单独的,但是如果你想同时用到多种变形,代码也是可以快速整合的,特别是使用私有扩展。幸运的是,我们有一些内置的缩写:

1
2
3
4
5
6
7
8
9
10
11
#nav
{

	-moz-transform:
 translate(
10
,
 25
)
;
 
	-webkit-transform:
 translate(
10
,
 25
)
;
 
	-o-transform:
 translate(
10
,
 25
)
;
 
	-moz-transform:
 rotate(
90deg)
;
 
	-webkit-transform:
 rotate(
90deg)
;
 
	-o-transform:
 rotate(
90deg)
;
 
	-moz-transform:
 scale(
2
,
 1
)
;
 
	-webkit-transform:
 scale(
2
,
 1
)
;
 
	-o-transform:
 scale(
2
,
 1
)
;
 
}

这些变形可以被链到一起 ,从而让你的代码更高效:

1
2
3
4
5
#nav
{

	-moz-transform:
 translate(
10
,
 25
)
 rotate(
90deg)
 scale(
2
,
 1
)
;

	-webkit-transform:
 translate(
10
,
 25
)
 rotate(
90deg)
 scale(
2
,
 1
)
;
 
	-o-transform:
 translate(
10
,
 25
)
 rotate(
90deg)
 scale(
2
,
 1
)
;
 
	}

这些属性的真正的威力是合并到一起。你可以移动、旋转、缩放并控制任何内联元素和块级元素而不使用JavaScript。一旦这些属性的支持变的更加广泛,我们就可以创建更丰富和更轻量的界面和应用。

transform-origin

transform-origin不是transform的一个子功能,但是和transform关系非常密切。它可以用来指定transform的起点 ,比如,rotate变形的默认起点是其中间,你可以将起点设置在左上角,或者左下角,这样rotate变形的结果就可能大不相同了。

transform-origin接受两个参数,它们可以是百分比,em,px等具体的值,也可以是left,center,right,或者 top,middle,bottom等描述性参数。几个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
.class1
{
-moz-transform-origin:
 0
 0
;

-webkit-transform-origin:
 0
 0
;

-o-transform-origin:
 0
 0
;

...
}

.class2
{
-moz-transform-origin:
100
%
 100
%
;

-webkit-transform-origin:
100
%
 100
%
;

-o-transform-origin:
100
%
 100
%
;

...}

.class3
{
-moz-transform-origin:top
 
left;

-webkit-transform-origin:top
 
left;

-o-transform-origin:top
 
left;

...}
浏览器兼容性

该属性目前也只有webkit、firefox和Opera 10.5支持,而且需要添加各自的私有前缀。

transition(转换)

一个涉及到CSS属性的基本的转换就是定义和移动一个元素从它的静止状态(比如,深蓝色背景)到它的hover或者激活状态(比如,浅蓝色背景)。

转换可以和变形同时使用(以及引发诸如:hover 或:focus事件)以创建一些动画。淡出背景色彩,滑动一个元素以及让一个对象旋转都可以通过CSS转换实现。

1
2
3
4
5
6
7
8
9
10
#nav
 a{
 background-color
:
red
;
 }

	#nav
 a:hover
,
 #nav
 a:focus
{

		background-color
:
blue
;

		/* 告诉转换去应用到background-color 属性(看起来像一个CSS 参数,不是吗? #foreshadowing)*/

		-webkit-transition-property:background-
color;

		-o-transition-property:background-
color;

		/* 让它持续两秒钟*/

		-webkit-transition-duration:
2s;

		-o-transition-duration:
2s;

}

转换的一些参数

  • transition-property

    指定转换的CSS属性名称,比如,上面的例子中,将转换应用于background-color属性。

  • transition-duration

    定义转换花费的时间(从旧属性换到新属性花费的时间)

  • transition-timing-function

    可以理解为过度效果。指定转换过程中的中间值。可以用cubic-bezier指定。当然有几个常用的内置值:ease | linear | ease-in | ease-out | ease-in-out

  • transition-delay

    这个比较容易理解,就是转换延迟的时间。时间可以为正整数、负整数和零,非零的时候必须设置单位是s(秒)或者ms(毫秒),为负数的时候,转换的动作会从该时间点开始显示,之前的动作被截断。

注:参数部分为前端观察 翻译时添加,原文中没有。

浏览器支持

像transform属性一样酷,但是目前只有WebKit 浏览器支持。Opera 10.5 pre版本也可以通过添加-o-前缀来支持。-moz-transition已经在最近的nightly-build版本的Firefox 3.7中可用。你也可以添加-moz-transition到你的CSS中以实现将来的增强。甚至可以添加一个不用私有前缀的属性,以防万一。

Animation

动画是CSS 3最有用的地方。你可以将我们在上面讨论的所有的元素与动画属性比如animation-duration、animation-name 和animation-timing-function整合以创建像Flash动画一样的效果——纯CSS。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#rotate
 {

	margin
:
 0
 auto
;

	width
:
 600px
;

	height
:
 400px
;
 
	/* 确保我们是在一个 3-D 空间 */

	-webkit-transform-style:
 preserve-3d;

	/*让整个行使用x-轴旋转、7秒中的动画、无限次播放以及线性 */

	-webkit-animation-name:
 x-spin;

	-webkit-animation-duration:
 7s;

	-webkit-animation-iteration-count:
 infinite;

	-webkit-animation-timing-function:
 linear;
 
}

	/* 定义要调用的动画 */

@-webkit-keyframes x-spin { 

	0
%
 {
 -webkit-transform:
 rotateX(
0deg)
;
 }
 
	50
%
 {
 -webkit-transform:
 rotateX(
180deg)
;
 }

	100
%
 {
 -webkit-transform:
 rotateX(
360deg)
;
 }
 
}

这个梦幻的CSS动画代码和在线演示可以在webkit 网站看到。该演示可以在任何网站看到,但是动画效果却只能在Mac os(雪豹)的WebKit的nightly build版本 可见。它看起来就像上面的视频中的一样,如果你是在用mac os (雪豹版本), 我认为安装一个webkit以亲眼看看这个效果是很值得的(它真的很酷)。Windows系统用户暂时无法欣赏这个效果。

animation的一些参数

animation的参数和translate有些像,所以如果你理解了translate的参数,这里就不难理解了。

  • animation-name

    动画的名称。

  • animation-duration

    定义动画播放一次需要的时间。默认为0;

  • animation-timing-function

    定义动画播放的方式,参数设置类似transition-timing-function

  • animation-delay

    定义动画开始的时间

  • animation-iteration-count

    定义循环的次数,infinite即为无限次。默认是1。

  • -webkit-animation-direction

    动画播放的方向,两个值,默认为normal,这个时候动画的每次循环都向前播放。另一个值是alternate,则第偶数次向前播放,第奇数次向反方向播放。

浏览器支持

不幸的是,目前,只有少数浏览器支持CSS动画。2D CSS animations 可以在Safari 4 (Leopard)、Chrome 3、Safari Mobile、Shira 以及其它Webkit 浏览器中工作。Safari 4 (Snow Leopard)支持3D动画

总结

现在,JavaScript可以在CSS 3完善之前弥补这个差距。遗憾的是,让所有浏览器支持这些很棒的属性可能需要一个很长的过程。不用等待那一天的到来,我们可以先使用一些严谨的渐进增强 以及以来Javascript来增强我们的网站和应用。这不是件坏事,至少现在看起来是。

看了最近的IE9的公告 ,如果IE团队添加这些属性中的一些到这个新的版本的浏览器中我不会感到惊讶,他们已经开始考虑整合CSS3了(border-radius)。

web的前景是光明的,特别是因为这些类似动画的高度实验性的属性。尽管很多属性对客户或高级产品工作还不可用,至少他们很有趣!我们都期待着有一天,我们可以支持所有平台,以建立一些真的很棒的轻量级应用。

参考与资源

关于原作者

Tim Wright是一位网页设计师/开发工程师和博主。他从2004年就成为一名web标准和易用性的倡导者。你可以在CSSKarma.com 上找到他写的更多文章,或者follow Tim on Twitter

分享到:
评论

相关推荐

    WebKit CSS3 动画基础

    **WebKit CSS3 动画基础** WebKit 是一个开源的网页渲染引擎,被广泛应用于...综上所述,WebKit CSS3 动画是构建动态网页的重要技术,通过理解和熟练掌握这些概念和技巧,开发者能够创造出引人入胜的交互式用户体验。

    CSS3动态多选框打钩动画特效.zip

    【CSS3动态多选框打钩动画特效】是一种在网页设计中常见的交互效果,它能够提升用户界面的吸引力和用户体验。CSS3是层叠样式表的第三版,它引入了许多新的特性和功能,使得开发者能够创建更加丰富和动态的网页元素。...

    47 个 惊人的 CSS3 动画示例

    标题与描述概述: ...总之,《47个惊人的CSS3动画示例》不仅是对CSS3动画技术的一次全面展示,也是一场视觉盛宴,它不仅让设计师和开发者看到了CSS3的强大潜力,也为网页设计带来了新的灵感和可能性。

    纯css3炫酷粒子动画特效

    【CSS3炫酷粒子动画特效】是一种利用现代浏览器对CSS3特性的支持,通过编程方式创建出视觉上引人入胜的动态效果。这个特效主要依赖于CSS3的动画(Animations)和转换(Transforms)特性,以及可能的伪元素(Pseudo-...

    css3鼠标悬停动画

    在网页设计中,CSS3(层叠样式表第三版)为开发者带来了许多创新特性,其中鼠标悬停动画就是一种增强用户体验的重要方式。通过利用CSS3的:hover伪类和各种动画属性,我们可以创建出丰富多彩的交互效果,使得用户在...

    行情css3动画

    这个jQuery抽奖插件可能还包括了一些优化措施,比如使用requestAnimationFrame进行动画的平滑渲染,或者在动画结束后自动清除CSS动画,以减少不必要的计算资源消耗。 总的来说,"行情css3动画"是一个结合了CSS3动画...

    css3动画图标效果

    虽然CSS3提供了丰富的动画功能,但有时我们还需要JavaScript来实现更复杂的交互或控制。例如,使用jQuery库可以方便地添加事件监听器,动态启动或停止动画: ```javascript $(document).ready(function() { $('....

    CSS3动画源码

    本篇文章将深入探讨CSS3动画的原理与实践,通过具体的源码分析,帮助你掌握这一强大技术。 **1. CSS3动画基础** CSS3动画基于关键帧(Keyframes),它允许我们在动画过程中设置多个状态,浏览器会自动计算并平滑...

    css3制作穿越云层开场动画,css3+js

    首先,我们需要理解CSS3的关键帧动画(@keyframes)。关键帧动画允许我们定义动画的不同阶段,从而控制元素在整个动画过程中的变化。在云层穿越动画中,我们可以定义一个动画,让一个元素(比如一个飞机或角色的图片...

    css3 3D邮寄信封打开动画特效

    虽然CSS3的3D转换和动画在现代浏览器中得到了广泛支持,但仍然需要注意老版本浏览器的兼容性问题。可以使用前缀(如 `-webkit-`, `-moz-`, `-ms-`, `-o-`)来确保在不同浏览器上的效果一致。 7. **响应式设计**: ...

    纯css3 3D旋转科技球体动画特效

    3. 球体动画:科技球体动画是通过CSS3的3D变换技术构建一个虚拟的球形模型,通常通过多个小方块或图片元素拼接而成,每个小方块分别应用不同的3D变换,模拟球体表面的立体效果。这些元素在时间轴上进行动态变化,如...

    Css3 animation---介绍如何实现css的动画

    这篇教程将深入探讨CSS3 Animation的原理、语法以及应用场景,帮助你更好地掌握这一强大技术。 ### 一、基本概念 CSS3 Animation是通过`@keyframes`规则定义动画过程,并结合`animation`属性来应用动画。`@...

    CSS3动画技术 旋转 透明 移动

    本篇将深入探讨CSS3中的旋转、透明度调整以及移动这三种关键的动画技术。 首先,让我们来看一下CSS3中的旋转(Rotation)。通过`transform`属性,我们可以实现元素的旋转效果。使用`rotate()`函数,可以指定一个...

    纯CSS3实现的3D小球动画在线演示

    【标题】:“纯CSS3实现的3D小球动画在线演示” 在网页设计与开发领域,CSS3(层叠样式表第三版)的引入为设计师和开发者提供了丰富的样式和动画功能,大大增强了网页的视觉效果。本项目标题“纯CSS3实现的3D小球...

    CSS3 动画实现大数据热点图

    本话题将聚焦于如何利用CSS3动画技术实现大数据热点图,这是一种用于可视化大量数据中关键区域的高效方式。 首先,我们需要理解大数据热点图的基本概念。热点图是通过颜色的深浅来表示数据分布的密度或强度,常用于...

    清新CSS3动画网页模板

    【标题】"清新CSS3动画网页模板"是针对现代网页设计的一款创新资源,它利用了CSS3技术的强大功能,为用户提供了丰富的动态效果和视觉体验。CSS3是层叠样式表的最新版本,相较于之前的CSS2,它引入了许多新的选择器、...

    CSS3波浪音阶动画特效.zip

    【CSS3波浪音阶动画特效】是一种利用CSS3的强大功能和灵活性来创建动态视觉效果的技术。CSS3是层叠样式表(Cascading Style Sheets)的第三个版本,相较于之前的版本,它引入了许多新的选择器、属性和功能,极大地...

    Repaintless.css-轻量级高性能的CSS3动画库

    7. **js**目录:虽然标题没有提及JavaScript,但考虑到CSS3动画可能需要JavaScript配合,此目录可能包含辅助脚本或示例代码。 使用Repaintless.css时,开发者需要注意以下几点: - 确保目标浏览器支持CSS3动画,...

    纯css3音阶波浪loading加载动画特效

    这个加载动画通过纯CSS3技术,无需JavaScript或其他编程语言,就能实现优雅且引人入胜的用户体验。CSS3的动画属性、选择器和过渡效果在其中起到了关键作用。 1. **CSS3动画属性**:在CSS3中,`@keyframes` 规则允许...

    30种CSS3加载动画

    本主题“30种CSS3加载动画”聚焦于利用CSS3技术实现的各种加载效果,这些动画在网页加载数据或者页面切换时提供美观且吸引用户的过渡体验。 首先,CSS3动画是通过关键帧(@keyframes)规则来定义的,它允许开发者...

Global site tag (gtag.js) - Google Analytics