CSS3起步 09-------3D基础之景深,transform-style及backface-visibility

问题一,什么事3D视角?
01,首先我们得知道3D坐标轴,如图:
在这里插入图片描述
X轴从左到右,Y轴从上到下,Z轴从里到外。视角处于Z轴正方向圆锥尖点前方,正值方向为顺时针。
注意点:原始的X,Y,Z轴的中心点为元素的中心点【也叫做元素的基点(可以利用transform-origin自行更改)】

02,我们得知道Z轴的具体距离,我们怎末观察。其实想想为什么每次设计3D场景都需要一个属性perspective【景深】,这就是为Z轴原始定位,提供了一个空间距离的参照,或正或负

问题二,那景深具体是什莫呢,怎末作用,视觉效果又是神魔?
景深:让3D场景有近大远小的感觉(我们肉眼距离屏幕的距离)
注意点
01,元素在Z轴上的移动就是改变我们肉眼距离屏幕的距离,从而产生一种视觉效果,其元素离我们远了或近了。
02,perspective【景深】虽然是一个不可继承的属性,但是可以作用与后代元素【不是子代元素】。
03,transform:perspective只可以作用于本身元素,且必须放在transform变化样式首位

问题三,有了景深后,怎末进行3D旋转,平移,缩放呢?
旋转
01,单值旋转如rotateX(xdeg):以X轴为旋转轴,角度为x度,顺时针方向为正,逆时针反之。
02,组合旋转:rotate3d(x, y, z, angle);沿着元素中心到点(x, y, z)所构成的射线进行角度为angle数值度旋转。
平移
01,单值平移如translateX(100%):以X轴为平移轴,平移距离为元素本身的width,右方向为正,逆时针反之。
02,组合平移:translate3d(100px, 100px, 100px);以元素中心到点(100, 100, 100)所构成的射线进行平移到点(100, 100, 100)的位置。
注意点:X,Y轴距离可以设置百分比,参照物为其元素本身的widthheight然而Z轴是没有百分比一说的,因为其元素本身没有厚度一说。
缩放
没有太大意义,和2D缩放效果近乎一样,因为元素本身就没有厚度,所以在Z轴上也缩放不了

问题四,什么是灭点?
定义:灭点指的是立体图形各条边的延伸线所产生的相交点
反正我也看不懂,直接上图,这个只可意会,不可言传。
在这里插入图片描述
注意点:景深越大,灭点越远,元素变形更小;景深越小,灭点越近,元素变形更大。

问题五,有了Z轴上的视觉距离效果,那怎末定义Z轴上的视觉层级效果呢?
transform-style 营造一种视觉层级舞台效果。
注意点
01, transform-style是一个不可继承的属性,但是可以作用于子代【注意不是后代】子元素
02,舞台上的各个元素,除了遵守DOM层次级别外,实际上在Z轴的原始位置都是相同的【没有厚度】,且是紧贴舞台的【简单来说,如果舞台存在一个背景色幕布,则舞台中元素,稍微在X,Y轴上旋转角度,则就会有一部分会旋转到到幕布后面,从而被幕布遮挡。】

补充backface-visibility一页分两面,背面和正面【背面隐藏】

demo:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>立方体第一版</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}
			html,body {
				height: 100%;
				overflow: hidden;
			}
			#wrap {
				position: absolute;
				left: 50%;
				top: 50%;
				width: 400px;
				height: 400px;
				font: 50px/200px "宋体";
				box-sizing: border-box;
				border: 1px solid black;
				perspective: 200px;
				background: url(img/mm.jpg) no-repeat;
				background-size: 100% 100%;
				/* transform-style: preserve-3d; */
				transform: translate(-50%, -50%);
			}
			#box {
				position: absolute;
				left: 150px;
				top: 150px;
				width: 100px;
				height: 100px;
				text-align: center;
				font: 25px/100px "宋体";
				transition: all 2s;
				transform-style: preserve-3d;
				transform-origin: center center -50px;
				background-color: rgba(123, 123, 223, .2);
			}
		    #box div {
				position: absolute;
				width: 100px;
				height: 100px;
				text-align: center;
				font: 25px/100px "宋体";
				/* 一页分两面,背面和正面 */
				backface-visibility: hidden;
				background-color: rgba(123, 123, 223, .4);
			}
			#box div:nth-child(5) {
				top: -100px;
				transform-origin: bottom;
				transform: rotateX(90deg);
			}
			#box div:nth-child(6) {
				bottom: -100px;
				transform-origin: top;
				transform: rotateX(-90deg);
			}
			#box div:nth-child(3) {
				left: -100px;
				transform-origin: right;
				transform: rotateY(-90deg);
			}
			#box div:nth-child(4) {
				right: -100px;
				transform-origin: left;
				transform: rotateY(90deg);
			}
			#box div:nth-child(2) {
				transform: translateZ(-100px) rotateX(180deg);
			}
			#wrap:hover #box {
				transform: rotateX(360deg);
			}
		</style>
	</head>
	<body>
		<div id="wrap">
			<div id="box">
				<div>前</div>
				<div>后</div>
				<div>左</div>
				<div>右</div>
				<div>上</div>
				<div>下</div>
			</div>
		</div>
	</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值