css中的3D

250 阅读3分钟

3D空间

perspective(透视)属性为子元素创建了一个3D空间,它的值定义了子元素z变换效果的强度。大的perspective 值创建小的z变换效果,小的值创建大z变换效果。

父级样式定义

.parent {
    perspective: 350px;
}

消失点

perspectiveOrigin(透视-起始)定义了消失点,它的默认值是50% 50%。水平居中和垂直居中
父级样式定义

.parent {
    perspective: 350px;
    /* 短横线命名的属性 */
    perpective-origin:50% 50%
}

3D转换

  • translateX(...):水平的移动子元素
  • translateY(...):垂直的移动子元素
  • translateZ(...):更近或更远的移动子元素。该效果的强度由perspective(透视)属性的值决定
.parent {
    perspective: 350px;
    /* 短横线命名的属性 */
    perpective-origin:50% 50%
}

.child {
    transform: translate3d(0px, 0px, -500px)
}

3D旋转

rotate3d在x、y或z轴旋转一个元素,前面的三个参数定义了x、y和z向量。最后一个参数定义旋转角度
补充:可以理解为先确定x、y、z矢量相加后形成的轴,后在这个轴的垂直平面做旋转,千万不要理解为在每个轴上都做了一次角度旋转,角度只进行了一次

.parent {
    perspective: 350px;
    /* 短横线命名的属性 */
    perpective-origin:50% 50%
}

.child {
    transform: translate3d(0px, 0px, -500px);
    transform: rotate3d(1, 0, 0, 69deg)
}

用例:屏幕适配

当一个网页从桌面到手机设备需要一些转变,屏幕空间变得更小。当这种情况发生时,通常是将低优先级的元素从屏幕中移除(用户端)。在y轴旋转元素可以腾出更多的屏幕空间去使用。这种方案将允许包含更多的ui当遭遇网页适配到手机端时。
具体用例看官方例子

但这么做是有代价的。旋转程度越高,可读性越差。然而,我们不总是需要100%的可读性。图形设计师 David Carson曾经 设计了一个旅馆的楼层数字标识。这些标识是客户走出电梯看到的第一样东西。该设计师创建了一些由数字和单词以特殊排列方式组合的图片,他的设计不是可读的,却是易于理解的。

常见考题Screen Realestate指什么?简单说就是显示屏用于应用展示的可用空间
Screen Realestate:the amount of space available on a display for an application to provide output

用例:不同角度的透视

-想想正视图,俯视图,侧视图,这里只是换了个折中的观察角度
有些时候不同角度展示一个事物便于对它的交流。下面是我在演示中使用的网页的线框。我需要去交流说明这个线框右上角有三个元素,每一个都堆叠在另一个的上面,通过转换或旋转这个线框在一个3d空间中,我可以从第二个角度来展示。

用例及代码见官方

/* 宽高比 */
aspect-ratio: 3/1;

transform-style: preserve-3d被配置在#child元素上。这使得转换元素的子元素存在于它们自己的3d空间中。没有它,.grandchild元素将被平铺到#child元素的平面上。 如果你删除了这一行,你会看到. grandchild元素不会被转化(就是平铺)。

引用:garden.bradwoods.io/notes/css/3…