CSS perspective
属性:父元素与子元素应用差异详解
perspective
属性是创建逼真三维效果的关键。本文深入探讨将 perspective
属性分别应用于父元素和子元素时,产生的不同视觉效果,并通过代码示例进行说明。
场景:构建一个可旋转的三维立方体。立方体容器 scene
包含立方体 cube
,cube
又包含六个代表立方体面的子元素 cube__face
。
问题:当 perspective
应用于 scene
元素时,立方体旋转正常;但应用于 cube
元素时,旋转会造成变形。
原因:perspective
属性的生效范围决定了透视效果。
perspective
应用于父元素(scene
): 定义了从父元素到子元素 cube
的视点距离,即观察者位置。所有 cube__face
元素的三维变换都基于此视点计算,产生正确的透视效果。cube
元素的旋转不会影响这个透视中心点。
perspective
应用于子元素(cube
): 视点距离变为从 cube
元素到其子元素 cube__face
的距离。cube
元素的旋转会改变每个 cube__face
元素相对于新视点的距离和位置,导致变形。这是因为每个面的位置计算都以旋转中的 cube
元素为新参考点。
为了更清晰地观察,建议为 cube__face
元素添加边框 (border
),直观地查看其位置变化和形变。对比两种情况下 (perspective
应用于父元素和子元素) 的效果差异,可以理解位置变化如何影响最终视觉效果。
结论:为了创建具有正确透视效果的三维旋转立方体,避免旋转变形,应将 perspective
属性应用于包含三维元素的父元素,而非三维元素本身。