Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ldijkman/c3717878a0efc231b6a0c6bca3c55c60 to your computer and use it in GitHub Desktop.
Save ldijkman/c3717878a0efc231b6a0c6bca3c55c60 to your computer and use it in GitHub Desktop.
3d cube, rectangle, square, scss
<div class="box">
<div class="p1">œ</div>
<div class="p2">∑</div>
<div class="p3">å</div>
<div class="p4">®</div>
<div class="p5">†</div>
<div class="p6">¥</div>
</div>
<div class="sh"></div>
var centerX = window.innerWidth / 2;
var centerY = window.innerHeight / 2;
var layers = document.querySelectorAll('.box > div');
function rotateTo(x, y){
layers[0].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 90}deg) rotateZ(${0}deg)`;
layers[1].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 270}deg) rotateZ(${0}deg)`;
layers[2].style.transform = `rotateX(${y + 90}deg) rotateY(${0}deg) rotateZ(${-x}deg)`;
layers[3].style.transform = `rotateX(${y + -90}deg) rotateY(${0}deg) rotateZ(${x}deg)`;
layers[4].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 0}deg) rotateZ(${0}deg)`;
layers[5].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 180}deg) rotateZ(${0}deg)`;
};
document.body.addEventListener('mousemove', function(e){
var x = (centerX - e.clientX) / centerX * 360,
y = (centerY - e.clientY) / centerY * 360;
rotateTo(x, y);
});
// autoplay
var apX = 0;
var apY = 0;
// comment below
setInterval(() => rotateTo(apX += 1, apY +=1), 60);
$size: 150px;
$colors: #73c25b #fdc333 #f99427 #e7524f #a856a9 #26aee3;
html, body{
width: 100vw;
height: 100vh;
margin: 0;
overflow: hidden;
}
body{
font-family: 'Open Sans', sans-serif;
background: radial-gradient(rgba(#000,.3), #fff);
}
.box {
position: relative;
width: $size;
height: $size;
margin: $size auto;
transform-style: preserve-3d;
perspective: 600px;
}
.box > div {
position: absolute;
top: 0;
left: 0;
width: $size;
height: $size;
font-size: 5rem;
font-weight: bold;
color: rgba(#fff, .4);
display: flex;
align-items: center;
justify-content: center;
opacity: 0.9;
transform-origin: 50% 50% $size / -2;
}
@for $i from 1 through 6 {
.p#{$i} {
background: nth($colors, $i);
box-shadow: inset 0 0 25px rgba(#fff, 0.2);
}
}
div.sh{
background: radial-gradient(#000, rgba(#000,0));
position: absolute;
top: 1.3 * $size;
left: 0;
right: 0;
margin: $size auto;
width: $size;
height: $size;
filter: blur(50px);
z-index: -1;
transform: rotateX(50deg) scaleY(0.7);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment