Touch Swipeable Sidebar Menu with jQuery and CSS3

Touch Swipeable Sidebar Menu with jQuery and CSS3
File Size: 2.27 KB
Views Total:
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   

A mobile friendly off-canvas side navigation built with jQuery and CSS that allows you to reveal and hide the side menu with touch swipe events using jQuery touchSwipe plugin.

How to use it:

1. Create a side menu for your web page.

<div id="sidebar">
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">Blog</a></li>
    <li><a href="#">Contact</a></li>
    <li><a href="#">About</a></li>
  </ul>
</div>

2. Create a hamburger toggle which allows the visitor to open / close the side menu by clicking.

<a href="#" data-toggle=".container" id="sidebar-toggle"> 
  <span class="bar"></span> 
  <span class="bar"></span> 
  <span class="bar"></span> 
</a>

3. Create an empty element for the swipe area.

<div class="swipe-area"></div>

4. Then wrap them with your main site content into a container. The full markup structure should be like this:

<div class="container">
  <div id="sidebar">
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">Blog</a></li>
      <li><a href="#">Contact</a></li>
      <li><a href="#">About</a></li>
    </ul>
  </div>
  <div class="main-content">
    <div class="swipe-area"></div>
    <a href="#" data-toggle=".container" id="sidebar-toggle"> 
      <span class="bar"></span> 
      <span class="bar"></span> 
      <span class="bar"></span> 
    </a>
    <div class="content">
      ... Main Content ...
  </div>
</div>

5. The core CSS / CSS3 styles.

body,
html {
  height: 100%;
  margin: 0;
  overflow: hidden;
  font-family: helvetica;
  font-weight: 100;
}

.container {
  position: relative;
  height: 100%;
  width: 100%;
  left: 0;
  -webkit-transition: left 0.4s ease-in-out;
  -moz-transition: left 0.4s ease-in-out;
  -ms-transition: left 0.4s ease-in-out;
  -o-transition: left 0.4s ease-in-out;
  transition: left 0.4s ease-in-out;
}

.container.open-sidebar { left: 240px; }

.swipe-area {
  position: absolute;
  width: 50px;
  left: 0;
  top: 0;
  height: 100%;
  background: #f3f3f3;
  z-index: 0;
}

#sidebar {
  background: #DF314D;
  position: absolute;
  width: 240px;
  height: 100%;
  left: -240px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}

#sidebar ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

#sidebar ul li { margin: 0; }

#sidebar ul li a {
  padding: 15px 20px;
  font-size: 16px;
  font-weight: 100;
  color: white;
  text-decoration: none;
  display: block;
  border-bottom: 1px solid #C9223D;
  -webkit-transition: background 0.3s ease-in-out;
  -moz-transition: background 0.3s ease-in-out;
  -ms-transition: background 0.3s ease-in-out;
  -o-transition: background 0.3s ease-in-out;
  transition: background 0.3s ease-in-out;
}

#sidebar ul li:hover a { background: #C9223D; }

.main-content {
  width: 100%;
  height: 100%;
  padding: 10px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  position: relative;
}

.main-content .content {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  padding-left: 60px;
  width: 100%;
}

.main-content .content h1 { font-weight: 100; }

.main-content .content p {
  width: 100%;
  line-height: 160%;
}

.main-content #sidebar-toggle {
  background: #DF314D;
  border-radius: 3px;
  display: block;
  position: relative;
  padding: 10px 7px;
  float: left;
}

.main-content #sidebar-toggle .bar {
  display: block;
  width: 18px;
  margin-bottom: 3px;
  height: 2px;
  background-color: #fff;
  border-radius: 1px;
}

.main-content #sidebar-toggle .bar:last-child { margin-bottom: 0; }

6. Load the necessary jQuery library and jQuery touchSwipe plugin in the web page.

<script src="jquery-2.1.4.min.js"></script> 
<script src="jquery.touchSwipe.min.js"></script> 

7. Enable the swipeable side menu.

$(window).load(function(){
  $("[data-toggle]").click(function() {
    var toggle_el = $(this).data("toggle");
    $(toggle_el).toggleClass("open-sidebar");
  });

  $(".swipe-area").swipe({
    swipeStatus:function(event, phase, direction, distance, duration, fingers)
      {
        if (phase=="move" && direction =="right") {
           $(".container").addClass("open-sidebar");
           return false;
        }
        if (phase=="move" && direction =="left") {
           $(".container").removeClass("open-sidebar");
           return false;
        }
      }
  }); 
});

This awesome jQuery plugin is developed by ElenaDroueva. For more Advanced Usages, please check the demo page or visit the official website.