
コンテンツが多い場合、それを効果的に整理する方法としてmegamenuを使用することがよくあるのでメモします。
今回はスタンダードタイプと、メガメニュー内でタブ切り替えするタイプをまとめました。
スタンダードタイプ

javascript
$(document).ready(function () {
"use strict";
$('.menu > ul > li:has( > ul)').addClass('menu-dropdown-icon');
$('.menu > ul > li > ul:not(:has(ul))').addClass('normal-sub');
$(".menu > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>");
$(".menu > ul > li").hover(
function (e) {
if ($(window).width() > 1010) {
$(this).children("ul").fadeIn(150);
e.preventDefault();
}
}, function (e) {
if ($(window).width() > 1010) {
$(this).children("ul").fadeOut(150);
e.preventDefault();
}
}
);
$(document).on('click', function(e){
if($(e.target).parents('.menu').length === 0)
$(".menu > ul").removeClass('show-on-mobile');
});
$(".menu > ul > li").click(function() {
var thisMenu = $(this).children("ul");
var prevState = thisMenu.css('display');
$(".menu > ul > li > ul").fadeOut();
if ($(window).width() < 943) {
if(prevState !== 'block')
thisMenu.fadeIn(150);
}
});
$(".menu-mobile").click(function (e) {
$(".menu > ul").toggleClass('show-on-mobile');
e.preventDefault();
});
});
基本プラグインにはレスポンシブも含まれているので便利です。
css
.menu-container {
width: 100%;
margin: 0 auto;
background: #e9e9e9;
}
.menu-mobile {
display: none;
padding: 20px;
}
.menu-mobile:after {
content: "\f394";
font-family: "Ionicons";
font-size: 2.5rem;
padding: 0;
float: right;
position: relative;
top: 50%;
-webkit-transform: translateY(-25%);
-ms-transform: translateY(-25%);
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;
box-sizing: border-box;
}
.menu > ul:before,
.menu > ul:after {
content: "";
display: table;
}
.menu > ul:after {
clear: both;
}
.menu > ul > li {
float: left;
background: #e9e9e9;
padding: 0;
margin: 0;
}
.menu > ul > li a {
text-decoration: none;
padding: 1.5em 3em;
display: block;
}
.menu > ul > li:hover {
background: #f0f0f0;
}
.menu > ul > li > ul {
display: none;
width: 100%;
background: #f0f0f0;
padding: 20px;
position: absolute;
z-index: 99;
left: 0;
margin: 0;
list-style: none;
box-sizing: border-box;
}
.menu > ul > li > ul:before,
.menu > ul > li > ul:after {
content: "";
display: table;
}
.menu > ul > li > ul:after {
clear: both;
}
.menu > ul > li > ul > li {
margin: 0;
padding-bottom: 0;
list-style: none;
width: 25%;
background: none;
float: left;
}
.menu > ul > li > ul > li a {
color: #777;
padding: .2em 0;
width: 95%;
display: block;
border-bottom: 1px solid #ccc;
}
.menu > ul > li > ul > li > ul {
display: block;
padding: 0;
margin: 10px 0 0;
list-style: none;
box-sizing: border-box;
}
.menu > ul > li > ul > li > ul:before,
.menu > ul > li > ul > li > ul:after {
content: "";
display: table;
}
.menu > ul > li > ul > li > ul:after {
clear: both;
}
.menu > ul > li > ul > li > ul > li {
float: left;
width: 100%;
padding: 10px 0;
margin: 0;
font-size: .8em;
}
.menu > ul > li > ul > li > ul > li a {
border: 0;
}
.menu > ul > li > ul.normal-sub {
width: 300px;
left: auto;
padding: 10px 20px;
}
.menu > ul > li > ul.normal-sub > li {
width: 100%;
}
.menu > ul > li > ul.normal-sub > li a {
border: 0;
padding: 1em 0;
}
html
<div class="menu-container"> <div class="menu"> <ul> <li><a href="#">HOME</a></li> <li><a href="#">MENU1</a> <ul> <li><a href="#">SUBMENU1</a> <ul> <li><a href="#">SUBMENU1_1</a></li> <li><a href="#">SUBMENU1_2</a></li> <li><a href="#">SUBMENU1_3</a></li> <li><a href="#">SUBMENU1_4</a></li> </ul> </li> <li><a href="#">SUBMENU2</a> <ul> <li><a href="#">SUBMENU2_1</a></li> <li><a href="#">SUBMENU2_2</a></li> <li><a href="#">SUBMENU2_3</a></li> <li><a href="#">SUBMENU2_4</a></li> </ul> </li> <li><a href="#">SUBMENU3</a> <ul> <li><a href="#">SUBMENU3_1</a></li> <li><a href="#">SUBMENU3_2</a></li> <li><a href="#">SUBMENU3_3</a></li> </ul> </li> <li><a href="#">SUBMENU4</a> <ul> <li><a href="#">SUBMENU4_1</a></li> <li><a href="#">SUBMENU4_2</a></li> <li><a href="#">SUBMENU4_3</a></li> <li><a href="#">SUBMENU4_4</a></li> </ul> </li> </ul> </li> <li><a href="#">MENU2</a> <ul> <li><a href="#">SUBMENU1</a></li> <li><a href="#">SUBMENU2</a></li> <li><a href="#">SUBMENU3</a></li> </ul> </li> <li><a href="#">MENU3</a> <ul> <li><a href="#">SUBMENU1</a> <ul> <li><a href="#">SUBMENU1_1</a></li> <li><a href="#">SUBMENU1_2</a></li> <li><a href="#">SUBMENU1_3</a></li> <li><a href="#">SUBMENU1_4</a></li> </ul> </li> <li><a href="#">SUBMENU2</a> <ul> <li><a href="#">SUBMENU2_1</a></li> <li><a href="#">SUBMENU2_2</a></li> <li><a href="#">SUBMENU2_3</a></li> <li><a href="#">SUBMENU2_4</a></li> </ul> </li> <li><a href="#">SUBMENU3</a> <ul> <li><a href="#">SUBMENU3_1</a></li> <li><a href="#">SUBMENU3_2</a></li> <li><a href="#">SUBMENU3_3</a></li> </ul> </li> <li><a href="#">SUBMENU4</a></li> </ul> </li> </ul> </div> </div>
タブ切り替えタイプ

メガメニューを開いた中に、子要素をhoverすると孫要素が表示されるタイプです。megamenu.jsにそのギミックを追加します。
javascript
$(document).ready(function () {
"use strict";
$('.menu > ul > li:has( > div.tabmenu)').addClass('menu-dropdown-icon');
$('.menu > ul > li>div.tabmenu:not(:has(ul))').addClass('normal-sub');
$(".menu > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>");
$(".menu > ul > li").hover(
function (e) {
if ($(window).width() > 1010) {
$(this).children("div").fadeIn(150);
e.preventDefault();
}
}, function (e) {
if ($(window).width() > 1010) {
$(this).children("div").fadeOut(150);
e.preventDefault();
}
}
);
$(document).on('click', function(e){
if($(e.target).parents('.menu').length === 0)
$(".menu > ul").removeClass('show-on-mobile');
});
$(".menu > ul > li").click(function() {
var thisMenu = $(this).children("div.tabmenu");
var prevState = thisMenu.css('display');
$(".menu > ul > li > div.tabmenu").fadeOut();
if ($(window).width() < 943) {
if(prevState !== 'block')
thisMenu.fadeIn(150);
}
});
$(".menu-mobile").click(function (e) {
$(".menu > ul").toggleClass('show-on-mobile');
e.preventDefault();
});
});
//ここに追加
$(function() {
$('.content div.hide').hide();
$('.tab li#select').addClass('select');
$('.tabmenu .tab li').on('mouseover',function(e) {
var tabnum = $('.tab li').index(this);
$('.content div').hide().eq(tabnum).show();
$('.tab li').removeClass('select');
$(this).addClass('select')
});
$('.tabmenu').on('mouseleave',function(e) {
$('.content div.active').show();
$('.content div.hide').hide();
$('.tab li').removeClass('select');
$('.tab li#select').addClass('select');
});
});
css
.menu-container {
width: 100%;
margin: 0 auto;
background: #e9e9e9;
}
.menu-mobile {
display: none;
padding: 20px;
}
.menu-mobile:after {
content: "\f394";
font-family: "Ionicons";
font-size: 2.5rem;
padding: 0;
float: right;
position: relative;
top: 50%;
-webkit-transform: translateY(-25%);
-ms-transform: translateY(-25%);
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;
box-sizing: border-box;
}
.menu > ul:before,
.menu > ul:after {
content: "";
display: table;
}
.menu > ul:after {
clear: both;
}
.menu > ul > li {
float: left;
background: #e9e9e9;
padding: 0;
margin: 0;
}
.menu > ul > li a {
text-decoration: none;
padding: 1.5em 3em;
display: block;
}
.menu > ul > li:hover {
background: #f0f0f0;
}
.menu > ul > li > div.tabmenu {
display: none;
width: 100%;
background: #f0f0f0;
padding: 20px;
position: absolute;
z-index: 99;
left: 0;
margin: 0;
list-style: none;
box-sizing: border-box;
}
.tabmenu {
width: 60%;
}
.tab {
overflow: hidden;
margin: 0;
padding: 0;
list-style: none;
}
.tab li {
cursor: pointer;
display: inline-block;
width: auto;
padding: .3em;
font-weight: bold;
}
.tab li.select{
border-bottom: solid 4px #fdbb30;
}
.content div {
height: auto;
padding: .6em;
border: solid 1px #ccc;
overflow:hidden;
zoom:1;
}
.hide {
display: none;
}
.content a {
display: block;
float:left;
padding-right:10px;
}
html
<div class="menu-container"> <div class="menu"> <ul> <li><a href="#">HOME</a></li> <li><a href="#">MENU1</a> <div class="tabmenu"> <ul class="tab"> <li id="select">MENU1TAB1</li> <li>MENU1TAB2</li> <li>MENU1TAB3</li> </ul> <div class="content"> <div class="active"><a href="#">LINK1</a><a href="#">LINK1</a><a href="#">LINK1</a><a href="#">LINK1</a></div> <div class="hide"><a href="#">LINK2</a><a href="#">LINK2</a><a href="#">LINK2</a><a href="#">LINK2</a></div> <div class="hide"><a href="#">LINK3</a><a href="#">LINK3</a><a href="#">LINK3</a><a href="#">LINK3</a></div> </div> </div> </li> <li><a href="#">MENU2</a> <div class="tabmenu"> <ul class="tab"> <li id="select">MENU2TAB1</li> <li>MENU2TAB2</li> <li>MENU2TAB3</li> <li>MENU2TAB4</li> </ul> <div class="content"> <div class="active"><a href="#">LINK1</a><a href="#">LINK1</a><a href="#">LINK1</a><a href="#">LINK1</a></div> <div class="hide"><a href="#">LINK2</a><a href="#">LINK2</a><a href="#">LINK2</a><a href="#">LINK2</a></div> <div class="hide"><a href="#">LINK3</a><a href="#">LINK3</a><a href="#">LINK3</a><a href="#">LINK3</a></div> <div class="hide"><a href="#">LINK4</a><a href="#">LINK4</a><a href="#">LINK4</a><a href="#">LINK4</a></div> </div> </div> </li> </ul> </div> </div>
タブ切り替えタイプは結構骨が折れました…