Page 237 - css揭秘
P. 237

„ GIF 不具备 Alpha 透明的特性。当我们不确定 GIF 动画的下层是什
                                                     么时,这往往是一个大问题。比如对于加载提示来说,半透明效果
                                                     是十分常见的(参见图 8-13)。
                                                     „ 我们无法在 CSS 层面修改动画的某些参数,比如动画的持续时间、
                                                     循环次数、是否暂停等。GIF 动画一旦生成,上述所有参数就固定
                                                     在文件内部了;如果想作修改,就只能动用图像处理软件去重新生
                                                     成一个 GIF 文件。从可移植性的角度来看,这种特性确实不错,但
                                                     对调试过程来说相当不便。

                                                  2004 年,Mozilla 发起了一个建议:在 PNG 格式中增加对逐帧动画
                                              的支持,就像 GIF 格式同时支持静态图像和动画一样。这种格式被称作
                                              APNG。它在设计时就考虑到了如何向后兼容:它会把动画的第一帧画面以
                                              传统 PNG 文件的方式进行编码,因此对于那些不支持 APNG 特性的旧版看
                                              图软件来说,至少可以把第一帧正常显示出来。尽管看起来大有前途,但
                                              APNG 并没有获得足够的推广。时至今日,只有极少数的浏览器和图像处理
                                                              1 ①
                                              软件支持这种格式 。
                                                  网页开发者甚至动用过 JavaScript 在浏览器中实现灵活的逐帧动画,比
                                              如用一张拼合图片(image sprite)作为背景,然后用 JavaScript 动态地控制
                                              它的 background-position。你甚至还可以找到一些专门为此设计的小型类
                                              库!我们能否只借助清爽易读的 CSS 代码就满足这个需求呢?


                                              解决方案

                                                  假设我们已经把动画中的所有帧全部拼合到一张 PNG 图片中了,如图
                                              8-14 所示。


                    图 8-14
                    旋转菊花所需要的八帧画面已
                    经合并到一起了(图片尺寸为
                    800×100)
                                                  然后用一个元素来容纳这个加载提示(别忘了在里面写一些文字,来确
                                              保可访问性),并把它的宽高设置为单帧的尺寸:
                                                                                                         HTML
                                                  <div class="loader">Loading...</div>


                                                  .loader {
                                                      width: 100px; height: 100px;

                                                      background: url(img/loader.png) 0 0;

                                                      /* 把文本隐藏起来 */


                                              ①  关于 APNG 的更多信息,请参阅 wikipedia.org/wiki/APNG。



                  206   第 8 章 过渡与动画







          ඀ࠡ  JOEC
   232   233   234   235   236   237   238   239   240   241   242