概述

前几天刚好看到一个用了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. C语言实现用位移运算符进行加减乘…

      最近,在百度知道上回答问题,然后看见有的人问如何用位移运算符去进行加减乘除运算,于是巩固今天就在这总结一下.   先讲讲总体思路: 加法运算:将一个整数用二进制表示,其加法运算就是:相异(^)时, ...

  2. BP神经网络在python下的自主搭建梳理

    本实验使用mnist数据集完成手写数字识别的测试.识别正确率认为是95% 完整代码如下: #!/usr/bin/env python # coding: utf-8 # In[1]: import n ...

  3. tms web core 里面调用pascal 过程。

    procedure show(s:string);begin  showmessage(s);end; procedure TForm3.WebButton1Click(Sender: TObject ...

  4. 2019.01.02 NOIP训练 三七二十一(生成函数)

    传送门 生成函数基础题. 题意简述:求由1,3,5,7,9这5个数字组成的n位数个数,要求其中3和7出现的次数都要是偶数. 考虑对于每个数字构造生成函数. 对于1,5,9:∑nxnn!=ex\sum_ ...

  5. 2018.11.30 spoj220 Relevant Phrases of Annihilation(后缀数组+二分答案)

    传送门 代码: 先用特殊字符把所有字符串连接在一起. 然后二分答案将sasasa数组分组. 讨论是否存在一个组满足组内对于每一个字符串都存在两段不相交字串满足条件. #include<bits/ ...

  6. MySQL查询练习(45道)

    题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...

  7. noip第6课作业

    1.    数据统计 [问题描述] 输入N个整数,求出它们的最小值.最大值和平均值(保留3位小数).输入保证这些数都是不超过1000的整数.(1<=N<=1000) [样例输入] 8 2 ...

  8. 4.easyloader.js文件的作用

    1).easyloader.js文件用于加载指定模块,同时它也会加载指定模块所依赖的组件 2).不使用easyloader加载: 在easyui中有一个Parser解析器,它会解析class中的eas ...

  9. spfa负环判断

    正常spfa中加入time数组,循环判断一个点是否入队并更新了n次以上注意是 > n!!其余的没有什么问题 扩展的还有,寻找所有负环上的点,这个可以在spfa中time 发现负环的时候,对那个点 ...

  10. HTML 基础 块级元素与行内元素

    块元素:单独占一行,宽度占整行,可以包含内联元素和其他块元素,通过样式display:inline,变为行内元素,不换行 内联元素:不单独占一行,宽度根据内容来决定,只能容纳文本或者其他内联元素 ,可 ...