css3 3D旋转特效

最近自己的网站正在制作,由于是个人网站,所以我傲娇的抛弃了IE,痛快的用起了css3和html5的诸多特效,然而问题亦随之而来。这篇文章的主要讲解在使用css3的3D旋转的时候遇到的文章,错误之处,还望各位看官老爷评论中指出。

3D旋转,难点在与其处在一个三维的空间中,我们需要发挥一下空间想象力在头脑中构建它的结构,同时,它的坐标系是随着所做的3D变化而改变的,所以在进行变换的过程中,不同变换动作的顺序亦是至关重要。

网页中常见的3D旋转特效有两种:绕Y轴旋转和绕X轴旋转。

绕Y轴旋转180度:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>绕Y轴旋转</title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			#box{
				margin: 50px auto;
			}
			#box,.container,.front,.back{
				width: 200px;
				height: 200px;	
			}
			.container{
				position: relative;
				transform-style: preserve-3d;
				transition: all 1s linear;
			}
			.container:hover{
				transform: rotateY(180deg);
			}
			.front,.back{
				position: absolute;
				top: 0;
				left: 0;
				backface-visibility: hidden;
				color: #fff;
				font-size: 40px;
				text-align: center;
				line-height: 200px;
			}
			.front{
				background: red;
			}
			.back{
				background: green;
				transform: rotateY(180deg);
			}
			
			
		</style>
	</head>
	<body>
		<div id="box">
			<div class="container">
				<div class="front">front</div>
				<div class="back">back</div>
			</div>
		</div>
	</body>
</html>

代码没有注释,因为都是一些属性,不懂的属性可以直接百度,这里主要讲解其核心思想。

绕Y轴旋转,就是将正面的转到后面,而后面的显示在正面。如果直接旋转,不设置背面的元素的话,那么旋转180度后你所看到的就像一张画贴在玻璃上,你从背面看而已。这种比较简单,但是在网页中并不常用,最多的还是上面代码中所写的这种效果。

1、我们要有两个面。设置backface-visibility为hidden,隐藏两个面的背面,将需要显示在背面的那个面back绕Y轴旋转180度。

2、将两个面装在一个盒子a里面并且设置盒子transform-style: preserve-3d,我们要操作的是这个盒子。

3、给盒子a设置鼠标移入旋转180度,完成! 


绕X轴旋转和绕Y轴旋转的本质是相同的,所以绕X轴旋转直接讲解旋转90度,这个原理也可以反过来套用在Y轴的旋转上。

相比来说,旋转90度要做的处理多了几步。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>绕X轴旋转</title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			#box{
				margin: 50px auto;
				border: 1px solid blue;
			}
			#box,.container,.front,.back{
				width: 200px;
				height: 200px;	
			}
			.container{
				position: relative;
				transform-style: preserve-3d;
				transition: all 1s linear;
			}
			.container:hover{
				transform: rotateX(90.1deg);
			}
			.front,.back{
				position: absolute;
				top: 0;
				left: 0;
				backface-visibility: hidden;
				color: #fff;
				font-size: 40px;
				text-align: center;
				line-height: 200px;
			}
			.front{
				transform: translateZ(100px);
				background: red;
			}
			.back{
				background: green;
				transform: rotateX(-90deg) translateZ(100px);
			}
			
			
		</style>
	</head>
	<body>
		<div id="box">
			<div class="container">
				<div class="front"></div>
				<div class="back"></div>
			</div>
		</div>
	</body>
</html>

看代码不难发现,其实旋转多少度的本质都是一样的,但是旋转90度相对来说在开始旋转的处理要进行在Y轴方向的移动。因为如果不进行Y轴方向的移动,旋转90度后两个面成T字形,而我们需要他们成L字形

同时,再次强调,某个面旋转的同时它的坐标系也会发生变化,所以一定要注意动作的先后顺序。这个可以自己画一个三维坐标系来帮助理解。

最后一点,在进行大盒子的旋转时,大家可能会看到我的代码中:

.container:hover{
				transform: rotateX(90.1deg);
			}

写90deg在firefox是正常的,但是在chrome中你的鼠标放在盒子上会出现闪动的情况,但是你写大于90就可以解决,具体原因暂时不详。


在测试的过程中我使用了最新的chrome浏览器,所以省略了其中的兼容性语句,在实际的使用过程中,一定要加上兼容性语句。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值