<nav class="top-right open">
  <a class="disc l1">
    <div>Messages</div>
  </a>
  <a class="disc l2">
    <div>Photos</div>
  </a>
  <a class="disc l3">
    <div>Profile</div>
  </a>
  <a class="disc l4">
    <div>Likes</div>
  </a>
  <a class="disc l5 toggle">
    Menu
  </a>
</nav>
$size : 50px;
$items : 5;
$transition : .5s;
$bounce : cubic-bezier(.3,1.4,.5,.9);
$color-inner : gold;
$color-outer : tomato;
$background: mix($color-inner, $color-outer);
$black : shade($color-outer, 80%);
$start-scale : .5;
$start-rot : 190deg;

@import url('https://fonts.googleapis.com/css?family=Alegreya+Sans:800,900');

html, body { height: 100%; }
body {
  background: beige;
  font-family: Alegreya Sans, sans-serif;
}

nav {
  display: block;
  position: fixed;
  width: $size * $items * 2;
  height: $size * $items * 2;
  user-select: none;
  transform: translate3d($size*.5,-$size*.5,0);
  transition: transform $transition $bounce;
  
  &.open {
    transform: translate3d(0,0,0);
  }
  
  &.top-right {
    top: -$size * ($items - 2.2);
    right: -$size * ($items - 2.2);
  }
}

.disc { 
  position: absolute;
  display: inline-block;
  text-align: center;
  cursor: pointer;
  font: $size*.5 Alegreya Sans, sans-serif;
  line-height: $size * .8;
  padding-top: $size * .2;
  border-radius: $size * $items;
  transform: scale3d($start-scale, $start-scale, $start-scale) rotate3d(0,0,1,$start-rot);
  pointer-events: none;
  opacity: 0;
  cursor: pointer;
  transition: transform $transition $bounce, opacity $transition;
  
  div {
    transform: rotate(180deg);
  }
  
  .open & {
    pointer-events: auto;
    opacity: 1; 
  }
}

@for $i from 1 through $items {
  .l#{$i} {
    $i : $i - 1;
    $-i : $items - $i;
    $pct : $i/$items * 100%;
    $color :  mix($color-inner, $color-outer, $pct);
    
    top: $i * $size;
    left: $i * $size;
    right: $i * $size;
    bottom: $i * $size;
    background: $color;
    transition-delay: $i * $transition/$items;
  
    .open & {
      transition-delay: $i * $transition/$items;
      transform: scale3d(1,1,1) rotate3d(0,0,1,$start-rot);
      opacity: 1;
      
      &:hover {
        background: shade($color, 90%);
        color: $color;
        transition-delay: 0s;

      }
  
      &:active {
        background: shade($color, 50%);
        color: $color;
      }
      
      &.toggle {
        transform: scale3d(.9,.9,.9) rotate3d(0,0,1,$start-rot - 180deg);
      }
    }
  }
}

.toggle {
  line-height: $size*2;
  padding: 0;
  width: $size*2;
  background: $color-inner;
  opacity: 1;
  transform: none;
  pointer-events: auto;
  transition-delay: 0s;
  
  .open & {
    transform: rotate3d(0,0,1,0deg);
  }

  &:hover {
    background: shade($color-inner, 90%);
    text-decoration: underline;
  }
  &:active {
    background: shade($color-inner, 50%);
    color: rgba($color-inner, .5);
    transform: scale(.9);
    transition-duration: 0s;
  }
}
View Compiled
toggle = document.querySelectorAll(".toggle")[0];
nav = document.querySelectorAll("nav")[0];
toggle_open_text = 'Menu';
toggle_close_text = 'Close';

toggle.addEventListener('click', function() {
  nav.classList.toggle('open');
  
  if (nav.classList.contains('open')) {
    toggle.innerHTML = toggle_close_text;
  } else {
    toggle.innerHTML = toggle_open_text;
  }
}, false);

setTimeout(function(){
  nav.classList.toggle('open'); 
}, 800);

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.