jQuery
<script type="text/javascript">
$(function(){
$(".dropdown_menu").children("a").on("click" , function(evt){ // .dropdown_menuの子要素のa
//evt.preventDefault(); // aのデフォルトの動作をストップ
evt.stopPropagation(); // aより上の階層はクリックしてないことにする
var $this = $(this); // $(this)は<a href="#">メニュー</a>のこと
$this.parent().siblings("li").children("a").removeClass("open").next().slideUp(300);
if($this.hasClass("open") == true){ // openがあったら
$this.removeClass("open").next().slideUp(300); // next()はaの次の要素、つまりulを閉じる
$("html , body").off("click" , function(){
$this.removeClass("open").next().slideUp(300); // 閉じる動作をoffにする
});
}else{ // openがなかったら(つまりloadした初期の状態でクリックしたら)
$this.addClass("open").next().slideDown(300); // next()はaの次の要素、つまりulを開く
$("html , body").on("click" , function(){ // これがないとhtmlをクリックしても閉じない
$this.removeClass("open").next().slideUp(300); // 閉じる動作をonにする
});
}
});
});
</script>
ボタンをクリックした時点で → 閉じていたら → 開く かつ [htmlをクリックしたら 閉じる]をキャンセル
→ 開いていたら → 閉じる かつ [htmlをクリックしたら 閉じる]
HTML
<div id="navi">
<ul>
<li class="dropdown_menu"><a href="#">メインメニュー1</a> // liにclass="dropdown_menu"
<ul>
<li><a href="#">サブメニュー1</a></li>
<li><a href="#">サブメニュー1</a></li>
<li><a href="#">サブメニュー1</a></li>
<li><a href="#">サブメニュー1</a></li>
<li><a href="#">サブメニュー1</a></li>
</ul>
</li>
<li class="dropdown_menu"><a href="#">メインメニュー2</a>
<ul>
<li><a href="#">サブメニュー2</a></li>
<li><a href="#">サブメニュー2</a></li>
<li><a href="#">サブメニュー2</a></li>
<li><a href="#">サブメニュー2</a></li>
<li><a href="#">サブメニュー2</a></li>
</ul>
</li>
.....
</ul>
</div>
CSS
@charset "utf-8";
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
a{
text-decoration: none;
}
#container{
width: 100%;
height: auto;
}
h1{ margin: 20px auto 20px 20px;}
#navi{
width: 980px;
height: 50px;
margin: 0 auto 0;
background-color: #666;
position: relative; /* サブメニューを前面に出すため */
}
#navi ul{
list-style-type: none;
}
#navi ul li{
float: left;
width: 140px;
height: 50px;
border: 1px solid #fff;
color: #fff;
line-height: 50px;
display: inline-block;
text-align: center;
}
#navi ul li.dropdown_menu a{
display: block;
width: 140px;
height: 49px;
color: #ccc;
}
#navi ul li.dropdown_menu a:hover{
background-color: #999;
}
#navi ul li:first-child{
border-right: 0;
}
#navi ul li + li{
border-right: 0;
}
/* サブメニュー */
#navi ul li > ul{
border: 0;
display: none; /* 最初は非表示 */
}
#navi ul li > ul li{
width: 140px;
height: 50px;
background-color: #666;
margin: 0;
border: 0
}
#main{
width: 980px;
height: auto;
margin: 0 auto 0;
}
pre{
margin: 0;
padding: 0;
}