概述

前几天刚好看到一个用了CSS3帧动画的页面,对它非常感兴趣,就研究了一下,记录在下面,供以后开发时参考,相信对其他人也有用。

PS:以后别人问我用过什么CSS3属性的时候,我也可以不用说常见的animation,transform这些了,我可以说帧动画这个高大上的术语了哈哈。

本篇文章参考了:CSS3 animation的steps方式过渡CSS遮罩mask

帧动画

帧动画其实就是CSS3中animation中的steps。它能够把静态图片处理为动态图片。原理是不断地切换图片,从而让图片“动”起来。

下面我通过2个示例来进行说明。

兔斯基

你可以从我的博客左上方的公告下面那个会动的兔斯基看到这个示例。(暂不支持移动端)(这个兔斯基不是gif!!!)

它的代码如下:

/* 兔斯基帧动画 */
@-webkit-keyframes rabbit {
0% {background-position:0px -0%;}
100% {background-position:0px -400%;}
}
@keyframes rabbit {
0% {background-position:0px -0%;}
100% {background-position:0px -400%;}
}
div.myRabbit {
height:35px;width:32px;
-webkit-animation:rabbit 400ms steps(4) infinite;
animation:rabbit 400ms steps(4) infinite;
background:url(http://images.cnblogs.com/cnblogs_com/yangzhou33/1158868/o_%e5%85%94%e6%96%af%e5%9f%ba%e6%8f%89%e8%84%b8.png);
}

其中rabbit是一个动画,整个过程和一般的animation定义动画没什么区别,除了animation里面用了一个steps(4),它的意思是把动画0%-100%这个过程分为4段来播放。

有以下三点需要说明:

  1. 本来这个用steps(4)的地方是用linear的,linear表示整个动画过程是平滑的,而用steps(4)表示整个动画过程分为4帧,不是平滑的。
  2. steps(4)还可以接受第二个参数,值是step-start或step-end,前者表示第一帧是从0px -0%开始的,然后逐渐递增;后者表示第一帧是从0px -100%开始的,然后逐渐递增。详细的可以参考:深入理解CSS3 Animation 帧动画
  3. steps(4)是对每一段动画而言的,如果有一个2段的动画,那么每一段将会分为4帧。于是我们可以把上面的代码改为如下。(这个时候就是steps(2)了)
/* 兔斯基帧动画 */
@-webkit-keyframes rabbit {
0% {background-position:0px -0%;}
50% {background-position:0px -200%;}
100% {background-position:0px -400%;}
}
@keyframes rabbit {
0% {background-position:0px -0%;}
50% {background-position:0px -200%;}
100% {background-position:0px -400%;}
}
div.myRabbit {
height:35px;width:32px;
-webkit-animation:rabbit 400ms steps(2) infinite;
animation:rabbit 400ms steps(2) infinite;
background:url(http://images.cnblogs.com/cnblogs_com/yangzhou33/1158868/o_%e5%85%94%e6%96%af%e5%9f%ba%e6%8f%89%e8%84%b8.png);
}

泼墨效果

每次打开我的博客或者打开我的博客的文章都会有一个“泼墨”的效果(暂不支持移动端),这里也用到了帧动画,代码如下。

/* 泼墨帧动画 */
@-webkit-keyframes masky {
0% {
mask-position: 0 0;
-webkit-mask-position: 0 0;
}
100% {
mask-position: 100% 0;
-webkit-mask-position: 100% 0;
}
}
@keyframes masky {
0% {
mask-position: 0 0;
-webkit-mask-position: 0 0;
}
100% {
mask-position: 100% 0;
-webkit-mask-position: 100% 0;
}
}
div#home{
-webkit-mask: url(http://images.cnblogs.com/cnblogs_com/yangzhou33/1158868/o_masky.png);
mask: url(http://images.cnblogs.com/cnblogs_com/yangzhou33/1158868/o_masky.png);
-webkit-mask-size: 4000% 100%;
mask-size: 4000% 100%;
-webkit-animation:masky 1s steps(39) forwards;
animation:masky 1s steps(39) forwards;
}

原理和兔斯基大致相同。但有几点需要说明:

  1. 里面用到了mask属性,这个是css3的遮罩属性。
  2. css3的遮罩属性mask必须写在整个包含块里面,比如我就写在了home里面。不能建立一个position为absolute/fixed的遮罩层来专门放它!

css3的帧动画的更多相关文章

  1. css3逐帧动画

    写css3动画的时候,我们经常用到animation来实现,默认情况下,animation是属于连贯性的ease动画.我们熟悉的animation动画有ease.ease-in.ease-out.li ...

  2. 深入理解CSS3 Animation 帧动画

    CSS3我在5年之前就有用了,包括公司项目都一直在很前沿的技术. 最近在写慕课网的七夕主题,用了大量的CSS3动画,但是真的沉淀下来仔细的去深入CSS3动画的各个属性发现还是很深的,这里就写下关于帧动 ...

  3. 深入理解CSS3 Animation 帧动画 ( steps )

    作者:Aaron的博客 网址:http://www.cnblogs.com/aaronjs/p/4642015.html --------------------------------------- ...

  4. 深入理解CSS3 Animation 帧动画(转)

    CSS3我在5年之前就有用了,包括公司项目都一直在很前沿的技术. 最近在写慕课网的七夕主题,用了大量的CSS3动画,但是真的沉淀下来仔细的去深入CSS3动画的各个属性发现还是很深的,这里就写下关于帧动 ...

  5. CSS3 Animation 帧动画 steps()

    @keyframes fn{ 0%{} 100%{} } CSS3的Animation有八个属性 animation-name :动画名 fn animation-duration:时间 1s ani ...

  6. css3 animation实现逐帧动画

    css3里面的animation属性非常强大,但是自己用的比较少,最近有次面试就刚好被问到了,趁现在有时间就对animation做一个小总结.同时实现一个逐帧动画的demo作为练习 animation ...

  7. css3-逐帧动画

    time,这里有两个时间,前面一个是规定完成这个动画所需要的时间,全称叫animation-duration,第二个time为动画延迟开始播放的时间,全称叫animation-delay,这两个数值可 ...

  8. CSS3的自定义动画帧

    CSS3新增的动画帧非常绚丽,可以简单实现一些动画效果,目前除IE外各大主流浏览器都支持 本文演示三个:transform: scale3d(x, y, z)-缩放;.transform: trans ...

  9. css3 实现逐帧动画

    css3 实现逐帧动画 实现逐帧动画需要使用到的是Animation动画,该CSS3的Animation有八个属性:分别是如下:1: animation-name2: animation-durati ...

随机推荐

  1. JavaScript的基础篇

    一.JavaScript的引入方式 1)js的引用方式 <body> <!--引入方式一,直接编写--> <script> alert("hello wo ...

  2. kbmmw 中JSON 中使用SQL 查询

    前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值.也就是说 ...

  3. windows无法卸载jdk的解决方法

    装了java之后非常纠结的就是无法卸载,总不能因为卸载一个jdk去重装系统,但是看着它残存在那又非常不爽, 因为卸载会牵扯注册表等琐碎的东西,,,后来在官网发现神器一枚,此神器就是java卸载工具. ...

  4. Spring框架简介

    1.发明者:Rod Johnson 2.轮子理论推崇者: 2.1 轮子理论:不用重复发明轮子 2.2 IT行业:直接只用写好的代码 3.Spring框架宗旨:不重新发明技术,让原有技术使用起来更加方便 ...

  5. idea在哪执行maven clean?

  6. springboot+cfx实现webservice功能

    一.开发服务端 1.新建工程 cfx-webservice ,最终的完整工程如下: pom.xml如下: <?xml version="1.0" encoding=" ...

  7. 学习刘伟择优excel视频

    for each 字符串函数: 默认参数,在子函数中必须要有默认值. 在工作表输入时,F9的功能是把区域编程数组,shift+ctrl+enter功能是把数组分开填入单元格. 创建数组: 1. 2. ...

  8. VESA时序与BT1120的区别

    在实现内嵌传输的过程中,笔者参考VESA的时序,也就是下图,实现了一个内嵌同步的程序,同步码放在H Back Porch与H Front Porch的后端与前端,但是在传输过程中发现接收端画面不正常. ...

  9. Linux学习(1)- TCP/IP网络协议基础

    Linux学习(1)- TCP/IP网络协议基础 一.TCP/IP 简介 学习内容 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输 ...

  10. java -version 版本号与path中配置的不一致

    Error: could not open `F:\e\java\jre7\lib\amd64\jvm.cfg' C:\Users\wl>java -versionError: could no ...