前端必会50个CSS特效:3D 立方体旋转效果

本文将介绍如何利用 CSS3 的 transform(3D 变换)、perspective(透视)和 animation(动画)属性实现立体旋转效果。

要实现3D立方体旋转效果,需要利用 CSS3 的 transform(3D 变换)、perspective(透视)和 animation(动画)属性。

立方体的 6 个面本质是 6 个大小相同的正方形,通过以下步骤组合成立体结构:

  • 所有面绝对定位,重叠在同一位置;

  • 每个面向不同方向平移(translate),拉开空间距离;

  • 旋转每个面的朝向(rotate),使其垂直于对应方向;

  • 给整体添加旋转动画,让立方体动起来。

关键 CSS 属性说明:

  • perspective:给父容器(.cube-container)设置,模拟人眼到立方体的距离,数值越小,3D 透视效果越明显(比如设为 500px 会更 “近”)。

  • transform-style: preserve-3d:给立方体主体(.cube)设置,必须开启,否则所有子元素(6 个面)的 3D 变换会被压缩到 2D 平面,失去立体感。

  • transform-origin:变换的中心点,这里设为立方体中心(50% 50%),确保旋转围绕中心进行。

  • translateZ/X/Y:平移变换,立方体的每个面需要向不同方向平移 “边长的一半”(150px),才能组成立方体的 6 个面。

  • rotateX/rotateY:旋转变换,调整每个面的朝向,使其成为立方体的 “前后左右上下” 面。

示例代码:

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3D 立方体旋转特效</title>
    <style>
        /* 1. 容器:提供透视效果,决定3D视觉的“景深” */
        .cube-container {
            width: 300px;
            height: 300px;
            margin: 100px auto;
            /* 透视:数值越小,3D效果越强烈(近大远小) */
            perspective: 800px; 
            /* 让子元素的3D变换生效 */
            perspective-origin: center center;
        }

        /* 2. 立方体主体:承载6个面,设置3D变换基点和旋转动画 */
        .cube {
            width: 100%;
            height: 100%;
            /* 开启3D空间,否则子元素的3D变换会被扁平化 */
            transform-style: preserve-3d;
            /* 旋转动画:名称 时长 匀速 无限循环 */
            animation: rotateCube 10s linear infinite;
            /* 变换基点:立方体中心(默认就是center,显式声明更清晰) */
            transform-origin: 50% 50%;
        }

        /* 3. 立方体的每个面:统一样式 + 各自的3D位置 */
        .cube-face {
            position: absolute;
            width: 300px;
            height: 300px;
            /* 半透明背景,方便看清立体结构 */
            opacity: 0.85;
            /* 边框增强立体感 */
            border: 2px solid #fff;
            /* 文字居中 */
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 36px;
            font-weight: bold;
            color: #fff;
        }

        /* 前表面:向前平移立方体边长的一半(150px) */
        .front {
            background-color: #ff6b6b;
            transform: translateZ(150px);
        }

        /* 后表面:向后平移150px + 旋转180°(保证文字正向) */
        .back {
            background-color: #4ecdc4;
            transform: translateZ(-150px) rotateY(180deg);
        }

        /* 左表面:向左平移150px + 旋转Y轴-90° */
        .left {
            background-color: #feca57;
            transform: translateX(-150px) rotateY(-90deg);
        }

        /* 右表面:向右平移150px + 旋转Y轴90° */
        .right {
            background-color: #ff9ff3;
            transform: translateX(150px) rotateY(90deg);
        }

        /* 上表面:向上平移150px + 旋转X轴90° */
        .top {
            background-color: #54a0ff;
            transform: translateY(-150px) rotateX(90deg);
        }

        /* 下表面:向下平移150px + 旋转X轴-90° */
        .bottom {
            background-color: #5f27cd;
            transform: translateY(150px) rotateX(-90deg);
        }

        /* 4. 旋转动画:绕Y轴和X轴同时旋转,实现更自然的3D效果 */
        @keyframes rotateCube {
            0% {
                transform: rotateX(0deg) rotateY(0deg);
            }
            100% {
                transform: rotateX(360deg) rotateY(360deg);
            }
        }
    </style>
</head>
<body>
    <div class="cube-container">
        <div class="cube">
            <div class="cube-face front">前</div>
            <div class="cube-face back">后</div>
            <div class="cube-face left">左</div>
            <div class="cube-face right">右</div>
            <div class="cube-face top">上</div>
            <div class="cube-face bottom">下</div>
        </div>
    </div>
</body>
</html>

👉自己动手试一试 »

人永远是要学习的。死的时候,才是毕业的时候。 —— 萧楚女
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号