在某些情况下,我认为translateZ
和scale
具有相同的效果,就像放大或缩小一样。
我认为它们之间有一些计算联系,如果我知道它们中的一个值,比如translateZ(-1000px)
和父perspective
值,我可以计算出scale
具有相同效果的值等于translateZ
?
你是对的。当一个物体向你移动时(即translateZ
),它看起来更大(即scale
)。
如此图所示,perspective
定义了查看者相对于容器的位置,并translateZ
定义了主题相对于容器的位置。
从 scale 到 translateZ(和返回)的公式:
-或者-
我将把数学证明留给数学高手,但我对勾股定理做了一些检查,一切都解决了。
假设您距离容器 100px:#container { perspective: 100px; }
translateZ(50px)
,对象已经向你移动了一半,并且将出现两倍大,使其成为 2 倍。translateZ(75px)
,对象又移动了一半,并且将再次加倍,使其成为 4 倍。translateZ(100px)
,主题将接近无限大。试试看。这是一个JSFiddle,可以直观地比较不同的示例。
如果对象直接向您移动,则此方法有效,但如果您执行诸如在 3D 空间中旋转对象之类的操作,则此方法会分崩离析。也有数学,但它变得复杂。查看维基百科上的3D 投影。