<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>
  
<a href="https://maxime-malfilatre.com" class="signature" target="_blank">
    <div class="link">
      <span class="brace">
        {
      </span>
      <span class="before">
        <span class="before-text">
          &nbsp;by
        </span>
      </span>
      <span class="my-name">
        m
      </span>
      <span class="after">
        <span class="after-text">
          <span class="spin">axe</span>
          <span>w</span>
        </span>
      </span>
      <span class="brace">
        }
      </span>
    </div>
  </a>
  
</section>
@import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap');

/*font-family: 'Comfortaa', cursive;*/

: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;
}


.link {
  position: fixed;
  z-index: 10;
  left: calc(2.5vmin - .75rem);
  bottom: calc(2.5vmin - .75rem);
  font-size: 1.5rem;
  font-family: arial, sans-serif;
  color: whitesmoke;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.my-name {
  position: relative;
}

.before, .after {
  overflow: hidden;
  width: 0px;
  transition: width .5s;
  transform-origin: right;
}

.before-text {
  display: inline-block;
  width: auto;
  text-align: right;
}

.after-text {
  display: flex;
  align-items: center;
  width: auto;
  height: 3rem;
  transform-origin: top center;
}

.link:hover .before {
  width: 2.5rem;
}

.link:hover .after {
  width: 4rem;
}

.link:hover .spin {
  display: inline-block;
  transition: .5s transform .5s ease-in-out;
  transform: rotate(360deg);
}
/* @m4xew */

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.