CSS 动画

WebKit 现在支持 CSS 中的显式动画。作为过渡(transitions)的对应物,动画(animations)提供了一种完全在 CSS 中使用关键帧(keyframes)声明重复动画效果的方法。


Screenshot of the leaves animation

使用最新的 nightly build,你可以查看上述动画的实际效果

让我们看看如何使用 CSS 动画,从一个弹跳盒子的例子开始。

Bouncing text animation

在最新的 WebKit nightly build 中查看此示例的实际效果。

指定动画很简单。你首先使用 @-webkit-keyframes 规则描述动画效果。

@-webkit-keyframes bounce {
 from {
   left: 0px;
 }
 to {
   left: 200px;
 }
}

一个 @-webkit-keyframes 块包含称为关键帧(keyframes)的规则集。关键帧定义了动画中该时刻将应用的样式。动画引擎将在关键帧之间平滑地插值样式。在上面的示例中,我们定义了一个名为“bounce”的动画,它有两个关键帧:一个用于动画的开始(“from”块),另一个用于动画的结束(“to”块)。

定义动画后,我们使用 -webkit-animation-name 和相关属性来应用它。

div {
 -webkit-animation-name: bounce;
 -webkit-animation-duration: 4s;
 -webkit-animation-iteration-count: 10;
 -webkit-animation-direction: alternate;
}

上述规则附加了“bounce”动画,将其持续时间设置为 4 秒,使其总共执行 10 次,并且每隔一次迭代反向播放。

现在,假设你想像 1995 年一样狂欢,并创建自己的超级闪烁样式。在这种情况下,我们指定一个包含多个关键帧的动画,每个关键帧具有不同的不透明度、背景颜色和变换值。

@-webkit-keyframes pulse {
 0% {
   background-color: red;
   opacity: 1.0;
   -webkit-transform: scale(1.0) rotate(0deg);
 }
 33% {
   background-color: blue;
   opacity: 0.75;
   -webkit-transform: scale(1.1) rotate(-5deg);
 }
 67% {
   background-color: green;
   opacity: 0.5;
   -webkit-transform: scale(1.1) rotate(5deg);
 }
 100% {
   background-color: red;
   opacity: 1.0;
   -webkit-transform: scale(1.0) rotate(0deg);
 }
}

.pulsedbox {
 -webkit-animation-name: pulse;
 -webkit-animation-duration: 4s;
 -webkit-animation-direction: alternate;
 -webkit-animation-timing-function: ease-in-out;
}

Screenshot of the pulsing text animation

同样,在最新的 WebKit nightly build 中查看此示例的实际效果。

关键帧使用百分比值指定,定义了关键帧在动画持续时间内的快照时刻。“from”和“to”关键字分别等同于“0%”和“100%”。

CSS 动画是 WebKit 项目提出的一项 CSS 增强功能,我们称之为 CSS 特效(例如渐变、遮罩、过渡)。其目标是提供属性,使 Web 开发人员能够创建图形丰富的 H5 内容。在许多情况下,动画是表现性的,因此属于样式系统。这允许开发人员为动画编写声明性规则,取代了 JavaScript 中大量难以维护的动画代码。

另一个好消息是,iPhone 2.0 上的 WebKit 已经支持 CSS 动画(以及 CSS 变换和 CSS 过渡)。iPhone 上的实现已针对该平台进行了优化,因此您将获得出色的性能。结合动画、过渡和变换可以实现一些非常令人印象深刻的内容。

我们正在webkit.org 上记录这些增强功能,并向标准机构提交规范。请注意,由于它们目前是 WebKit 特有的功能,因此它们使用 -webkit- 前缀实现,尽管规范中不使用该前缀。

您可以在 Apple 的Web 应用程序开发者中心找到更多示例。

和往常一样,请在评论中留下反馈,并在http://bugs.webkit.org/提交错误。