您的位置:金沙js28com > 前端 > 深入了解CSS3中的丰富动画技术

深入了解CSS3中的丰富动画技术

2019-04-01 12:40

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

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

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

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

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

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

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

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

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

  Scale是一个缩放功能,可以让任一元素变的更大。它使用正数和负数以及小数作为参数。

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

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

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

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

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

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

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

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

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

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

  没错,Matrix就是矩阵,矩阵是高等数学中非常基础的一个东东,而在CSS 3中确实一个相当高级的功能,CSS 3引入matrix函数,可以非常灵活的实现上述的各种效果。它有6个参数(a,b,c,d,e,f),它事实上是一个3*3矩阵,经过该矩阵将旧的参数转换成新值:

  如果你有兴趣深入研究,可以看一下这里,这是SVG的一个文档,但是对于matrix变换的原理是通用的。

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

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

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

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

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

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

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

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

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

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

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

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

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

本文链接:深入了解CSS3中的丰富动画技术