You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
transform-style的flat值会创建堆叠上下文,并建立 3D 渲染上下文。在进行 3D 渲染计算时,会忽略值是auto的元素,而值是preserve-3d的元素会把这个 3D 渲染上下文扩展到它们所属的 3D 上下文里(即使 transform 和 perspective 属性的值会导致 2D 平面化)。值preserve-3d会创建堆叠上下文,并为所有后代元素创建一个包含块。
今天和大家分享两个和 CSS 3D 相关的属性/值:
perspective
transform-style: preserve-3d;
为什么要分享它们两个呢?最近在 100dayscss 上做 CSS 题的时候,被下面这个效果给难住了。
当时鬼使神差地就是不知道如何把图 1.1 变成图 1.2。
后来偷偷作弊了下,才知道是漏了
transform-style: preserve-3d
。和 3D 密切相关的还有一个perspective
属性,故本文重点介绍下这两个。perspective
perspective
属性决定了z=0
平面和用户眼睛之间的距离,当绘制 3D 的时候会用到。先来看个例子:立方体,宽 100px 高 100px,其中心点在坐标系的原点
(0,0,0)
处。下表是不同
perspective
下的效果(在线预览):perspective:0px
perspective:50px
perspective:51px
perspective:100px
说明:
perspective:0px
时,纯平面,没有 3D 效果perspective:50px
时,刚好是立方体的中心位置perspective:51px
时,粉红色的“1号”面刚漏出1px,故相比之前的图,方位变化不大,但是颜色偏红perspective:100px
时,立方体整个都视线之内注意:
perspective-origin
属性来设置transform-style
transform-style
属性决定了元素的子元素是在 3D 空间中展开,还是在 2D 平面中展开。transform-style: flat
元素的子元素们是放置在元素本身的平面中的transform-style: preserve-3d
元素的子元素们是放置在 3D 空间中的注意:
flat
,则元素的子元素们将不会在它们自己的 3D 空间中存在transform-style
是不能被继承的,这就意味着如果元素的非叶子后代需要在 3D 中展开,则必须给子元素自己也设置下这个概念比较好理解。我们直接以开头的例子为例:
rotateX(-24deg)
transform-style:preserve-3d
说明:
目前伞整体是往里扣着的,现在,我们把它再转过来。即给伞的父容器设置:
最终的效果就实现了:
完整代码,可点击在线预览。
主要参考
https://drafts.csswg.org/css-transforms-2/#propdef-perspective
https://drafts.csswg.org/css-transforms-2/#transform-style-property
The text was updated successfully, but these errors were encountered: