<div class="menu-container">
<div class="menu">
<ul>
<li><a href="#">Home</a></li>
<li><a href="http://marioloncarek.com">About</a>
<ul>
<li><a href="#">School</a>
<ul>
<li><a href="#">Lidership</a></li>
<li><a href="#">History</a></li>
<li><a href="#">Locations</a></li>
<li><a href="#">Careers</a></li>
</ul>
</li>
<li><a href="#">Study</a>
<ul>
<li><a href="#">Undergraduate</a></li>
<li><a href="#">Masters</a></li>
<li><a href="#">International</a></li>
<li><a href="#">Online</a></li>
</ul>
</li>
<li><a href="#">Research</a>
<ul>
<li><a href="#">Undergraduate research</a></li>
<li><a href="#">Masters research</a></li>
<li><a href="#">Funding</a></li>
</ul>
</li>
<li><a href="#">Something</a>
<ul>
<li><a href="#">Sub something</a></li>
<li><a href="#">Sub something</a></li>
<li><a href="#">Sub something</a></li>
<li><a href="#">Sub something</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">News</a>
<ul>
<li><a href="#">Today</a></li>
<li><a href="#">Calendar</a></li>
<li><a href="#">Sport</a></li>
</ul>
</li>
<li><a href="http://marioloncarek.com">Contact</a>
<ul>
<li><a href="#">School</a>
<ul>
<li><a href="#">Lidership</a></li>
<li><a href="#">History</a></li>
<li><a href="#">Locations</a></li>
<li><a href="#">Careers</a></li>
</ul>
</li>
<li><a href="#">Study</a>
<ul>
<li><a href="#">Undergraduate</a></li>
<li><a href="#">Masters</a></li>
<li><a href="#">International</a></li>
<li><a href="#">Online</a></li>
</ul>
</li>
<li><a href="#">Study</a>
<ul>
<li><a href="#">Undergraduate</a></li>
<li><a href="#">Masters</a></li>
<li><a href="#">International</a></li>
<li><a href="#">Online</a></li>
</ul>
</li>
<li><a href="#">Empty sub</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="description">
<h4><a href="https://github.com/marioloncarek/megamenu-js" target="_blank">Star and fork on github</a></h4>
<iframe src="https://ghbtns.com/github-btn.html?user=marioloncarek&repo=megamenu-js&type=star&count=true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe>
<iframe src="https://ghbtns.com/github-btn.html?user=marioloncarek&repo=megamenu-js&type=fork&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe>
<h3>megamenu.js - Last responsive megamenu you'll ever need</h3>
<h5>Features:</h5>
<ul>
<li>IE8 Compatible (jquery animated)</li>
<li>No classes! (for dropdowns)</li>
<li>Smart - knows when to show megamenu</li>
<li>100% responsive</li>
<li>Seamless wordpress integration</li>
<li>Open source!</li>
</ul>
</div>
/*
- Name: megamenu.js - style.css
- Version: 1.0
- Latest update: 29.01.2016.
- Author: Mario Loncarek
- Author web site: http://marioloncarek.com
*/
/* ––––––––––––––––––––––––––––––––––––––––––––––––––
Body - not related to megamenu
–––––––––––––––––––––––––––––––––––––––––––––––––– */
body {
font-family: 'Source Sans Pro', sans-serif;
}
* {
box-sizing: border-box;
}
a {
color: #333;
}
.description {
width: 80%;
margin: 50px auto;
}
/* ––––––––––––––––––––––––––––––––––––––––––––––––––
megamenu.js STYLE STARTS HERE
–––––––––––––––––––––––––––––––––––––––––––––––––– */
/* ––––––––––––––––––––––––––––––––––––––––––––––––––
Screen style's
–––––––––––––––––––––––––––––––––––––––––––––––––– */
.menu-container {
width: 80%;
margin: 0 auto;
background: #e9e9e9;
}
.menu-mobile {
display: none;
padding: 20px;
&:after {
content: "\f394";
font-family: "Ionicons";
font-size: 2.5rem;
padding: 0;
float: right;
position: relative;
top: 50%;
transform: translateY(-25%);
}
}
.menu-dropdown-icon {
&:before {
content: "\f489";
font-family: "Ionicons";
display: none;
cursor: pointer;
float: right;
padding: 1.5em 2em;
background: #fff;
color: #333;
}
}
.menu {
> ul {
margin: 0 auto;
width: 100%;
list-style: none;
padding: 0;
position: relative;
//position: relative;
/* IF .menu position=relative -> ul = container width, ELSE ul = 100% width */
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
&:before,
&:after {
content: "";
display: table;
}
&:after {
clear: both;
}
> li {
float: left;
background: #e9e9e9;
padding: 0;
margin: 0;
a {
text-decoration: none;
padding: 1.5em 3em;
display: block;
}
&:hover {
background: #f0f0f0;
}
> ul {
display: none;
width: 100%;
background: #f0f0f0;
padding: 20px;
position: absolute;
z-index: 99;
left: 0;
margin: 0;
list-style: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
&:before,
&:after {
content: "";
display: table;
}
&:after {
clear: both;
}
> li {
margin: 0;
padding-bottom: 0;
list-style: none;
width: 25%;
background: none;
float: left;
a {
color: #777;
padding: .2em 0;
width: 95%;
display: block;
border-bottom: 1px solid #ccc;
}
> ul {
display: block;
padding: 0;
margin: 10px 0 0;
list-style: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
&:before,
&:after {
content: "";
display: table;
}
&:after {
clear: both;
}
> li {
float: left;
width: 100%;
padding: 10px 0;
margin: 0;
font-size: .8em;
a {
border: 0;
}
}
}
}
&.normal-sub {
width: 300px;
left: auto;
padding: 10px 20px;
> li {
width: 100%;
a {
border: 0;
padding: 1em 0;
}
}
}
}
}
}
}
/* ––––––––––––––––––––––––––––––––––––––––––––––––––
Mobile style's
–––––––––––––––––––––––––––––––––––––––––––––––––– */
@media only screen and (max-width: 959px) {
.menu-container {
width: 100%;
}
.menu-mobile {
display: block;
}
.menu-dropdown-icon {
&:before {
display: block;
}
}
.menu {
> ul {
display: none;
> li {
width: 100%;
float: none;
display: block;
a {
padding: 1.5em;
width: 100%;
display: block;
}
> ul {
position: relative;
&.normal-sub {
width: 100%;
}
> li {
float: none;
width: 100%;
margin-top: 20px;
&:first-child {
margin: 0;
}
> ul {
position: relative;
> li {
float: none;
}
}
}
}
}
}
.show-on-mobile {
display: block;
}
}
}
View Compiled
/*global $ */
$(document).ready(function() {
"use strict";
$('.menu > ul > li:has( > ul)').addClass('menu-dropdown-icon');
//Checks if li has sub (ul) and adds class for toggle icon - just an UI
$('.menu > ul > li > ul:not(:has(ul))').addClass('normal-sub');
//Checks if drodown menu's li elements have anothere level (ul), if not the dropdown is shown as regular dropdown, not a mega menu (thanks Luka Kladaric)
$(".menu > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>");
//Adds menu-mobile class (for mobile toggle menu) before the normal menu
//Mobile menu is hidden if width is more then 959px, but normal menu is displayed
//Normal menu is hidden if width is below 959px, and jquery adds mobile menu
//Done this way so it can be used with wordpress without any trouble
$(".menu > ul > li").hover(function(e) {
if ($(window).width() > 943) {
$(this).children("ul").stop(true, false).fadeToggle(150);
e.preventDefault();
}
});
//If width is more than 943px dropdowns are displayed on hover
$(".menu > ul > li").click(function() {
if ($(window).width() <= 943) {
$(this).children("ul").fadeToggle(150);
}
});
//If width is less or equal to 943px dropdowns are displayed on click (thanks Aman Jain from stackoverflow)
$(".menu-mobile").click(function(e) {
$(".menu > ul").toggleClass('show-on-mobile');
e.preventDefault();
});
//when clicked on mobile-menu, normal menu is shown as a list, classic rwd menu story (thanks mwl from stackoverflow)
});
This Pen doesn't use any external CSS resources.