您现在的位置是:网站首页> 编程资料编程资料
使用CSS3制作版头动画效果CSS实现漂亮的时钟动画效果的实例代码css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果CSS 奇思妙想边框动画效果的实现CSS 动态高度过渡动画效果的实现CSS3分享图标按钮动画特效代码CSS3通过var()和calc()函数实现动画特效
2021-09-03
4232人已围观
简介 这篇文章主要介绍了使用CSS3制作版头动画效果,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

网易看游戏官网(http://kanyouxi.163.com/)(已下架),是我以前(2014年)做的一个项目,也是我们首个放弃Flash,采用HTML5与制作动画的网站,当时业内为数不多的采用CSS3用于主动画实际生产的网站,当然现在已经很广泛使用了,特别是在移动端,CSS3是性能的保障。现在总结分享一下,能让自己有温故知新之余,也希望对初学者进阶有帮助。
怎样的动画?
这个动画并不算复杂,但包含了transform,rotate,translate,keyframes,缓动,和循环次数这几个重要的内容。好了,先看看动画效果,下面是录屏动画,也可以到网易看游戏官网(http://kanyouxi.163.com/)(已下架)上去看看。

有几个关键点,按顺序分别为:
- 白色iPhone向上翻动,然后做几个小幅度抖动;
- 字幕从右边出现,把白色iPhone向左推动;
- 白色iPhone快到心头后,黑色iPhone也跟随出现;
- 大标题“网易看游戏”背景波浪式闪烁滚动。
下面让我们我们一个个来。
注:这是一个CSS3进阶实践文章,如果你对CSS3动画还不是很了解,请先看这里: CSS3动画 ,1分钟快速了解一下再回来。
1. 向上翻动并抖动
这里有几个关键属性,详细使用方法可以进去看: @keyframes , transform:rotate(deg); , transform-origin:x,y;
准备动画关键帧@keyframes
@keyframes iphone-front{ 0% { transform:rotate(-30deg); transform-origin:125px 650px; } 100% { transform:rotate(0deg); transform-origin:125px 600px; } }我们直接用百份比来作为帧点,因为后面还会把它再细分多个帧。
设置旋转与Anchor Point(锚点transform-origin:x,y; )
transform:rotate(-30deg); transform-origin:125px 650px;
旋转是必须的,但为何要修改Anchor Point呢?
Anchor Point,是借用了cocos2D里的说法,是指变换的原点。
因为transform的默认锚点是中心,即(50%,50%),在transform里Anchor Point属性就是 transform-origin ,以下是默认值:
transform-origin:50%,50%
在支持3D的变换里,还有第3个数值:z,默认是0
如果不修改,就会以iPhone的中心为原点旋转,这不是我们想要的效果,所以把它移到下方的水平中央去。
这个图片的宽度是250px,高度为525px,下方中央就是(125px,525px),但为了模拟实物在桌子上摇摆,还要往下移一些,经过尝试,我们最终选择了(125px,650px),如下图示:

添加抖动与拟物
抖动其实也是几个关键帧组合的产物,首次旋转不是0度,而是过了一点点的10度,接着往返各两个关键帧,幅度逐渐减小。添加关键帧后的@keyframes改动如下:
@keyframes iphone-front{ 0% { transform:rotate(-30deg); transform-origin:125px 650px; } 50% { transform:rotate(10deg); transform-origin:125px 600px; } 75% { transform:rotate(-5deg); } 100% { transform:rotate(0deg); } }注意,上面33%位置的帧处,添加了一条 transform-origin:125px 600px; ,因为如果一成不变的锚点,会给人感觉像是一个钟摆,太死板不够拟物化,想像一下:一个东西以某个抛物线落到地上,经过与地面碰撞,改变运动方向,最终慢慢停下来,所以我们把中心点的高度也减小一点,让人看上去“ 不那么规律 ”。
在关键帧的时间点上,也模拟了慢出的缓动效果。所谓的动画感觉做得好不好,也就是缓动效果做得如何,够不够接近物理世界给人的认知。
这个帧点也并非最后的时间点,请继续往下看。
2. 字幕出现并推走iPhone
字幕出现
字幕在另外一个元素,所以我们新建一个关键帧组:
@keyframes content{ 0% { transform: translate3d(550px,0,0);} 100% { transform: translate3d(0,0,0);} }因为是iPhone动画先走,然后才是字幕,所以动画延时执行 animation-delay :
animation-delay:.2s;
但为了两个关键帧组能更好的同步,不用算来算去,我们也以这样做:
@keyframes content{ 0% { opacity: 0;} 40% { transform: translate3d(550px,0,0); opacity: 0;} 100% { transform: translate3d(0,0,0); opacity: 1; } }先用透明度隐藏它,在40%才开始,在移动的过程再逐渐显示,让过程更平滑。
前面还说到,中间还要用字幕推iPhone一下,怎么做?
模拟碰撞
纯CSS3是做不了的,除非全程用JS进行,或者用Box2D进行碰撞判断。但我们这里只是一个简单的走过场动画,不需要人机交互,也不会变化移动的距离,所以,我们用一个变戏法,两个动画一起并行,在关键节点埋关键帧,即:字幕移动到iPhone位置时,iPhone才开始移动。
两个关键帧组结合起来就是:
@keyframes iphone-front{ 0% {transform:rotate(-30deg); transform-origin:125px 650px; opacity: 0;} 20% {transform:rotate(10deg); transform-origin:125px 600px; opacity: 1;} 30% {transform:rotate(-5deg);} 38% {transform:rotate(0deg);} 60% {transform: translate3d(0,0,0); opacity: 1;} 90% {transform: translate3d(-340px,0,0); } 100% {transform: translate3d(-340px,0,0);} } @keyframes content{ 0% { opacity: 0;} 40% { transform: translate3d(550px,0,0); opacity: 0;} 60% { transform: translate3d(225px,0,0); opacity: 1; } 80% { transform: translate3d(0,0,0); opacity: 1; } 100% { transform: translate3d(0,0,0); opacity: 1; } } /*以下选择器略去了非动画属性设置,例如宽高等,我们就当他们默认就是正确的值吧*/ .iphone-front{ animation: iphone-front 1.8s ease-out forwards; } .content{ animation: content 1.8s ease-out; }可以看出,这里没有使用delay属性,是为了更直观的设置并行动画,大家都在60%的位置碰头,都使用了ease-out缓出。
为什么iphone-front的100%帧处要重复90%的内容?因为我们用了 animation-fill-mode 属性,值为forwards,即停在最后一帧,如果100%没有写,就会退回到最初状态了。
3. 黑色iPhone跟随出现
黑色iPhone的动画更简单,只是一个渐现加移动,同样也是另外一个并行动画,不过这次可以用delay了,先预估一下大概出现的时间,可以得到从0.5s开始:
@keyframes iphone-back{ 0% { transform: translate3d(97px,0,0); opacity: 0;} 40%{ opacity: 0; } 50%{ transform: translate3d(0,0,0); opacity: 1;} 100% {opacity: 1; } } .iphone-back-ani{ animation: iphone-back 1.8s ease-out .5s forwards; }这里不需要最后一帧重复写代码了,因为它本来就是(0,0,0),不会产生任何变化。
为何用translate3d(x,y,z);而不用translateX(x)?因为早前有人认为这个效率会更高,特别在移动端性能更优。
查看手册:transform
4. 大标题背景波浪
这个不涉及transfrom,让前景与背景重叠在一起,背景图片在y轴不间断移动,无限循环,无缓动;关键的是这个背景图必须上下能无缝连接:


@keyframes title{ 0% { background-position: 0 0;} 100% { background-position: 0 -76px;} } .title-bg{ width: 301px; height: 61px; position:absolute; top:0; left:0; z-index:1; background: url(title_text_bg.png) repeat-y; animation: title 1.2s linear; animation-iteration-count:infinite; } .title-front{ width: 301px; height: 61px; position:absolute; top:0; left:0; z-index:2; background: url(title_text_front.png) no-repeat; }这是最简单的做法,适合大多数情况。也有另外一些更高级的,例如使用mask,关于mask,有兴趣请看 《CSS Masking》 。
其它效果

结语
手写动画,虽然比较费时,但能让你了解现实原理。如果需要可视化制作,推荐一个在线工具给大家: cssanimate ,相比其它生成器,优点是可以设置多个关键帧,而且可以通过鼠标拖动直接操作,推荐!
到此这篇关于使用CSS3制作版头动画效果的文章就介绍到这了,更多相关css3版头动画内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- CSS3实现红包抖动效果css3 transform过渡抖动问题解决css3动画效果抖动解决方法CSS 控制Html页面高度导致抖动问题的原因CSS3新浪微博模板商店鼠标悬停图片抖动特效css3让div随鼠标移动而抖动起来CSS 控制因Html页面高度导致抖动的问题解决方法
- css 利用 position + margin 实现固定盒子横向纵向居中的方法CSS 同级元素position:fixed和margin-top共同使用的问题使用CSS实现盒子水平垂直居中的方法(8种)CSS盒子居中的常用的几种方法(小结)
- html5+css3之制作header实例与更新html5+css3之CSS中的布局与Header的实现css为什么要放在head标签中
- CSS3中animation实现流光按钮效果CSS3动画之利用requestAnimationFrame触发重新播放功能
- html5+CSS3的编码规范html5+CSS3的编码规范前端编码规范(4)—— CSS 和 Sass (SCSS) 开发规范Web前端开发规范2017(HTML/JavaScript/CSS)web前端开发规范文档(2014年版本)响应式Web之流式网格系统 在网页标题栏上和收藏夹显示网站logo的实现方法Visual Foxpro 6.0 中文版安装向导(图解)网站日志200 0 64状态码的分析(协议子状态)W3C是什么意思 W3C标准简介有关网站网页设计中的那些事儿分享
- CSS 鼠标悬浮在图片上添加遮罩层效果的实现使用CSS content的attr实现鼠标悬浮提示(tooltip)效果CSS实现鼠标悬浮无限向下级展示的实例代码CSS鼠标悬浮DIV后显示DIV外的按钮解决方法CSS3制作了一个动画导航效果(鼠标悬浮会放大)css实现缕空遮罩层的示例代码css3遮罩层镂空效果的多种实现方法CSS实现带遮罩层可关闭的弹窗效果CSS实现鼠标移至图片上显示遮罩层效果
- 浅谈原生页面兼容IE9问题的解决方案一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10CSS背景色渐变写法兼容ie6至ie9借助HTML分别禁用IE8, IE9的兼容视图模式的小技巧css div实现的遮罩层完美兼容IE6-IE9 FireFox
- css3中flex布局宽度不生效的解决css3弹性盒子flex实现三栏布局的实现使用flex布局轻松实现页面布局的示例代码flex是什么及flex布局语法教程详解使用Flex布局实现头部固定内容区域滚动的方法详解flex布局下图片变形的解决方法Flex布局让子项保持自身高度的实现css3 flex布局实现平均分配元素的示例代码flex布局实现上下固定中间滑动的布局方式CSS3新增布局之: flex详解flex布局实现每行固定数量+自适应布局
- html+css3实现的登录界面基于jQuery+CSS3绘制的卡通可爱熊猫遮眼登录页面实例特效源码超酷的登录注册表单3D翻转切换css3特效CSS3实现纸片折叠登录表单模板特效源码CSS3 input框的实现代码类似Google登录的动画效果基于css3实现扁平简洁清爽的登录注册页面代码基于HTML5+CSS3实现的会员登录/注册表单切换特效源码纯CSS3折叠纸登录表单特效源码CSS3实现用户登录表单代码html5+css3实现响应式通用黑色的用户登录手机页面代码css3实现金融交易窗口登录页面代码
- CSS3简易切割轮播图的实现代码jQuery css3实现响应式图文卡片滚动轮播特效CSS3制作轮播图的一种方法利用 CSS3 实现的无缝轮播功能代码CSS3实现列表无限滚动/轮播效果
