/ Mobile Menu

Cool gooey effect applied to a mobilestyle menu

Cool gooey effect applied to a mobilestyle menu

Gooey mobile navigation

The cool gooey effect applied to a mobilestyle menu. jQuery and CSS transitions for the animations.

Made with

Html
Css
JavaScript

html

<div class="iphone">
  <div class="screen">
    <a class="cred" href="http://www.bjurhagerstudios.com">Made by BjurhagerStudios.com</a>
    <div class="blob-nav">
      <div class="wobble"></div>
      <div class="wobble"></div>
      <div id="toggle-nav" class="toggle">
        <span class="hamburger hamburger-1"></span>
        <span class="hamburger hamburger-2"></span>
        <span class="hamburger hamburger-3"></span>
      </div>
      <nav>
        <div class="nav-item"><i class="fa fa-codepen"></i></div>
        <div class="nav-item"><i class="fa fa-github"></i></div>
        <div class="nav-item"><i class="fa fa-facebook"></i></div>
        <div class="nav-item"><i class="fa fa-twitter"></i></div>
      </nav>
    </div>
  </div>
</div>


<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="shadowed-goo">

      <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="8" />
      <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 18 -7" result="goo" />
      <feGaussianBlur in="goo" stdDeviation="3" result="shadow" />
      <feColorMatrix in="shadow" mode="matrix" values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 1 -0.2" result="shadow" />
      <feOffset in="shadow" dx="1" dy="1" result="shadow" />
      <feBlend in2="shadow" in="goo" result="goo" />
      <feBlend in2="goo" in="SourceGraphic" result="mix" />
    </filter>
  </defs>
</svg>

Css

html {
  background-color: #1d1f20;
  font-family: 'Roboto', sans-serif;
  color: #fff;
  position: relative;
  width: 100%;
  height: 100%;
  overflow-y: hidden;
  list-style: none;
  -webkit-tap-highlight-color: transparent;
  -moz-user-tap-highlight-color: transparent;
  -ms-user-tap-highlight-color: transparent;
}
/* Mobile Background */

.iphone {
  width: 600px;
  height: 1061px;
  margin: 0 auto;
  margin-top: -650px;
  background: transparent url("https://s.cdpn.io/6859/iphone.png") no-repeat center center;
}

.screen {
  position: absolute;
  margin-top: 185px;
  margin-left: 91px;
  width: 416px;
  height: 713px;
  overflow: hidden;
  background-color: #1d1f20;
}
/* Main Navigation */

.blob-nav {
  height:100%;
  padding: 20px;
  -webkit-filter: url("#shadowed-goo");
  filter: url("#shadowed-goo");
}

.nav-item {
  width: 50px;
  height: 50px;
  margin-left: -25px;
  margin-top: -25px;
}

.nav-item:hover {
  background-color: rgb(11, 81, 81);
}

.nav-item:hover i {
  -webkit-transition: all .3s ease-out;
  -moz-transition: all .3s ease-out;
  -o-transition: all .3s ease-out;
  transition: all .3s ease-out;
  transform: rotate(360deg);
}

.toggle {
  width: 80px;
  height: 80px;
  margin-left: -40px;
  margin-top: -40px;
  z-index: 2;
}

.toggle:hover {
  -webkit-animation: bounce 1s cubic-bezier(0, .42, .42, 1);
  animation: bounce 1s cubic-bezier(0, .42, .42, 1);
}

.nav-item,
.toggle,
.wobble {
  position: absolute;
  bottom: 35px;
  left: 50%;
  text-align: center;
  background-color: #b4d455;
  border-radius: 50%;
  cursor: pointer;
  -webkit-transition: all .2s cubic-bezier(0,.42,.42,1);
  -moz-transition: all .2s cubic-bezier(0,.42,.42,1);
  -o-transition: all .2s cubic-bezier(0,.42,.42,1);
  transition: all .2s cubic-bezier(0,.42,.42,1);
}

.nav-item i {
  line-height: 50px;
}

.toggle i {
  line-height: 80px;
}
/* Wobble effect & Slideout nav */

.wobble {
  width: 70px;
  height: 70px;
  margin-left: -35px;
  margin-top: -35px;
}
/* Slide-out */

nav .slide-out:nth-child(1) {
  -webkit-transform: translate(90px, -20px) scale(1.2);
  transform: translate(90px, -20px) scale(1.2);
}

nav .slide-out:nth-child(2) {
  -webkit-transform: translate(160px, -40px);
  transform: translate(160px, -40px);
}

nav .slide-out:nth-child(3) {
  -webkit-transform: translate(-90px, -20px) scale(1.2);
  transform: translate(-90px, -20px) scale(1.2);
}

nav .slide-out:nth-child(4) {
  transform: translate(-160px, -40px);
}
/* Bounce */

@-webkit-keyframes bounce {
  50% {
    -webkit-transform: scale(1.1);
  }
  30% {
    -webkit-transform: scale(0.95);
  }
}

@keyframes bounce {
  50% {
    transform: scale(1.1);
  }
  30% {
    transform: scale(0.95);
  }
}
/* Wobble effect */

.ripple:nth-child(1) {
  -webkit-animation: wobble-1 1s ease-in-out;
  animation: wobble-1 1s ease-in-out;
}

.ripple:nth-child(2) {
  -webkit-animation: wobble-2 1s linear;
  animation: wobble-2 1s linear;
}
/* First blob */

@-webkit-keyframes wobble-1 {
  10% {
    -webkit-transform: translate(-1px, 2px) scale(1.2);
  }
  40% {
    -webkit-transform: translate(2px, -2px) scale(1.2);
  }
  100% {
    -webkit-transform: translate(0px, 0px) scale(1);
  }
}
/* Second blob */

@-webkit-keyframes wobble-2 {
  20% {
    -webkit-transform: translate(-3px, 3px) scale(1.08);
  }
  100% {
    -webkit-transform: translate(0px, 0px) scale(1);
  }
}

@keyframes wobble-1 {
  10% {
    transform: translate(-1px, 2px) scale(1.2);
  }
  40% {
    transform: translate(2px, -2px) scale(1.2);
  }
  100% {
    transform: translate(0px, 0px) scale(1);
  }
}
/* Second blob */

@keyframes wobble-2 {
  20% {
    transform: translate(-3px, 3px) scale(1.08);
  }
  100% {
    transform: translate(0px, 0px) scale(1);
  }
}
/* Hamburger icon & Animation */

.hamburger {
  width: 25px;
  height: 3px;
  background: white;
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -12.5px;
  margin-top: -1.5px;
  -webkit-transition: -webkit-transform 200ms;
  transition: transform 200ms;
}

.hamburger-1 {
  -webkit-transform: translate3d(0, -8px, 0);
  transform: translate3d(0, -8px, 0);
}

.hamburger-2 {
  -webkit-transform: translate3d(0, 0, 0);
  transform: translate3d(0, 0, 0);
}

.hamburger-3 {
  -webkit-transform: translate3d(0, 8px, 0);
  transform: translate3d(0, 8px, 0);
}

.cross-left {
  -webkit-transform: translate3d(0, 0, 0) rotate(45deg);
  transform: translate3d(0, 0, 0) rotate(45deg);
}

.cross-hide {
  -webkit-transform: translate3d(0, 0, 0) scale(0.1, 1);
  transform: translate3d(0, 0, 0) scale(0.1, 1);
}

.cross-right {
  -webkit-transform: translate3d(0, 0, 0) rotate(-45deg);
  transform: translate3d(0, 0, 0) rotate(-45deg);
}

.cred {
  font-size: 8pt;
  color: #666464;
  ;
  text-decoration: none;
  text-align: center;
  position: absolute;
  bottom: 25%;
  left: 0;
  right: 0;
}

.cred:hover {
  color: #b4d455;
}

JavaScript

$(function() {
  $('.toggle').click(function() {
    $('.nav-item').toggleClass('slide-out');
    $('.hamburger-1').toggleClass('cross-right');
    $('.hamburger-2').toggleClass('cross-hide');
    $('.hamburger-3').toggleClass('cross-left');
    $('.wobble').addClass('ripple');
    setTimeout(function(){
    $('.wobble').removeClass('ripple');
    }, 1000);
  });
});

Demo

See the Pen Gooey mobile navigation by BjurhagerStudios (@Bjurhager) on CodePen.