重新认识布局:3d空间中的css盒子
本文首发于知乎:https://www.zhihu.com/people/xiao-chong-10-60
思考一个问题:css中和盒子和生活中盒子有什么区别?
答案:3d空间中,css盒子有宽高,没有厚度
盒子的宽度是通过width属性设置的,高度是通过height属性来设置的。没有厚度相关的属性。
为什么要提盒子没有厚度?如果只是在网页上布局,平面上有宽高就够了。但是涉及到3d转换,开启了3d空间后,情况就发生了变化:3d空间里有x,y,z(是一个左手坐标系)。x,y分别对应width和height,但是z轴没有对应的属性了。
可以换个角度思考:css中的盒子可以放在3d空间中,但是一个没有厚度的“薄”盒子。
没有厚度,在3d空间中盒子有背面吗?答案是有的。请看下面的案例:

<!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>
body {
perspective: 500px;
}
div {
width: 200px;
height: 200px;
background-color: pink;
margin: 0 auto;
border-radius: 50%;
transition: all 1s;
text-align: center;
line-height: 200px;
}
div:hover {
transform: rotateY(180deg)
}
</style>
</head>
<body>
<div>黑马</div>
</body>
</html>
所以,完整的表述是:3d空间中,盒子呈现无厚度,有正反面的一个抽象盒子。
2d转换(transform)有3个:位移,旋转,缩放。3d转换只有2个:位移,旋转,原因是盒子没有厚度,3d中的缩放还是缩放2d中的宽高。


浙公网安备 33010602011771号