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>