0

0

CSS如何制作旋转3D立方体?transform-style应用

雪夜

雪夜

发布时间:2025-08-22 13:49:01

|

1040人浏览过

|

来源于php中文网

原创

css制作旋转3d立方体的核心在于正确使用transform-style: preserve-3d,它使子元素能在三维空间中保留3d变换效果,否则所有变换将被扁平化为2d;1. 必须在立方体容器上设置transform-style: preserve-3d,以启用子元素的3d空间定位;2. 外层舞台需设置perspective属性,模拟观察距离,产生近大远小的透视感;3. perspective-origin定义观察视角的原点位置,影响立方体的视觉角度;4. 每个面通过rotate和translatez在3d空间中精确定位;5. backface-visibility: hidden防止背面内容在旋转时可见;6. 调试时可借助浏览器开发者工具的3d可视化功能,结合调整opacity、border和颜色辅助定位。最终通过animation实现持续旋转,完整呈现一个立体动态的3d立方体。

CSS如何制作旋转3D立方体?transform-style应用

CSS制作旋转3D立方体,核心在于巧妙运用

transform-style: preserve-3d
属性,它让子元素在三维空间中保持其3D变换效果,而不是被扁平化到父元素的平面上。没有它,你做的所有旋转和位移都只会是二维的假象。

解决方案

要构建一个旋转的3D立方体,我们需要一个外部容器作为“舞台”,一个内部容器作为实际的“立方体”,以及六个面。关键在于将

transform-style: preserve-3d
应用到“立方体”容器上,这样它的子元素(即立方体的各个面)才能真正地在三维空间中定位和旋转。同时,外部的“舞台”需要一个
perspective
属性,这决定了我们观察这个3D场景的“距离”,没有它,即使有
preserve-3d
,你看到的也只是一个扁平的形状。

以下是实现代码的思路:

立即学习前端免费学习笔记(深入)”;

.cube-stage {
    width: 200px;
    height: 200px;
    /* 视角距离,决定3D效果的强烈程度 */
    perspective: 800px; 
    /* 视角原点,可以调整观察角度 */
    perspective-origin: center center;
    border: 1px solid #ccc; /* 只是为了看清舞台边界 */
    margin: 100px auto;
}

.cube {
    width: 100%;
    height: 100%;
    position: relative;
    /* 关键:让子元素在3D空间中保持其3D变换 */
    transform-style: preserve-3d; 
    /* 定义立方体旋转的中心点 */
    transform-origin: 50% 50% -100px; /* 调整立方体旋转的轴心 */
    /* 动画效果 */
    animation: rotateCube 10s infinite linear;
}

.face {
    position: absolute;
    width: 200px;
    height: 200px;
    line-height: 200px;
    text-align: center;
    font-size: 2em;
    color: white;
    border: 1px solid rgba(0,0,0,0.1);
    /* 隐藏背面,防止旋转时看到反面内容 */
    backface-visibility: hidden; 
    opacity: 0.8;
}

/* 各个面的定位和旋转 */
.front  { background-color: #f44336; transform: translateZ(100px); }
.back   { background-color: #2196f3; transform: rotateY(180deg) translateZ(100px); }
.right  { background-color: #4caf50; transform: rotateY(90deg) translateZ(100px); }
.left   { background-color: #ffeb3b; transform: rotateY(-90deg) translateZ(100px); }
.top    { background-color: #9c27b0; transform: rotateX(90deg) translateZ(100px); }
.bottom { background-color: #ff9800; transform: rotateX(-90deg) translateZ(100px); }

/* 动画定义 */
@keyframes rotateCube {
    from { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); }
    to   { transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg); }
}

这里,每个面的

translateZ(100px)
是基于立方体边长的一半(如果立方体是200x200px,那么中心点到每个面的距离就是100px)。通过
rotateY
rotateX
将面旋转到正确的位置,再用
translateZ
将其推到立方体的边缘。

CSS 3D变换中,
transform-style: preserve-3d
扮演了怎样的角色?

在我看来,

transform-style: preserve-3d
是CSS 3D变换的基石,没有它,一切都无从谈起。你可以把它想象成一个开关,决定了你的元素及其子元素是否能真正生活在一个三维世界里。默认情况下,这个属性的值是
flat
,这意味着即使你给子元素设置了
translateZ
或者
rotateX
这样的3D变换,它们也只会像一张纸片一样,被“拍扁”到父元素的二维平面上,无法展现出真正的深度。

当我第一次接触CSS 3D时,最困惑的就是为什么我明明写了

translateZ
,却看不到任何深度变化。后来才明白,原来是父元素没有开启
preserve-3d
模式。一旦加上它,父元素就变成了一个真正的三维容器,它的子元素就能在自己的局部三维坐标系中自由地进行深度位移和旋转,而且这些变换会累积,共同构建出复杂的3D结构。这就像是给了你的子元素一个“3D通行证”,允许它们在空间中自由穿梭,而不仅仅是在画布上画画。

椒图AI
椒图AI

中文AI修图神器,一句话搞定复杂修图

下载

如何理解
perspective
perspective-origin
在3D立方体呈现中的作用?

perspective
perspective-origin
这对组合,我常把它们看作是你在3D场景中的“眼睛”和“观察点”。
perspective
属性,通常设置在
transform-style: preserve-3d
的父级元素上,它定义了观察者与3D场景之间的距离。这个距离决定了3D效果的“强度”或“透视感”。数值越小,观察者离场景越近,透视效果越强烈,远处的物体看起来会缩小得更厉害,近处的物体则显得更大。数值越大,观察者离得越远,透视效果越弱,3D物体看起来会更接近正交投影(即没有近大远小的效果)。如果完全没有
perspective
属性,那么即便你设置了
preserve-3d
,所有3D变换也会看起来像是2D的,因为没有“近大远小”的视觉差异来营造深度感。

perspective-origin
则决定了你的“眼睛”在3D场景中的具体位置。默认情况下,它通常在元素的中心(
50% 50%
),这意味着你正对着场景的中心看。你可以通过调整它的X和Y坐标,比如设置为
left top
right bottom
,来改变你的观察角度,让立方体看起来是从左上角或右下角被观察到的。这个属性对于创建独特的视觉焦点或模拟特定相机视角非常有用。我个人觉得,玩转这两个属性,就像是在一个虚拟的摄影棚里调整焦距和机位,能极大地影响你3D作品的最终呈现效果。

构建CSS 3D结构时,有哪些常见的陷阱和调试策略?

在构建CSS 3D结构时,我遇到过不少让人抓狂的问题,它们往往不那么直观。

一个常见的陷阱是Z-index的误解。在2D布局中,

z-index
可以轻松控制元素的堆叠顺序。但在3D空间里,尤其是在使用了
transform
属性后,元素的渲染顺序往往由它们在3D空间中的实际位置(Z轴值)决定,而不是简单的
z-index
。有时,即使
z-index
很高,如果元素在3D空间中实际位于另一个元素的后面,它仍然会被遮挡。这时,你需要确保你的
translateZ
值是正确的,并且父元素开启了
preserve-3d

另一个是

transform-origin
的混淆。每个
transform
操作都是围绕一个原点进行的。对于一个立方体的面来说,如果你想让它围绕自身中心旋转,那么
transform-origin
默认是
50% 50%
。但如果你想让整个立方体围绕一个轴旋转,那么动画应该作用在立方体容器上,并且它的
transform-origin
需要设置为立方体的中心。我有时会忘记调整这个,导致整个立方体旋转时看起来像在晃动而不是在原地转。

backface-visibility
也是一个容易被忽略但很重要的属性。默认情况下,元素的背面是可见的。如果你在构建一个透明或半透明的3D物体,或者不希望在立方体旋转时看到它背面的内容(比如文字倒过来),那么给所有面设置
backface-visibility: hidden;
就显得尤为重要。

至于调试策略,浏览器开发者工具是你的救星。特别是Chrome DevTools,它在Elements面板中,选中一个应用了3D transform的元素后,会有一个小图标显示其3D变换的可视化工具。你可以拖动鼠标来旋转整个场景,直观地看到每个元素在3D空间中的位置和方向。这比盯着CSS代码盲猜要高效得多。我还会频繁地调整

perspective
的值,甚至暂时把
opacity
调低,或者给每个面加上不同的背景色,这样可以更清晰地辨别每个面在空间中的相对位置。有时候,给父元素加上一个临时的
border
也能帮助你理解其边界和
transform-origin
。这些小技巧,在复杂3D结构搭建时,能省下大量时间。

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

509

2023.06.15

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

262

2023.07.27

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

752

2023.07.28

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

537

2023.08.01

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

757

2023.08.10

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

603

2023.08.10

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

559

2023.08.21

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

389

2023.08.22

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

10

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

CSS教程
CSS教程

共754课时 | 18.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号