<!-- Auteur: Simon Arnold -->
<div class="multiplane">
  <div class="wrapper">
    <img src="https://assets.codepen.io/9367036/wd1.png" class="layer depth-4">
    <img src="https://assets.codepen.io/9367036/wd2.png" class="layer depth-3">
    <img src="https://assets.codepen.io/9367036/wd3.png" class="layer depth-2">
    <img src="https://assets.codepen.io/9367036/wd4.png" class="layer depth-1">
  </div>
</div>

<nav class="nav">
  <button class="btn btn-45"></button>
  <button class="btn btn-play-pause fas fa-pause"></button>
</nav>
$perspective: 650;
$depthStep: 200;
$totalDepthLevels: 3;
$zoomIn: 300;
$duration: 5s;

@for $i from 0 through $totalDepthLevels {
  $depthStart: $i * $depthStep * -1;
  $depthEnd: $zoomIn / ($i + 1) + $depthStart;
  $scale: 1 + $depthStart * -1 / $perspective;
  
  .depth-#{$i + 1} {
    transform: translateZ(#{$depthStart}px) scale($scale);
    animation: depth-anim-#{$i + 1} $duration alternate infinite;
  }
  
  @keyframes depth-anim-#{$i + 1} {
    from { transform: translateZ(#{$depthStart}px) scale($scale); }
    to { transform: translateZ(#{$depthEnd}px) scale($scale); }
  }
}

* { box-sizing: border-box; }

html,
body {
  height: 100%;
  margin: 0;
  background: #1F2128;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
}

.multiplane {
  position: relative;
  width: 100vw;
  aspect-ratio: 4 / 3;
  perspective: #{$perspective}px;
  overflow: hidden;
  transition: perspective 0.3s;
  
  .is-angle & { overflow: visible; }
  .has-no-perspective & { perspective: 0; }
}

.wrapper {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform: translate3d(0, 0, 0) rotateY(0deg);
  transition: transform 0.3s;
  transform-style: preserve-3d;
  
  .is-angle & {
    transform: translate3d(50%, 0, -800px) rotateY(45deg)
  }
}

.layer {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  transform-style: preserve-3d;
  
  .is-paused & { animation-play-state: paused; }
}

.nav {
  position: fixed;
  display: flex;
  justify-content: space-evenly;
  bottom: 0;
  left: 0;
  width: 100%;
  font-size: clamp(12px, 2.5vmin, 22px);
  padding: 1em 0;
}

.btn {
  display: block;
  background-color: rgba(white, 0.15);
  padding: 0.5em 1.5em;
  border-radius: 1.5em;
  border: 0;
  min-width: 80px;
  text-decoration: none;
  text-align: center;
  color: white;
  
  &:hover { background-color: rgba(white, 0.3);}
}

.fa-youtube { font-size: 1.25em; }

.btn-45 {
  font-weight: bold;

  &::before { content: '45°'; }
  
  .is-angle & {
    &::before { content: '0°'; }
  }
}
View Compiled
const btn45 = document.querySelector('.btn-45');
const btnPlayPause = document.querySelector('.btn-play-pause');

btn45.addEventListener('click', function() {
  document.body.classList.toggle('is-angle');
});

btnPlayPause.addEventListener('click', function() {
  document.body.classList.toggle('is-paused');
  btnPlayPause.classList.toggle('fa-play');
  btnPlayPause.classList.toggle('fa-pause');
});

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css

External JavaScript

This Pen doesn't use any external JavaScript resources.