<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">
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;
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);
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%;
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 */
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.