Mobile-friendly Multi-level Dropdown Navigation With jQuery

File Size: 4.3 KB
Views Total: 5164
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   
Mobile-friendly Multi-level Dropdown Navigation With jQuery

Who doesn't like a good dropdown navigation menu? It feels almost the same as a regular HTML list, however it appears more organized. It's pretty easy to achieve a simple multi-level dropdown without JavaScript, but I wanted to create something mobile friendly and this plugin may be of your interest.

Nav.js is a simple yet customizable jQuery plugin for creating a responsive multi-level dropdown menu on your site. It has the ability to automatically convert the horizontal navbar into a mobile-friendly vertical accordion menu on small screens for better readability. Let's get started.

See Also:

How to use it:

1. Create a nested nav list for the multi-level dropdown menu.

<nav class="jquerynav-wrapper">
  <ul class="jquerynav clearfix">
    <li><a href="">Item 1</a></li>
    <li>
      <a href="">Item 2</a>
      <ul>
        <li> <a href="#content">Sub 1 Item 1</a></li>
        <li><a href="">Sub 1 Item 2</a></li>
        <li><a href="">Sub 1 Item 3</a></li>
        <li><a href="">Sub 1 Item 4</a></li>
      </ul>
    </li>
    <li>
      <a href="">Item 3</a>
      <ul>
        <li><a href="">Sub 1 Item 1</a></li>
        <li>
          <a href="">Sub 1 Item 2</a>
          <ul>
            <li><a href="">Sub 2 Item 1</a></li>
            <li><a href="">Sub 2 Item 2</a></li>
            <li><a href="">Sub 2 Item 3</a></li>
          </ul>
        </li>
        <li>
          <a href="">Sub 1 Item 3</a>
          <ul>
            <li><a href="">Sub 2 Item 1</a></li>
            <li>
              <a href="">Sub 2 Item 2</a>
              <ul>
                <li><a href="">Sub 3 Item 1</a></li>
                <li><a href="">Sub 3 Item 2</a></li>
                <li><a href="">Sub 3 Item 3</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </li>
    <li>
      <a href="">Item 4</a>
      <ul>
        <li><a href="">Sub 1 Item 1</a></li>
        <li>
          <a href="">Sub 1 Item 2</a>
          <ul>
            <li><a href="">Sub 2 Item 1</a></li>
            <li><a href="">Sub 2 Item 2</a></li>
            <li><a href="">Sub 2 Item 3</a></li>
          </ul>
        </li>
        <li>
          <a href="">Sub 1 Item 3</a>
          <ul>
            <li><a href="">Sub 2 Item 1</a></li>
            <li>
              <a href="">Sub 2 Item 2</a>
              <ul>
                <li><a href="">Sub 3 Item 1</a></li>
                <li>
                  <a href="">Sub 3 Item 2</a>
                  <ul>
                    <li><a href="">Sub 1 Item 1</a></li>
                    <li><a href="">Sub 1 Item 2</a></li>
                    <li><a href="">Sub 1 Item 3</a></li>
                  </ul>
                </li>
                <li><a href="">Sub 3 Item 3</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </li>
    <li>
      <a href="">Item 5</a>
      <ul>
        <li><a href="">Sub 1 Item 1</a></li>
        <li>
          <a href="">Sub 1 Item 2</a>
          <ul>
            <li><a href="">Sub 2 Item 1</a></li>
            <li><a href="">Sub 2 Item 2</a></li>
            <li><a href="">Sub 2 Item 3</a></li>
          </ul>
        </li>
        <li>
          <a href="">Sub 1 Item 3</a>
          <ul>
            <li><a href="">Sub 2 Item 1</a></li>
            <li>
              <a href="">Sub 2 Item 2</a>
              <ul>
                <li><a href="">Sub 3 Item 1</a></li>
                <li>
                  <a href="">Sub 3 Item 2</a>
                  <ul>
                    <li><a href="">Sub 1 Item 1</a></li>
                    <li><a href="">Sub 1 Item 2</a></li>
                    <li><a href="">Sub 1 Item 3</a></li>
                  </ul>
                </li>
                <li><a href="">Sub 3 Item 3</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</nav>

2. The main CSS styles for the multi-level dropdown menu.

ul {
  list-style: none;
}

/* dropdown menu */
.jquerynav {
  background: #ccc;
  width: 100%;
  margin: 10px 0;
  list-style: none;
}

.jquerynav:after {
  display: table;
  content: "";
  clear: both;
}

.jquerynav li {
  position: relative;
}

.jquerynav li a {
  color: #444;
  display: block;
  font: normal 12px/1.2 Arial, Helvetica, sans-serif;
  text-decoration: none;
  padding: 15px 35px 15px 25px;
  white-space: nowrap;
}

.jquerynav li a:hover,
.jquerynav li.current a {
  color: #888;
}

/* first level */
.jquerynav>li {
  float: left;
  display: inline;
  border-right: 1px solid #ddd;
}

/* second level */
.jquerynav ul {
  display: none;
  position: absolute;
  background: #ddd;
  min-width: 200px;
  z-index: 2;
}

.jquerynav ul li {
  float: none;
}

/* third level */
.jquerynav ul ul {
  left: 100%;
  top: 0;
}

.jquerynav > li:last-child ul ul {
  left: -100%;
}

.jquerynav li:hover>ul {
  display: block;
}

.touch-block {
  top: 5px;
  right: 5px;
  padding: 8px 12px;
  position: absolute;
  z-index: 5;
  content: "▼";
  color: #aaa;
  text-align: center;
  cursor: pointer;
}

3. Style the navigation menu on mobile view.

@media only screen and ( max-width: 480px) {
  .touch-block {
    background-color: #c8c8c8;
  }
  /* first level */
  .jquerynav > li,
  .jquerynav > .page_item {
    border-bottom: 1px solid #bbb;
    border-right: none;
  }
  .jquerynav > li:last-child {
    border-bottom: none;
  }
  .jquerynav li {
    width: 100%;
  }
  /* second level */
  .jquerynav li:hover>ul {
    display: none;
  }
  .jquerynav ul {
    position: relative;
  }
  /* third level */
  .jquerynav ul ul {
    left: 0%;
    top: auto;
  }
  .jquerynav > li:last-child ul ul {
    left: 0;
  }
}

4. Load jQuery library and the Nav.js plugin right before the closing body tag.

<script src="/path/to/cdn/jquery.min.js"></script>
<script src="/path/to/js/jQueryNav.js"></script>

5. Call the function jQueryNav on the nav list. That's it.

(function($){
  $('.jquerynav').jQueryNav();
})(jQuery);

6. Available plugin options.

$('.jquerynav').jQueryNav({

  // CSS class of the dropdown arrow
  'arrowclass': 'touch-block',

  // active class
  'activeclass': 'active',

  // in milliseconds
  'holdtime' :1000,
  'slidetime' : 100,

  // enable responsive
  'responsive': true,

  // switch to mobile version at 500px
  'responsiveat': 500,

});

See It In Action


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