HTML 和 CSS 可能是二维网页设计的基石,但在它们的虚拟工具箱中却隐藏着创建令人惊叹的三维视角的秘密。试想一下,在制作交互界面时,如何超越平面,进入一个 X、Y 和 Z 轴共舞的世界。在本篇博文中,我们将为您揭开 HTML 和 CSS 3D 功能的神奇面纱,指导您使用基本属性和技术来创建令人惊叹的 3D 视觉效果。
比如这个:
在 HTML 中利用透视技术
虽然 HTML 和 CSS 主要用于构建 2D 布局,但仍有 3 个轴(X、Y 和 Z)可以通过特定的 CSS 属性创建透视图。
perspective
属性
perspective(透视)属性通过沿 Z 轴调整消失点的位置来改变用户的视角。
例如,使用以下代码片段将在用户和平面(Z 轴)之间建立 800px 的距离。
.perspective { position: relative; perspective: 800px; }
<div></div>
perspective-origin
属性
perspective-origin(透视原点)属性决定了用户沿 X 轴和 Y 轴的位置。
要从上方查看对象,可以使用以下代码:
.perspective { position: relative; perspective: 800px; perspective-origin: 50% -200px; }
在本例中,我们将 X 轴居中(50%),Y 轴的位置为 -200px。
现在,您已经掌握了 HTML 和 CSS 中的 3D 要素,让我们开始创建自己的 3D 立方体吧!
1. 打好基础
在 HTML 结构中,我们将构建一个透视平面,并为立方体的每个面添加一个 div 元素。
<div> <div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> </div>
现在,让我们为透视平面赋予一个特定的视角。在我们的案例中,我们希望看到立方体的俯视图。
.perspective { perspective: 800px; perspective-origin: 50% -200px; }
然后,我们将为方框指定尺寸,并为各个面应用样式。为了在 div 中的透视平面内保持 3D 渲染,我们使用了 transform-style: preserve-3d
。
.box { width: var(--size); aspect-ratio: 1; position: relative; transform-style: preserve-3d; } .face { position: absolute; width: var(--size); aspect-ratio: 1; background-color: hsl( 39, 100%, 66% ); transform-style: preserve-3d; }
这时,你会看到所有的面都叠加在同一位置,形成一个正方形。
2. 制作图案
现在,让我们制作立方体的二维图案,然后像折纸一样将其折叠。此外,我们还将加入旋转动画,以获得更好的 3D 可视化效果。
创建图案可以简化旋转和精确定位元素的过程,防止倒置面的混淆。
.box { animation: rotate 4s linear infinite; } .face.front { } .face.bottom { top: 100%; } .face.top { bottom: 100%; } .face.back { bottom: 200%; } .face.right { left: 100%; } .face.left { right: 100%; } @keyframes rotate { from { transform: rotate(0); } to { transform: rotateY(360deg); } }
现在,你应该看到一个十字形的配置:
3. 折叠表面制作立方体
下一步是折叠面以创建立方体效果。这需要使用 rotateX()
、 rotateY()
并通过 transform-origin
指定折叠的顶点。
对于背面,我们需要调整 Y 轴和 Z 轴的 transform-origin
,因为它与正面相距两个面。
.face.front { } .face.bottom { top: 100%; transform-origin: top; transform: rotateX(-90deg); } .face.top { bottom: 100%; transform-origin: bottom; transform: rotateX(90deg); } .face.back { bottom: 200%; transform-origin: center 150px -50px; transform: rotateX(180deg); } .face.right { left: 100%; transform-origin: left; transform: rotateY(90deg); } .face.left { right: 100%; transform-origin: right; transform: rotateY(-90deg); }
4.为面部添加阴影
为了获得较为逼真的 3D 效果,我们需要为面部添加阴影。虽然 CSS 缺乏原生光照,但我们可以通过改变颜色的明暗度来营造出深度的错觉。
我们将利用 hsl()
的 lightness
属性为每个面孔创建不同的阴影。
.face { background-color: hsl( 39, 100%, var(--lightness) ); } .face.front { --lightness: 66%; } .face.bottom { --lightness: 74%; } .face.top { --lightness: 74%; } .face.back { --lightness: 78%; } .face.right { --lightness: 70%; } .face.left { --lightness: 70%; }
现在,你将看到一个绚丽的 3D 立方体,它完全由 HTML 和 CSS 制作而成!
希望本教程能点燃你的想象力,用纯 HTML 和 CSS 制作出迷人的 3D 动画。
评论留言
唇枪舌剑 (1)
TICEx
2024.7.5 22:07
我以为要用Three.js什么的,结果是原生的,正是我想要的