重新认识布局: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中的宽高。

 

posted @ 2021-06-25 14:09  小虫1  阅读(140)  评论(0编辑  收藏  举报