-
transform-style
设置元素的子元素是位于 3D 空间中还是平面中。所以transform-style
是应该加在父盒子上面的。
可以把拥有这个属性的盒子想象成一个舞台, 里面的子元素都是演员,他们可以随意表演,我们可以通过舞台观看 -
perspective
指定了观察者与 z=0 平面的距离,可以想象是我们和舞台的距离, 如果我们离舞台更近是不是看到的东西越少,东西越大呢,如果我们离舞台越远看到的越多,演员也随之越小 -
只要开启了
transform-style: preserve-3d
, 舞台也就是 3d 的,perspective
加不加无所谓的,它只是规定了我们和舞台的距离 -
demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.container {
width: 200px;
margin: 0 auto;
transform: rotateX(10deg);
transform-style: preserve-3d;
}
.div {
text-align: center;
transform-style: preserve-3d;
animation: test 5s linear infinite;
transform-origin: 50% 50%;
}
.div-inner {
width: 200px;
height: 200px;
border-radius: 50%;
transform: rotateX(90deg);
background: red;
}
@keyframes test {
0% {
transform: rotateY(0deg);
}
100% {
transform: rotateY(360deg);
}
}
.text {
transform: translateX(80px) translateY(20px) translateZ(-360px);
z-index: 999;
}
</style>
</head>
<body>
<div style="position: relative">
<div class="container">
<div class="text" style="">sdfdsf</div>
<div class="div">
<div class="div-inner">SDFSDF</div>
</div>
</div>
</div>
</body>
</html>