<div class="icon">MENU
  <ul class="menu">
    
    <li class="spread">
          <a class="unit" href="#">2</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">4</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">6</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">7</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">8</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">9</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">10</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">11</a>
    </li>
    
    <li class="spread">
          <a class="unit" href="#">14</a>
    </li>
    
  </ul>
</div>
@import "compass/css3";

           $li: 9; /* [1] */
    $icon-size: 150px; /* [2] */
    $menu-size: 300px / 2; /* [3] */
    $unit-size: 45px;  /* [4] */
$menu-position: (($menu-size * 2) - $icon-size) / -2;
       $offset: 100px; /* [5] */
          $deg: 360deg / $li; /* [6] */

/* Styles: */
.icon {
  position: relative;
	background: white;
	cursor: pointer;
	margin: auto;
	color: deepskyblue;
	border-radius: 50%;
  height: $icon-size;
	width: $icon-size;
	line-height: $icon-size;
  text-align: center;
 	font-size: 2.75em;
 	font-weight: bold;
 	transition: 0.24s 0.2s;
}

.icon:hover {
	background: rgba(white,0.75);
}

.menu {
  position: absolute;
  top: $menu-position;
  left: $menu-position;
  border: $menu-size solid transparent;
  cursor: default;
  border-radius: 50%;
  transform: scale(0);
	transition: transform 1.4s 0.07s;
	z-index: -5;
}

.spread {
	position: absolute;
	top: -($offset);
	left: -($offset);
	transform-origin: $offset $offset;
	transition: all 0.5s 0.1s;
}

.icon:hover {
	 .menu {
		 transition: transform 0.4s 0.08s,
				  				        z-index   0s  0.5s;
  	 transform: scale(1);
  	 z-index: 5;
	 }
	 .spread, .unit {
	 	 transition: all 0.6s;
	 }
  
/* Where all the MAGIC happens: */
	 @for $m from 1 through $li {
	   .spread:nth-child(#{$m}) {
		    transition-delay: $m * 0.02s;
		    transform: rotate(45 + $deg * $m);
		    .unit {
			     transition-delay: $m * 0.04s;
			     transform: rotate(-$deg * $m + 720 - 45);
		    }
	   }
  }
} /* END .icon:hover */

.unit {
 	position: absolute;
 	background: white;
 	font-size: 60%;
  text-decoration: none;
 	width: $unit-size;
 	height: $unit-size;
 	line-height: $unit-size;
 	color: dodgerblue;
 	border-radius: 50%;
 	transition: 0.6s;
}




/* Just CodePen layout stuff: */ body,a,ul,li{margin:0;outline:0;padding:0;list-style:none}html,body{height:100%;min-height:$menu-size*2}body{font-family:sans-serif;background:radial-gradient(deepskyblue,dodgerblue);transform:translate3d(0,0,0)}.icon{top:50%;margin-top:$icon-size/-2}
View Compiled
/*     NOTES:
 * [1] Number of list-items you want
 * [2] Size of closed menu "icon"
 * [3] Size of your expanded menu
 * [4] Size of the small units
 * [5] Used to transform the origin of the rotation on the list-itmes to the middle of the menu so they spin out in a centered circle. The same number also offsets position of the list items so they don't sit right on the edge of the actual <ul>, that way there's padding and the menu won't close down if the user moves their cursor a bit too far.
 * [6] Used for the degrees of rotation between each list item, keeping them all evenly spaced. 360 degrees in a circle divided by the number of list items you have
 */

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.