ツリー型メニューについて

このQ&Aのポイント
  • 社内のシステムのマニュアルをhtmlで作ることになりました。左右2つのフレームにわけて左200ピクセルをメニューにしました。
  • ツリー型のメニューを展開した際に、フレームの切れ目でメニューが見えなくなる問題が発生しました。
  • 幅を広くしたくないので、ツリー型メニューをすぐ下に展開させる方法を教えてください。
回答を見る
  • ベストアンサー

ツリー型メニューについて

社内のシステムのマニュアルをhtmlで作ることになりました。 左右2つのフレームにわけて左200ピクセルをメニューにしました。 メニューがこまかく、多くなりそうなので、ツリー型(クリックしなくても、 マウスを乗せるだけで展開するもの)にしようと思ったのですが、 展開した2段目のメニューが、フレームで切られて見えません(T_T) ●●●●にマウスを乗せると・・・ ●●●●┳page1 ▽▽▽▽┣page2 ■■■■┣page3     ┗page4 ↑この辺に、ボーダーがきてしまいます。 あまりメニュー幅を広くしたくないので、 ●●●● ▽┣page1 ■┣page2  ┣page3  ┗page4 こんな風に、すぐ下に展開させたいのですが、どうしたらいいでしょうか? よろしくご指導お願いします。

noname#92489
noname#92489

質問者が選んだベストアンサー

  • ベストアンサー
  • Spur
  • ベストアンサー率25% (453/1783)
回答No.2

表示の部分を画像にして、ロールオーバー処理をすれば実現できます。 Scriptはここには書けないくらい長くなりますが、簡単に書けば次のような感じです。 <SCRIPT LANGUAGE="JavaScript"> <!-- var toppath="http://www.xxxx.xx.jp/xxxxxx"; function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_findObj(n, d) { //v4.0 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && document.getElementById) x=document.getElementById(n); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } //--> </SCRIPT> これをヘッダー部分に用意し、あとは、「pege1」などのメニュー部分を、テーブルにして↓こんな感じで作ります。 <TD WIDTH="3%"><A HREF="page1.htm"><IMG BORDER="0" SRC="images/btn_1.gif" name="page1" id="pege1" onMouseOver="showMenu(event)" onMouseOut="hideMenu(event)"></A></TD> <TD WIDTH="3%"><A HREF="page2.htm"><IMG BORDER="0" SRC="images/btn_2.gif" name="page2" id="pege2" onMouseOver="showMenu(event)" onMouseOut="hideMenu(event)"></A></TD> <TD WIDTH="3%"><A HREF="page3.htm"><IMG BORDER="0" SRC="images/btn_3.gif" name="page3" id="pege3" onMouseOver="showMenu(event)" onMouseOut="hideMenu(event)"></A></TD> <TD WIDTH="3%"><A HREF="pege4.htm"><IMG BORDER="0" SRC="images/btn_4.gif" name="page4" id="pege4" onMouseOver="showMenu(event)" onMouseOut="hideMenu(event)"></A></TD>

noname#92489
質問者

お礼

ありがとうございます。 なるほど、画像で処理ですか・・・。 でも、そうすると、メニューの追加とかあったら大変ですね。 できれば、文字だけでしたいのですが・・・。

その他の回答 (5)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.6

>ある程度修正は必要ですが・・・ とは、このことだったんですが・・・では、これで如何でしょうか。 あと選択時の表示非表示の状態保持は考えてみてください。 <script language="javascript"> <!-- function changeVis(obj, visible, block) { document.all(obj).style.visibility=(visible?"visible":"hidden") document.all(obj).style.display=(block?"block":"none") } //--> </script> <DIV><A href="#" onMouseMove="changeVis('tre1', true, true)" onMouseOut="changeVis('tre1', false, false)">メニュー1</A></DIV> <DIV id="tre1" STYLE='visibility:hidden;display:none'> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV> <DIV><A href="#" onMouseMove="changeVis('tre2', true, true)" onMouseOut="changeVis('tre2', false, false)">メニュー2</A></DIV> <DIV id="tre2" STYLE='visibility:hidden;display:none'> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV>

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.5

参考程度なので、ある程度修正は必要ですがこのような感じのものですか? '********** ココから ********** <script language="javascript"> <!-- function changeVis(obj, visible) { document.all(obj).style.visibility=(visible?"visible":"hidden") } //--> </script> <A href="#" onMouseMove="changeVis('tre1', true)" onMouseOut="changeVis('tre1', false)">メニュー1</A> <DIV id="tre1" STYLE='visibility:hidden'> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV> <A href="#" onMouseMove="changeVis('tre2', true)" onMouseOut="changeVis('tre2', false)">メニュー2</A> <DIV id="tre2" STYLE='visibility:hidden'> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV> '********** ココまで **********

noname#92489
質問者

お礼

ありがとうございます。 試してみたのですが、メニュー1とメニュー2の間に隙間が・・・できますね。これは、改造で直るのでしょうか? javaが無理なら、Flashで作ろうかと模索中です。

  • lmeelm
  • ベストアンサー率52% (18/34)
回答No.4

IE5.5以上限定ですが、スクリプトを使用せずにおっしゃっておられるようなことができます。 <HTML XMLNS:t="urn:schemas-microsoft-com:time"> <HEAD> <TITLE>ツリー式メニュー</TITLE> <STYLE type="text/css"> .time{behavior: url(#default#time2);} </STYLE> <?IMPORT namespace="t" implementation="#default#time2"> </HEAD> <BODY> <A id="b1a" class="time" begin="0;b1b.click" end="b1a.click" timeaction="display">メニュー1</A> <A id="b1b" class="time" begin="b1a.click" end="b1b.click" timeaction="display">メニュー1</A> <DIV id="d1" class="time" begin="b1a.click" end="b1b.click" timeaction="display"> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV> <A id="b2a" class="time" begin="0;b2b.click" end="b2a.click" timeaction="display">メニュー2</A> <A id="b2b" class="time" begin="b2a.click" end="b2b.click" timeaction="display">メニュー2</A> <DIV id="d2" class="time" begin="b2a.click" end="b2b.click" timeaction="display"> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV> <A id="b3a" class="time" begin="0;b3b.click" end="b3a.click" timeaction="display">メニュー3</A> <A id="b3b" class="time" begin="b3a.click" end="b3b.click" timeaction="display">メニュー3</A> <DIV id="d3" class="time" begin="b3a.click" end="b3b.click" timeaction="display"> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV> <A id="b4a" class="time" begin="0;b4b.click" end="b4a.click" timeaction="display">メニュー4</A> <IMG id="b4b" class="time" begin="b4a.click" end="b4b.click" timeaction="display">メニュー4</A> <DIV id="d4" class="time" begin="b4a.click" end="b4b.click" timeaction="display"> ├ <A href="#">コンテンツ1</A><BR> ├ <A href="#">コンテンツ2</A><BR> ├ <A href="#">コンテンツ3</A><BR> └ <A href="#">コンテンツ4</A> </DIV> </BODY> </HTML>

参考URL:
http://ad.il24.net/~ura/time/tree_menu_source.htm
noname#92489
質問者

お礼

ありがとうございます。 すいませんが、クリックせずにマウスオーバーで 展開するものをさがしています。

noname#102878
noname#102878
回答No.3

ここはどうでしょうか? http://www5.justnet.ne.jp/~woka/hr_menu4v.htm

参考URL:
http://www5.justnet.ne.jp/~woka/hr_menu4v.htm
noname#92489
質問者

お礼

ありがとうございます。 こういうのをはじめ使ってたのですが、 http://www5.justnet.ne.jp/~woka/fr-hr4v.htmのように、 縦メニューで横に展開していくと、どうしても、左のフレームに、 右半分余白ができてしまうので、縦展開にしたいんです。

  • Spur
  • ベストアンサー率25% (453/1783)
回答No.1

その通りに書くだけだと思いますけど? document.write("<table border=0>\n"); document.write("<tr><td>●●●●</td></tr>\n"); document.write("<tr><td>▽┣page1</td></tr>\n"); document.write("<tr><td>■┣page2</td></tr>\n"); document.write("<tr><td> ┣page3</td></tr>\n"); document.write("<tr><td> ┣page4</td></tr>\n"); document.write("</table>\n");

noname#92489
質問者

お礼

えーと・・・、●●●●にマウスを乗せてはじめてpege1-page4の メニューが出てくるようにしたいので、テーブルではないんです。 http://www.microsoft.com/japan/default.asp のサイトの左のメニューみたいなので、右ではなく下に展開したいんです。 説明悪くてすいません。

関連するQ&A

  • ツリーメニューについて

    私はクリックすると下に文字が出るツリーメニューを使ったのですが クリックすると下に文字が出、かつフレームで二分割した右側に他のページを表示させる方法が知りたいです。 拙い説明で申し訳ありません。 HTMLタグは大体は理解していると思います。javascriptはまだよく分かっていません。 ツリーメニューも付け焼刃で使っています。 なので、参考にできそうなサイト様をお教えいただくか もしくは細かく説明していただけるとありがたいです。 サイトのURL:http://artclub.ojaru.jp/frame.html よろしくお願いします。

  • メニューの内容

    フレームで、ヘッダー 左メニュー 右メインページとしている3分割のものを作っています。 左メニュー(○○○とする) ○○○―×××     \△△△ ○○○にマウスを持っていくと、××× △△△が表示され、××× △△△をそれぞれクリックすると、右メインページに表示されるようにするにはどうしたらいいでしょうか? できるだけ簡単なほうがいいですが、どのようなやり方でも構いません。 教えてください。 (質問する場所が違っていたらすみません)   

  • ホームページのメニュー作成で

    ホームページをヒームページビルダー13の標準モードで作成しています(初心者です)。 フレームを3段に分けて真ん中のフレームをメニューとして作っていますがメニューへマウスを置くと画像が変わるロールオーバーにしたのですが、 クリックしてページを表示した時にそのページにあたるメニューの項目がマウスを置いた時の画像(または別画像)になり、 どのメニューのページが表示されているのか分かるよようにできればと思っています。 一つ一つのページのメニューを変更し登録をする以外に方法があるのでしょうか?(CSS等?) フレームを使う事で不都合があるようでしたら、変更することも可能です。 アドバイスを宜しくお願いします。

  • HPビルダーのリンクツリーのトップを変更できますか?

    何度も同じ質問でごめんなさい、本当に分らなくて困っています。HPビルダー11で「2分割横-2」のフレームを使いページを作成しました。リンクツリーを見ると、1段目のindex.htmlページには青文字下段アンダーラインでタイトル名が左上に表示しており、ページは白の状態です。2段目のページには1枚のページしか無く、左ページと右ページが並んではいません。この1枚のページに2分割フレームの絵があり 左右に下段のページをリンクさせました。IEでのURLを入れると、1段目のindex.htmlページの青文字下段アンダーラインでタイトル名が左上に表示しており、ここをクリックしないと2段目のファイル(本当のページにしたい)に進みません。2段目のページをトップページにするにはどのような操作をすればよいのでしょうか。

  • ホームページのフレームでそのサイズの固定

    ホームページを上下2分割、下の段を左右2分割にしているのですが、フレーム分けの境界線を固定したいのです。 境界線はパーセンテージで出てしまうのですが これを上から***ピクセル、左から***ピクセルのように、固定できないでしょうか? パーセンテージだとPCの表示サイズの違いで、スクロールバーが出てしまい困ります。 よろしくお願いします。 <FRAMESET rows="24%,76%" frameborder="NO" border="0"> <FRAME name="frame1" src="top.html"> <FRAMESET cols="16%,84%"> <FRAME name="frame2" src="menu.html"> <FRAME name="frame3" src="page1.html"> </FRAMESET> <NOFRAMES> <BODY> <P>このページを表示するには、フレームをサポートしているブラウザが必要です。</P> </BODY> </NOFRAMES> </FRAMESET>

  • フレームの分割について

    ホームページビルダーV6.5を使用しております。 フレームの分割について教えて下さい。 フレームを左、中、右と3分割します。 左にメニュー、中に内容、右に壁紙(写真)と配置しました。ブラウザの左右の幅を狭くした場合は右のフレームのみがサイズが変わって左と中はフレームサイズとその中にある、表のサイズが変わらないようにしたいです。フレームと表共に、ピクセルでのサイズ表示とパーセントでのサイズ表示があるので、この辺の調整で上手く出来そうなのですが、、、よくわかりません。どのように設定したら良いのか教えて下さい。

  • ツリーメニューでクッキーを使いたいのですが・・

    JavaScript初心者です。ツリーメニューを使いたいのですが、リンクから別のページ(別のディレクトリ)に移動した時、クッキーを使って、展開した状態を保持したいのですが、よく分かりません。 enptybox22さんの http://oshiete.homes.jp/qa3084680.html 回答記事にあったクッキー処理のプログラムをそのまま入れてみたのですがうまく動きません。 設置URLは http://blove.cc/tes1/ になります。 どうぞよろしくお願いいたします。

  • リンクツリーのTOPのindexを変更の仕方を教えて下さい。

    HPビルダー11使用です。左右2分割のフレームページを作成したところ、1段目にindex.htmlがあり、このファイルのページにはテキスト名のみ記載されてあとは真っ白ページです。リンクしている2段目には2分割フレームがあり、左右のファイルは各ファイルとリンクしてうまく表示しています。しかし、サーバー転送をしてURLを開くと1段目のindex.htmlが表示されてしまいます。2段目のフレームページを1段目(トップページ)に変えるには、どのようにすればよいのでしょうか。

  • ツリーメニューについて

    フレームページで、JavaScriptで文字(下の場合は「親メニュー」)クリックすると 開閉するツリーメニューを使用したいと思っています(フレームあり・なしは訪問者の自由で選べるようにしています)。 http://himajin.moo.jp/menu/menu.html ここや、 http://www.openspc2.org/reibun/javascript/#8 こちらの05・06・63などを参考にして、 自分なりにシンプルに変更してみたのですが、記述に問題点などはありますでしょうか? 以下が、そのソースです(簡略化しています)。 <html> <head> <script type="text/JavaScript"> <!-- function treeMenu(tName) {  tMenu = document.getElementById(tName).style;  if(tMenu.display == 'none') tMenu.display = "block";  else tMenu.display = "none"; } //--> </script> </head> <body> <a href="JavaScript:treeMenu('treeMenu1')">親メニュー</a> <div id="treeMenu1" style="display:none">  <li><a href="a.html" target="main">子メニュー</a></li>  <li><a href="b.html" target="main">子メニュー</a></li> </body> </html> また、「document.all」はIE専用だと聞いたので「document.getElementById」 に変更してみたのですが、これでほかのブラウザでも問題は無く使用できますか? JavaScriptは初めてなのであまり自信がありません。 IEとFirefoxでは動作確認済みです。よろしくお願いします。

  • HPビルダーのリンクツリーのトップファイルが変なのですが

    HPビルダー11を使用しています。(初心者です) なんとかページを構築できたのですが、リンクツリーを見ると1段目トップのファイルは(タイトル)無表示、(ファイル名)index.htmlで何も無いファイルです。2段目にフレーム「2分割横ー2」のファイルがきて下段はうまく各ツリーになっています。私は1段目に2段目のフレームがくるようにしたいのですが、これで正しいのか間違っているのか分りません。教えて下さい。