本文首发于知乎: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 { 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中的宽高。