ドロップダウン メニュー
JavaScriptを使ったドロップダウンメニューのシンプルバージョンです。
わかりやすくシンプルなコードを心がけて作ってみました。
フォルダを押すとサブメニューが表示されます。
もう一度押すとサブメニューを閉じます。
- メニュー1
- メニュー2
- メニュー3
使用画像
どちらも私が一から作成したものなのでご自由にお使いください。
(image/bcfolder.gif)
(image/bcfile.gif)
html構造部分
onclickとonkeypressは同時に指定することが推奨されているのですが、今回の場合はマウスでクリック以外は想定していないのでonkeypressには何も処理をしないダミー関数を登録しました。
<ul id="dropdownMenu">
<li><span onclick="ddMenu('ddMenu1')"
onkeypress="dummy()">メニュー1</span>
<ul id="ddMenu1" style="display: none;">
<li>サブメニュー1</li>
<li>サブメニュー2</li>
<li>サブメニュー3</li>
</ul>
</li>
<li><span onclick="ddMenu('ddMenu2')"
onkeypress="dummy()">メニュー2</span>
<ul id="ddMenu2" style="display: none;">
<li>サブメニュー1</li>
<li>サブメニュー2</li>
<li>サブメニュー3</li>
</ul>
</li>
<li><span onclick="ddMenu('ddMenu3')"
onkeypress="dummy()">メニュー3</span>
<ul id="ddMenu3" style="display: none;">
<li>サブメニュー1</li>
<li>サブメニュー2</li>
<li>サブメニュー3</li>
</ul>
</li>
</ul>
CSS部分
ulにフォルダ画像を背景として置いた時に最初のulだけIEの後方互換モードでは表示されなかったのでspan要素を追加してそっちに背景画像を置きました。
IEの後方互換モードではheight属性の無い要素にbackgroundを指定するとたまに表示されなくなるバグがあるようなので。h3やh4などでは複数行になることはあまりないのでheightを指定できるのですが、今回みたいにulをネストした場合はheightは指定できないのでspanを入れてそこでheightとbackgroundを指定しました。
@charset "utf-8";
ul#dropdownMenu {
list-style: none;
margin: 12px 0 18px 0;
padding: 0;
}
ul#dropdownMenu li {
margin: 0;
padding: 0;
text-indent: 0;
}
ul#dropdownMenu li span {
height: 18px;
line-height: 18px;
padding-left: 18px;
background: left url(image/bcfolder.gif) no-repeat;
cursor: pointer;
}
ul#dropdownMenu li img {
margin-right: 2px;
}
ul#dropdownMenu li ul {
list-style: none;
margin: 0 0 0 12px;
padding: 0;
}
ul#dropdownMenu li ul li {
height: 18px;
line-height: 18px;
background: left center url(image/bcfile.gif) no-repeat;
text-indent: 18px;
}
JavaScript部分
ddMenu関数は送られてきたIDのdisplayスタイルがnoneならblockに変更、blockならnoneに変更するだけです。
function ddMenu(ddmenu) {
var m = document.getElementById(ddmenu);
if(m.style.display == 'none') {
m.style.display = 'block';
} else if(m.style.display == 'block') {
m.style.display = 'none';
}
return false;
}
function dummy() {
return false;
}
