I'm attempting to animate a 3D cube using CSS transforms. In Chrome and Safari this works as expected. In Firefox however, the 'lids' of the cube, which are rotated 90deg, don't display correctly until they are rotated back to 0deg.
I thought this might be an issue with overflow () but this doesn't seem to help. I'm not sure where I'm going wrong!
Here's my code so far: https://codepen.io/simonandywilson/pen/RwGrgYJ
html body {
position: absolute;
height: 100%;
width: 100%;
display: flex;
overflow: hidden;
background: #808080;
}
.leftContainer,
.rightContainer {
width: 50%;
height: 100%;
position: relative;
display: flex;
transform-style: preserve-3d;
}
.leftContainer {
z-index: 99;
transform-origin: bottom right;
justify-content: flex-end;
transform: rotateX(-25deg) rotateY(-45deg);
animation: flatternLeft 2s 4s 1 forwards;
}
.rightContainer {
transform-origin: bottom left;
justify-content: flex-start;
transform: rotateX(-25deg) rotateY(45deg);
animation: flatternRight 2s 4s 1 forwards;
}
.face {
position: relative;
width: 50vh;
height: 50vh;
background: #ffffff;
border: solid 2px #0000ff;
}
.leftTop {
transform-origin: bottom right;
transform: rotateX(90deg);
animation: rotateLid 2s 1 forwards;
}
.rightTop {
transform-origin: bottom left;
transform: rotateX(90deg);
animation: rotateLid 2s 2s 1 forwards;
}
@keyframes rotateLid {
from {
transform: rotateX(90deg);
}
to {
transform: rotateX(0deg);
}
}
@keyframes flatternLeft {
from {
transform: rotateX(-25deg) rotateY(-45deg);
}
to {
transform: rotateX(0deg) rotateY(0deg);
}
}
@keyframes flatternRight {
from {
transform: rotateX(-25deg) rotateY(45deg);
}
to {
transform: rotateX(0deg) rotateY(0deg);
}
}
<div class="leftContainer">
<div class="cube">
<div class="face leftTop"></div>
<div class="face leftBottom"></div>
</div>
</div>
<div class="rightContainer">
<div class="cube">
<div class="face rightTop"></div>
<div class="face rightBottom"></div>
</div>
</div>