Skip to main content

Responsive Mega Mega Dropdown Menu for website






Mega Dropdown





A responsive and easy to customise mega-dropdown component.A responsive mega dropdown component with sub-categories. Here is a quick animation we put together to show you our mobile vs desktop approach:











Quick animation








Creating the structure




The HTML is structured in 2 main elements: the <header>, containing the dropdown (.cd-dropdown-wrapper), and the <main> for all the main content.

The .cd-dropdown-wrapper contains a .cd-dropdown-trigger, to trigger the dropdown, and a .cd-dropdown, which is composed of nested unordered lists.





<header>
<div class="cd-dropdown-wrapper">
<a class="cd-dropdown-trigger" href="#0">Dropdown</a>
<nav class="cd-dropdown">
<h2>Title</h2>
<a href="#0" class="cd-close">Close</a>
<ul class="cd-dropdown-content">
<li>
<form class="cd-search">
<input type="search" placeholder="Search...">
</form>
</li>
<li class="has-children">
<a href="#0">Clothing</a>

<ul class="cd-secondary-dropdown is-hidden">
<li class="go-back"><a href="#0">Menu</a></li>
<li class="see-all"><a href="#0">All Clothing</a></li>
<li class="has-children">
<a href="#0">Accessories</a>

<ul class="is-hidden">
<li class="go-back"><a href="#0">Clothing</a></li>
<li class="see-all"><a href="#0">All Accessories</a></li>
<li class="has-children">
<a href="#0">Beanies</a>

<ul class="is-hidden">
<li class="go-back"><a href="#0">Accessories</a></li>
<li class="see-all"><a href="#0">All Benies</a></li>
<li><a href="#0">Caps &amp; Hats</a></li>
<!-- other list items here -->
</ul>
</li>
<li class="has-children">
<a href="#0">Caps &amp; Hats</a>

<ul class="is-hidden">
<li class="go-back"><a href="#0">Accessories</a></li>
<li class="see-all"><a href="#0">All Caps &amp; Hats</a></li>
<li><a href="#0">Beanies</a></li>
<!-- other list items here -->
</ul>
</li>
<li><a href="#0">Glasses</a></li>
<!-- other list items here -->
</ul>
</li>

<li class="has-children">
<!-- other list items here -->
</li>

<li class="has-children">
<!-- other list items here -->
</li>

<li class="has-children">
<!-- other list items here -->
</li>
</ul> <!-- .cd-secondary-dropdown -->
</li> <!-- .has-children -->

<li class="has-children">
<!-- other list items here -->
</li> <!-- .has-children -->

<li class="has-children">
<!-- other list items here -->
</li> <!-- .has-children -->

<li class="cd-divider">Divider</li>

<li><a href="#0">Page 1</a></li>
<!-- other list items here -->

</ul> <!-- .cd-dropdown-content -->
</nav> <!-- .cd-dropdown -->
</div> <!-- .cd-dropdown-wrapper -->
</header>

<main class="cd-main-content">
<!-- your content here -->
</main>





Adding style




For mobile devices, the basic idea was to let the user focus totally on the dropdown content, once it has been activated.

This is why we assigned a fixed position to the dropdown, and set its width and height to 100%. By default, it is hidden right above the viewport (translateY(-100%)). When the user clicks the trigger element, the .dropdown-is-active class is added to the dropdown which is translated back into the viewport.



.cd-dropdown {
position: fixed;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
transform: translateY(-100%);
transition: transform 0.5s;
}
.cd-dropdown.dropdown-is-active {
transform: translateY(0);
}




When user selects a new sublevel in the dropdown, the visible items are translated to the left outside the viewport (using the .move-out class), while the new items slide back into the viewport (removing the class .is-hidden class from their

    parent element).


.cd-dropdown-content.is-hidden, .cd-dropdown-content ul.is-hidden {
/* push the secondary dropdown items to the right */
transform: translateX(100%);
}

.cd-dropdown-content.move-out > li > a, .cd-dropdown-content ul.move-out > li > a {
/* push the dropdown items to the left when secondary dropdown slides in */
transform: translateX(-100%);
}






On bigger devices (viewport width bigger than 1024px), instead, there’s enough space to place content side by side, with no need to replace the visible content.




@media only screen and (min-width: 1024px) {

  .cd-dropdown {

    position: absolute;

    top: 100%;

    /* reset style*/

    height: auto;

    width: auto;

    opacity: 0;

    visibility: hidden;

    transform: translateY(30px);

    transition: opacity 0.3s 0s, visibility 0s 0.3s, transform 0.3s 0s;

  }

  .cd-dropdown.dropdown-is-active {

    visibility: visible;

    opacity: 1;

    transform: translateY(0);

    transition: opacity 0.3s 0s, visibility 0.3s 0s, transform 0.3s 0s;

  }



  .cd-dropdown-content {

    /* reset mobile style */

    position: static;

    height: auto;

    width: 280px;

  }

  .cd-dropdown-content .cd-secondary-dropdown, .cd-dropdown-content .cd-dropdown-gallery, .cd-dropdown-content .cd-dropdown-icons {

    transform: translateX(0);

    left: 100%;

    height: auto;

  }

  .cd-dropdown-content .cd-secondary-dropdown.is-hidden, .cd-dropdown-content .cd-dropdown-gallery.is-hidden, .cd-dropdown-content .cd-dropdown-icons.is-hidden {

    /* reset mobile style */

    transform: translateX(0);

  }

  .cd-dropdown-content > .has-children > ul {

    visibility: hidden;

  }

  .cd-dropdown-content > .has-children:hover > ul {

    /* when hover over .cd-dropdown-content items - show subnavigation */

    visibility: visible;

  }

  .cd-dropdown-content > .has-children:hover > .cd-secondary-dropdown > li > ul {

    /* if .cd-secondary-dropdown is visible - show also subnavigation */

    visibility: visible;

  }

}




Changelog



JUN 17, 2015


  • Bug fixed on mobile version - prevent default when tapping on .has-children direct children




MAY 15, 2015


  • Integrated menu-aid plugin to detect diagonal movement

  • Created the .open-to-left class to open dropdown on the left

  • Added support for laptops with touchscreen




MAY 13, 2015


  • Resource released by CodyHouse














Comments

Popular posts from this blog

Bouncy Content Filter for big Website

This space-saving content filter allows the users to switch from one category to the other in a fancy way! Each click fires the rotation of the gallery images, revealing the items belonging to the selected category. Content filters  are particularly useful for big websites, where each pixel counts. Lets say you are showing the “ last products ” of your e-commerce . How about giving the users the option to switch to the “most popular” products without a page refresh? A good solution could be to hide the “most popular” items right behind the “last products”, then use the power of CSS3 3D Transforms to rotate the items when the user switches from one option to the other. The bounce effect is optional, but you get the idea! The rotation won’t work on older browsers like IE9, but the experience won’t be broken – just a display on/off with no transitions. Lets dive into the code! Creating the structure We wrapped the filter into a <nav> element. The filter structur...

Content slider with Zoom Effect for a predefined area in each slide

Zoom Slider Today’s Blueprint is a simple content slider with depth-like zoom functionality. Each slide has a predefined zoom area that will be used to calculate the appropriate scale value for a fullscreen fill. Once the icon for zooming is clicked, the zoom area as well as the page get scaled, creating the illusion that the viewer is approaching the item. Once the whole page is covered, we show some more details. Navigating the slider will animate the inner parts of the slide, allowing for an independent control of the image area and the title. We are using CSS transitions and dymanic.js for moving the slide elements. Dymanic.js by MichaĆ«l Villar is a JavaScript library to create physics-based animations. Please note that we are using a couple of modern CSS properties, so only contemporary browsers are supported. The HTML <!-- Main container --> <div class="container"> <!-- Blueprint header --> <header class="bp-header cf"> ...

An AJAX Based Shopping Cart with Drap Drop Item Effect

An AJAX Based Shopping Cart In this tutorial we will create an AJAX Based Shopping Cart with Drag and Drop feature.You can easily use this shopping cart in you store.All the products are going to be stored in a MySQL database, with PHP showing and processing the data. So go ahead, download the demo files and start reading. Step 1 – the MySQL Database If you want to set up a working demo, you’ll need to execute the following SQL code in your database manager (e.g. phpMyAdmin). It will set up the table and insert a few products. The code is also available in table.sql in the demo files. table.sql CREATE TABLE IF NOT EXISTS `internet_shop` ( `id` int ( 6 ) NOT NULL auto_increment, `img` varchar ( 32 ) collate utf8_unicode_ci NOT NULL default '' , `name` varchar ( 64 ) collate utf8_unicode_ci NOT NULL default '' , `description` text collate utf8_unicode_ci NOT NULL , `price` double NOT NULL default '0' , PRIMARY K...