SOURCE

console 命令行工具 X clear

                    
>
console
<!-- Jade? No thanks. -->
<div class="canvas">
    <div class="cube">
        <div class="group group--aqua">
            <div class="plane plane--aqua">
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
                <div class="dot dot--aqua"></div>
            </div>
        </div>
        <div class="group">
            <div class="plane plane--gold">
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
                <div class="dot dot--gold"></div>
            </div>
        </div>
        <div class="group group--tomato">
            <div class="plane plane--tomato">
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
                <div class="dot dot--tomato"></div>
            </div>
        </div>
    </div>
</div>
$canvas-size: 500px;
$cube-size: 200px;
$dot-size: 10px;

body {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100vw;
    height: 100vh;
    overflow: hidden;
    background-color: #171723;
}

.canvas {
    position: relative;
    width: $canvas-size;
    height: $canvas-size;
    transform-style: preserve-3d;
    transform: rotateX(-35deg);
}

.cube {
    position: absolute;
    top: 50%;
    left: 50%;
    width: $cube-size;
    height: $cube-size;
    transform-style: preserve-3d;
    transform: translate(-50%, -50%) rotateY(45deg);
}

.group {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;
}

.group--aqua {
    transform: translate3d(0, 0, ceil($canvas-size * 0.134));
}

.group--tomato {
    transform: translate3d(0, 0, ceil($canvas-size * -0.134));
}

@keyframes plane-rotation {
    50%, 100% {
        transform: rotateZ(-90deg);
    }
}

.plane {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;
    perspective: 2400px;
    animation: plane-rotation 2s infinite;
}

.plane--gold {
    animation-delay: 0.25s;
}

.plane--tomato {
    animation-delay: 0.5s;
}

@keyframes dot-rotation {
    50%, 100% {
        transform: rotateY(0deg) rotateX(45deg) scaleX(1.2);
    }
}

.dot {
    display: flex;
    justify-content: center;
    align-items: center;
    flex-basis: 33.33%;
    transform: rotateY(-45deg) rotateX(35deg)  scaleX(1);
    animation: dot-rotation 2s infinite;

    &::before {
        content: '';
        display: block;
        width: $dot-size;
        height: $dot-size;
        border-radius: 50%;
    }
}

.dot--aqua {

    &::before {
        background-color: aqua;
    }
}

.dot--gold {
    animation-delay: 0.25s;

    &::before {
        background-color: gold;
    }
}

.dot--tomato {
    animation-delay: 0.5s;

    &::before {
        background-color: tomato;
    }
}