Index |
HOME > プログラムTOP > JavaScript |
|||||||||||||||||||||||||||||
メニュー三態(3) : ナビゲーションメニュー
JavaScriptの実用的なTIPS集です。ここでは、JavaScriptでの使用を前提としたメニューのうち、縦または横に項目を並べるナビゲーション・メニューを扱います。横に並列させたものは、一般に、ナビゲーション・バーと呼ばれます。
sasaraan programming ![]() Exposition ■CSSのみのメニュー
ナビゲーションメニューは、スクリプトを使わなくとも、CSSだけで簡単に実現できます。通常は table か li 要素で作成します。以下は li 要素で作成するサンプルです。 table を利用する例は、本ページのブロック・メニューの項を参考にしてください。
/* CSS ソース */
<style type="text/css"><!--
/* ナビゲーションバー用 */
ul.navibar {list-style:none; margin-left:0;}
.navibar li {display:inline;}
.navibar li a {padding:0.5ex 1em; text-decoration:none;}
.navibar li a:link {color:white; background-color:green;}
.navibar li a:visited {color:white; background-color:green;}
.navibar li a:active {color:white; background-color:lime;}
.navibar li a:hover {color:white; background-color:blue;}
--></style>
<!-- HTMLソース -->
<ul class="navibar">
<li><a href="page1.html">PAGE 1</a>
<li><a href="page2.html">PAGE 2</a>
<li><a href="page3.html">PAGE 3</a>
<li><a href="page4.html">PAGE 4</a>
</ul>
以上のように、li 要素を使うと、ナビゲーションバーが簡単につくれます。スタイルシートの display プロパティに 'inline' を指定して横並びにさせ、余白や色を設定するだけで済みます。ただ、IE5.0 では li 要素への padding は無効になるようで、思った通りの表示にはなりません。したがって IE5.5 以上、NN6 以上が対象となります。 ■スクリプトの活用
以下は、table と JavaScript で擬似的にリンクをつくり出す例です。click イベントを活用して、引数にリンク先を渡してページを移動させます(TD_Click 関数)。ここでは背景色を変更しているだけですが、スクリプトを使うと、複数のイメージを切り替えることが可能となります。
// JavaScript ソース
// SetTDStyle 関数 : td 要素のスタイルを設定します
// ... 引数 idTD : td 要素の id
// ... 引数 strMode ... 状態を示す文字列('over':mouseover時、'out':mouseout時)
function SetTDStyle(idTD, strMode)
{
if (!document.getElementById) return;
var objTD = document.getElementById(idTD);
if (strMode == "over") {
objTD.style.color = "white";
objTD.style.backgroundColor = "blue";
objTD.style.cursor = "pointer";
window.status = objTD.name;
} else if (strMode == "out") {
objTD.style.color = "white";
objTD.style.backgroundColor = "green";
objTD.style.cursor = "default";
window.status = "";
}
}
// TD_Click関数 : tdオブジェクトのclickイベントに対応してページを移動させます
// ... 引数 strURL : ページの場所
function TD_Click(strURL)
{
document.location = strURL;
}
/* CSS ソース */
<style type="text/css"><!--
/* ナビゲーションバー用 */
table.navibar {border:0; width:24em; font-size:100%;}
.navibar td {border:0; text-align:center;}
--></style>
<!-- HTMLソース -->
<body onload="SetTDStyle('td1','out'), SetTDStyle('td2','out'),
SetTDStyle('td3','out'), SetTDStyle('td4','out')">
...
<table class="navibar">
<tr>
<td id="td1" name="page1.html"
onmouseover="SetTDStyle('td1','over')" onmouseout="SetTDStyle('td1','out')"
onclick="TD_Click(name)">PAGE 1
<td id="td2" name="page2.html"
onmouseover="SetTDStyle('td2','over')" onmouseout="SetTDStyle('td2','out')"
onclick="TD_Click(name)">PAGE 2
<td id="td3" name="page3.html"
onmouseover="SetTDStyle('td3','over')" onmouseout="SetTDStyle('td3','out')"
onclick="TD_Click(name)">PAGE 3
<td id="td4" name="page4.html"
onmouseover="SetTDStyle('td4','over')" onmouseout="SetTDStyle('td4','out')"
onclick="TD_Click(name)">PAGE 4
</tr>
</table>
この例では、リンク先がステータスバーに自動表示されません。表示させたい場合は、関数内で window オブジェクトの status プロパティに文字列を指定する必要があります。この時、本来の使い方とは異なりますが、name 属性にリンク先を格納しておいて、SetTDStyle 関数で取り出すようにしています。
■ブロック・メニュー
縦に並べるナビゲーションメニューのサンプルです。CSSのみでスクリプトを使わない例だけを挙げておきます。
/* CSSソース */
table.listmenu {margin:1ex; border:0; width:8em; font-size:100%;}
.listmenu td {text-align:center; background-color:silver;}
.listmenu a {display:block; width:100%; text-decoration:none;}
.listmenu a:link {color:white; background-color:gray;}
.listmenu a:visited {color:white; background-color:silver;}
.listmenu a:active {color:white; background-color:green;}
.listmenu a:hover {color:white; background-color:blue;}
<!-- HTMLソース -->
<table class="listmenu">
<tr><td><strong>MENU</strong></tr>
<tr><td><a href="page1.html">PAGE 1</a></tr>
<tr><td><a href="page2.html">PAGE 2</a></tr>
<tr><td><a href="page3.html">PAGE 3</a></tr>
<tr><td><a href="page4.html">PAGE 4</a></tr>
</table>
table を使って、各メニュー項目を縦に並べればリスト式のメニューをつくることができます。a 要素のdisplay プロパティに 'block' を指定する点がポイントとなります。
|
||||||||||||||||||||||||||||||
www.sasaraan.net |
(c) morijoh |