<section>
    <h1>Kaleidoscope</h1>
    <div class="kaleidoscope">
        <div class="container">
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
        </div>
        <div class="container">
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
        </div>
        <div class="container">
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
        </div>
        <div class="container">
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
        </div>
        <div class="container">
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
        </div>
        <div class="container">
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
        </div>
        <div class="container">
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
            <div class="tile">
                <div class="texture"></div>
            </div>
        </div>
    </div>
</section>
@import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap');

:root{
    --tile-length: 17.5vmin;
    --animation-duration: 8s;
}

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

section{
    height: 100vh;
    width: 100vw;
    background: black;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-evenly;
    overflow: hidden;
}

h1{
    font-size: min(10vw, 3rem);
    font-family: 'Comfortaa', cursive;
    color: white;
}

.kaleidoscope{
    position: relative;
    width: calc(6 * .866 * var(--tile-length));
    height: 90vmin;
    -webkit-animation: rotation var(--animation-duration) linear infinite;
            animation: rotation var(--animation-duration) linear infinite;
    border-radius: 50%;
    overflow: hidden;
}

.kaleidoscope:after{
    content:'';
    position:absolute;
    height: inherit;
    width: inherit;
    background: radial-gradient(circle at center, transparent 25%, black 60%);
    z-index: 10;
}

.container{
    position: absolute;
    width: calc(2 * var(--tile-length));
    height: calc(2 * var(--tile-length));
    border-radius: 50%;
    overflow: hidden;
    transform: translate( calc(var(--tile-length) * -0.134 ), -50%);
}

.container:nth-child(1){
    top: 50%;
    left: 0%;
}

.container:nth-child(2){
    top: 50%;
    left: calc(2 * calc(var(--tile-length) * 0.866 ));
}

.container:nth-child(3){
    top: 50%;
    left: calc(4 * calc(var(--tile-length) * 0.866 ));
}

.container:nth-child(4){
    top: calc(50% - calc(1.5 * var(--tile-length)));
    left: calc(var(--tile-length) * 0.866 );
}

.container:nth-child(5){
    top: calc(50% - calc(1.5 * var(--tile-length)));
    left: calc(3 * var(--tile-length) * 0.866 );
}

.container:nth-child(6){
    top: calc(50% + calc(1.5 * var(--tile-length)));
    left: calc(var(--tile-length) * 0.866 );
}

.container:nth-child(7){
    top: calc(50% + calc(1.5 * var(--tile-length)));
    left: calc(3 * var(--tile-length) * 0.866 );
}

@-webkit-keyframes rotation{
    from{
        transform: rotate(0deg);
    }
    to{
        transform: rotate(360deg);
    }
}

@keyframes rotation{
    from{
        transform: rotate(0deg);
    }
    to{
        transform: rotate(360deg);
    }
}

.tile{
    position: absolute;
    top: 28%;
    left: 25%;
    width: var(--tile-length);
    height: calc(var(--tile-length) * 0.866);
    -webkit-clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
            clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
}

.tile:nth-child(1){
    transform: rotate(30deg) translateY(50%) scaleX(-1);
}

.tile:nth-child(2){
    transform: rotate(90deg) translateY(50%);
}

.tile:nth-child(3){
    transform: rotate(150deg) translateY(50%) scaleX(-1);
}

.tile:nth-child(4){
    transform: rotate(210deg) translateY(50%);
}

.tile:nth-child(5){
    transform: rotate(270deg) translateY(50%) scaleX(-1);
}

.tile:nth-child(6){
    transform: rotate(330deg) translateY(50%);
}

.texture{
    position: absolute;
    height: calc(1.75 * var(--tile-length));
    width: calc(1.75 * var(--tile-length));
    background-image: url(https://zupimages.net/up/21/39/6p27.png);
    background-size: 100%;
    -webkit-animation: rotation var(--animation-duration) linear infinite;
            animation: rotation var(--animation-duration) linear infinite;
}
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.