ドロップダウンメニューその1
あちこちのサイトを巡って見つけてきた方法。これは親がいくつに増えても対応できるようにJavaスクリプトが書かれている。なるほど!って感じです。(^^)
ドロップダウンのメニューそのものはdivで囲って、消してます。マウスが乗った時の変更は、CSSでつけてます。
HTML
<ul id="dropmenubar"> <li> <a href="#" class="menu" id="menu1" onmouseover="menuopen(1);" onmouseout="menuclosetime();">親1</a> <div class="submenu" id="submenu1" onmouseover="cancelclose()" onmouseout="menuclosetime();"> <a href="#">親1子1</a> <a href="#">親1子2</a> <a href="#">親1子3</a> <a href="#">親1子4</a> </div> </li> <li> <a href="#" class="menu" id="menu2" onmouseover="menuopen(2);" onmouseout="menuclosetime();">親2</a> <div class="submenu" id="submenu2" onmouseover="cancelclose()" onmouseout="menuclosetime();"> <a href="#">親2子1</a> <a href="#">親2子2</a> <a href="#">親2子3</a> <a href="#">親2子4</a> </div> </li> <li> <a href="#" class="menu" id="menu3" onmouseover="menuopen(3);" onmouseout="menuclosetime();">親3</a> <div class="submenu" id="submenu3" onmouseover="cancelclose()" onmouseout="menuclosetime();"> <a href="#">親3子1</a> <a href="#">親3子2</a> <a href="#">親3子3</a> <a href="#">親3子4</a> </div> </li> <li> <a href="#" class="menu" id="menu4" onmouseover="menuopen(4);" onmouseout="menuclosetime();">親4</a> <div class="submenu" id="submenu4" onmouseover="cancelclose()" onmouseout="menuclosetime();"> <a href="#">親4子1</a> <a href="#">親4子2</a> <a href="#">親4子3</a> <a href="#">親4子4</a> </div> </li> </ul>
CSS
#dropmenubar {margin:0; padding:0;} #dropmenubar li {float:left; margin:0; padding:0; list-style: none; font: bold 12px arial;} #dropmenubar li a.menu { display: block; text-align: center; background: #e0e0e0; padding: 4px 10px; margin: 0 1px 0 0; color: #333333; width: 100px; text-decoration: none; } #dropmenubar li a.menu:hover { background: #666666; color: #f8f8f8; } .submenu { background: #b8b8b8; border: 1px solid #333333; visibility: hidden; position: absolute; z-index: 3; } .submenu a { display: block; font: 12px arial; text-align: left; text-decoration: none; padding: 5px; color: #333333; } .submenu a:hover { background: #666666; color: #ffffff; }
JS
/* dropdown */ var TimeOut = 100; var currentLayer = null; var currentitem = null; var currentLayerNum = 0; var noClose = 0; var closeTimer = null; function menuopen(n) { var sub = document.getElementById("submenu" + n); var main = document.getElementById("menu" + n); if(sub) { cancelclose(); sub.style.visibility='visible'; if(currentLayer && (currentLayerNum != n)) currentLayer.style.visibility='hidden'; currentLayer = sub; currentitem = main; currentLayerNum = n; } else if(currentLayer) { currentLayer.style.visibility='hidden'; currentLayerNum = 0; currentitem = null; currentLayer = null; } } function menuclosetime() { closeTimer = window.setTimeout(menuclose, TimeOut); } function cancelclose() { if(closeTimer) { window.clearTimeout(closeTimer); closeTimer = null; } } function menuclose() { if(currentLayer && noClose!=1) { currentLayer.style.visibility='hidden'; currentLayerNum = 0; currentLayer = null; currentitem = null; } else { noClose = 0; } currentLayer = null; currentitem = null; } document.onclick = menuclose;