<div class="phone">
  <div class="container" id="js_container">
    <div class="content">

      <h1>Mock</h1>
      <h2>Mock app does nothing for you, it does not exist and is yellow..</h2>

      <button type="button" id="js_show-navigation">
              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
            </button>
    </div>
    <div class="menu">
      <h1>Menu</h1>

      <div class="button-container">
        <button type="button" id="js_hide-navigation">
                <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
              </button>
      </div>
      <nav>
        <ul>
          <li><a href="#0">Home</a></li>
          <li><a href="#0">About</a></li>
          <li><a href="#0">Contact</a></li>
          <li><a href="#0">Dance</a></li>
        </ul>
      </nav>
    </div>
  </div>
</div>
@import url('https://fonts.googleapis.com/css?family=Abril+Fatface|Roboto:400,500&display=swap');

html {
  box-sizing: border-box;
}

*,
*:before,
*:after {
  box-sizing: inherit;
}

body,
html {
  height: 100%;
  min-height: 100%;
}

body {
  background: #e0e2ef;
  font-size: 16px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-family: "Roboto", sans-serif;
  line-height: 1.45;
}

h1 {
  font-family: "Abril Fatface", cursive;
  font-size: 5rem;
}

h2 {
  font-size: 1rem;
}

.phone {
  background: black;
  border-radius: 40px;
  border: 10px solid #21262b;
  box-shadow: 0 0 20px rgba(black, 0.4);
  height: 600px;
  overflow: hidden;
  perspective: 600px;
  position: relative;
  width: 310px;

  &::before {
    background: #21262b;
    content: "";
    height: 20px;
    left: 50%;
    position: absolute;
    transform: translateX(-50%);
    width: 50%;
    z-index: 2;
    border-radius: 0 0 15px 15px;
  }

  .container {
    width: 100%;
    height: 100%;
    position: relative;
    transition: transform 0.75s cubic-bezier(0.23, 1, 0.32, 1);
    transform-style: preserve-3d;

    &.--is-flipped {
      transform: rotateY(180deg);

      .menu button {
        transform: scale(1);
      }

      nav,
      h1 {
        opacity: 1;
        animation: animationFrames linear 1s;
        animation-iteration-count: 1;
        transform-origin: 50% 50%;

        @keyframes animationFrames {
          0% {
            opacity: 0;
          }
          100% {
            opacity: 1;
          }
        }
      }
    }
  }

  .content,
  .menu {
    position: absolute;
    height: 100%;
    width: 100%;
    backface-visibility: hidden;
    padding: 2em;
    display: flex;
    flex-direction: column;

    button {
      position: absolute;
      bottom: 2em;
      outline: none;
      right: 2em;
      border-radius: 100%;
      width: 5em;
      backface-visibility: hidden;
      height: 5em;
      box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1),
        0 10px 10px -5px rgba(0, 0, 0, 0.04);
      display: flex;
      align-items:center;
      justify-content: center;
      
      svg {
        display: block;
      }
    }
  }

  .content {
    background: #ffd10f;
  }

  .menu {
    background: #2e2ebc;
    transform: rotateY(180deg);

    * {
      backface-visibility: hidden;
    }

    button {
      transform: scale(0);
      transition: all 0.2s cubic-bezier(0.165, 0.84, 0.44, 1);
      transition-delay: 0.8s;
        }

        h1 {
            color: white;
        }

    nav {
            opacity: 0;

            li a {
          font-size: 2rem;
                color: white;
            }
    }
  }
}
View Compiled

const container  = document.getElementById('js_container')
const showButton = document.getElementById('js_show-navigation')
const hideButton = document.getElementById('js_hide-navigation')

showButton.addEventListener('click', () => container.classList.add('--is-flipped'))
hideButton.addEventListener('click', () => container.classList.remove('--is-flipped'))

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.