HTML-CSS(四十二)transfrom3D相关属性

65 篇文章 3 订阅
30 篇文章 1 订阅

3d属性

rotateX():正值向上

rotateY();正值向右

translateZ():政治向前,负值向后

注意:translateZ值不要超过景深(下文提到),否则效果不会很好。还有就是元素不是放大了,只不过物体离你更近

scaleZ():立体元素的厚度
更改之前:
在这里插入图片描述
更改之后:
在这里插入图片描述

3d写法:

scale3d():三个值x y z

translate3d():三个值 x y z

rotate3d():四个值0|1(x轴是否添加旋转角度)0|1(y轴是否添加旋转角度)0|1(z轴是否添加旋转角度)deg

transform: rotate3d(1,1,1,30deg);都旋转30deg

注意事项

可能会好奇复合写法跟这个不就是一样的吗不是的。首先,

transform:scale(x,y)没有z。只填一个值时scaleX和scaleY放大倍数一样

transform:translate(x,y)z无效,只填一个值相当于transform:translateX()没有y

transform:rotate(numberdeg)只能填一个值 等价于transfrom:rotateZ()

3d扩展

perspective:里屏幕多远的距离去观察元素,值越大幅度越小,视觉感觉越差,越是接近2d效果。3d效果呈现主要是越是前面越清晰。
prspective:100px
在这里插入图片描述
prespective:500px
在这里插入图片描述
perspective-orgin:景深-基点位置,观察元素的角度

用在3d视角观察元素变化。
perspective-orgin:x(number(px)、单词) 、y(number(px)、单词)。
为什么没有z呢,因为景深就是z了
未更改观测点的样子
在这里插入图片描述
改变观测点之后的样子(presepctive:center top)
在这里插入图片描述
transform-orgin:x y z 变化的基点。

transform-style:3D控件

形成一个3d视角,正常情况下,如果我们观察一个立方旋转,在2d角度下观察就是一个平面。而将transform-style:preserve-3d之后,就会形成一个前后左右的空间,就是一个完整的立方体的样子
属性值:flat(默认值2d)preserve-3d(3d,产生一个三维空间)

backface-visibility:背面隐藏
属性值 :hidden、visible(默认值)

练习

练习1:立方体
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.box{
				width: 400px;
				height: 400px;
				border: 1px dashed black;
				margin: 0 auto;
				position: relative;
				/* 这个可以在做布局的时候添加下面的样式,这样就会在middle形成一个空间感,
				你就可以看到你对每个方块摆放位置的变化 */
				perspective: 400px;
				/* 改变观测点你就知道自己有没有将方块摆放正确啦 */
				/* perspective-origin: center top; */
			}
			.middle{
				/* 3d效果 形成一个前后左右一个立体空间,否则旋转的时候也只是一块板在转*/
				transform-style: preserve-3d;
				transform-origin: center center 0;
				width: 200px;
				height: 200px;
				border: 1px dotted black;
				position: relative;
				margin: 100px 100px;
				animation: 10s ease infinite move;
			}
			@keyframes  move{
				%0{
					transform: rotate(0deg);
					/* transform: rotateX(360deg); */
				}
				25%{
					transform: rotateX(360deg);
					/* transform: rotateX(360deg); */
				}
				55%{
					transform: rotateY(-360deg);
					/* transform: rotateX(360deg); */
				}
				100%{
					transform: rotate(0deg);
				}
				
			}
			.z{
				width: 200px;
				height: 200px;
				background-color: rgba(100,100,100,0.1);
				position: absolute;
				line-height: 200px;
				text-align: center;
				font-size: 30px;
				font-weight: bold;
				color: black;
				/* backface-visibility:hidden; */
			}
			.box3{
				transform: translateZ(-100px);
			}
			.box1{
				transform: translateZ(100px);
			}
			.box2{
				transform: translateX(-100px) rotateY(90deg);
			}
			.box4{
				transform: translateX(100px) rotateY(-90deg);
			}
			.box5{
				transform: translateY(100px) rotateX(-90deg);
			}
			.box6{
				transform: translateY(-100px) rotateX(90deg);
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="middle">
				<div class="box1 z">1</div>
				<div class="box2 z">2</div>
				<div class="box3 z">3</div>
				<div class="box4 z">4</div>
				<div class="box5 z">5</div>
				<div class="box6 z">6</div>
			</div>
			
		</div>
	</body>
</html>

练习2:图片旋转-旋转木马
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.box{
				width: 400px;
				height: 400px;
				border: 1px pink solid;
				position: relative;
				margin: 0 auto;
				perspective: 400px;
				perspective-origin: center center; 
			}
			.image{
				margin: 100px;
				width: 200px;
				transition: 3s ease all;
				position: relative;
				transform-style: preserve-3d;
			}
			.image div{
				transition: 1s ease all;
			}
			.box div{
				position: absolute;
				
			}
			
			.box:hover .image1{
				transform: rotateY(180deg);
			}
			.box:hover .image2{
				transform: rotateY(180deg)
			}
			.box img{
				width: 200px;
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="image">
				<div class="image1"><img src="../img/7a7caf3b3bf04ee992d17dde8ffd1c77.png" ></div>
				<div class="image2"><img src="../img/8e2add6daceb4be3ba60a250bf452262.jpg" ></div>
			</div>
			
		</div>
	</body>
</html>

练习三 练习3:图片翻转
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.box{
				width: 400px;
				height: 400px;
				border: 1px pink solid;
				position: relative;
				margin: 0 auto;
				perspective: 400px;
				perspective-origin: center center; 
			}
			.image{
				margin: 100px;
				width: 200px;
				transition: 3s ease all;
				position: relative;
				transform-style: preserve-3d;
			}
			.image div{
				transition: 1s ease all;
			}
			.box div{
				position: absolute;
				
			}
			
			.box:hover .image1{
				transform: rotateY(180deg);
			}
			.box:hover .image2{
				transform: rotateY(180deg)
			}
			.box img{
				width: 200px;
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="image">
				<div class="image1"><img src="../img/7a7caf3b3bf04ee992d17dde8ffd1c77.png" ></div>
				<div class="image2"><img src="../img/8e2add6daceb4be3ba60a250bf452262.jpg" ></div>
			</div>
			
		</div>
	</body>
</html>

练习4:翻书效果
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.box{
				width: 300px;
				height: 300px;
				border: 1px solid black;
				position: relative;
				margin: 0 auto;
				perspective: 00px;
				transform-style: preserve-3d;
				transform: rotateX(-60deg);
			}
			.top,.first,.second{
				
				box-sizing: border-box;
				width: 150px;
				height: 300px;
				position: absolute;
				text-align: center;
				line-height: 300px;
				border: 1px solid blue;
				margin-left: 150px;
				animation: 5s ease move ;
				transform-origin: left;
				animation-fill-mode: forwards;
			}
			.top{
				animation-delay: 0s;
				background-color: pink;
			}
			.first{
				animation-delay: 2s;
			}
			.second{
				animation-delay: 4s;
			}
			@keyframes move{
				from{
					transform: rotateY(0deg);
				}
				to{
					transform: rotateY(180deg);
				}
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="second">
				第二页
			</div>
			<div class="first">
				第一页
			</div>
			<div class="top">
			首页
			</div>
			
		</div>
	</body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值