关于css3的icon翻转

效果比较简单,这里总结一下.

1.基本结构

实现方法可能有很多种,我这里用的是transform: rotateY()方法.

首先结构如下:

<div class="fix-opt">
	
	<a class="front-face" href="">
	
	<img src="" alt="" >
	
	<p>顶部</p>
	
	</a>
	
</div>


反转的实现是准备两层面,一层是hover前的图片,另一层是翻转后的展现,这里是普通的文本.

由于是反转的两层,因此两层都需要设置position:absolute;让它脱离文档流.

2.旋转角度不是180度,而是90度

两层图片不是普通的叠加,也不是普通的反转,而是呈90度的镶嵌.如图:


代码如下(省略无关代码):

	a.front-face img{position: absolute;z-index: 1;transform: rotateY(0deg);}
	a.front-face p{position: absolute;z-index: 1;transform: rotateY(-90deg);}
	a.front-face:hover img{transform: rotateY(90deg);}
	a.front-face:hover p{transform: rotateY(0deg);}


3.自然过度,transition

然而,你会发现转换得十分生硬,可以说是根本没有旋转的体验.因此需要一个过渡.

过渡,自然想到css3的transition.

a.front-face img{transition: all .2s linear;}
a.front-face p{transition:all .2s linear;}


4.两层旋转间的延迟,opacity

太好了,到这一步已经能基本旋转.然而,旋转得十分不自然,为什么呢?

我们思考一下,两层围绕中心点各自在旋转90度,第一层在开始转的时候,第二层也在开始转.因此旋转得轨迹就不是一个圆,而是两边都在翻页.

正常的旋转是怎样的?思考一下,正常的旋转是应该第一层旋转90度,然后第二层才开始接着旋转90度,形成一个圆的轨迹.

于是乎,刚开始我想到延迟,这里的旋转时间是0.2s,因此文字层(第二层)就延迟0.2s不就行了?

a.front-face p{transition-delay:0.2s;}


但是,并没有那么简单.

第二层延迟是让鼠标mouseover旋转自然了,但是当鼠标离开,mouseout的时候动画会反转演绎.

这时候文字层(第二层)在正面,它会延迟0.2s开始,但是这时候图片层(第一层)已经开始转了,这样简直就不是旋转了.

要做到旋转和反旋转都自然是圆的轨迹,怎么办呢?

两种方法:

1.用js,当旋转结束后,把图片层和文字层的样式transition-delay的值交换,一个延迟0秒,另一个延迟0.2秒,然后切换两个延迟值.

//tq:但是这样就不是纯CSS3实现了,而且十分难处理.

2.思考了各种方法,最后想复杂了,其实可以用opacity(透明度)来解决,图片层是从1到0,文字层是从0到1,在transition的帮助下,两个值切换简单,自然.而且反旋转也会自动调转过来,也就是图片曾0到1,文字层1到0.


        a.front-face img{opacity:1.0}
	
	a.front-face p{opacity:0}
	
	a.front-face:hover img{opacity:0}
	
	a.front-face:hover p{opacity:1.0}

5.硬件GPU加速

硬件加速十分关键,其实这里我看大神的讲解没太搞明白,不过加一句:transform: translateZ(0);可以解决.



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值