- ベストアンサー
フレームメニュー展開表示の方法
- フレームメニュー展開表示の方法について教えてください。左にメニュー、右にコンテンツのレイアウトで、左メニューをクリックすると右コンテンツの該当箇所に移動して中身を展開して表示させたいです。
- 質問者はフレームメニュー展開表示の方法についてアドバイスを求めています。CSSやJavaScriptの知識が乏しく、何を試してもうまくいかない状況です。
- フレームメニューで左にメニュー、右にコンテンツを表示したいです。左メニューのリンクをクリックすると右コンテンツの該当箇所に移動して中身を展開させたいですが、方法がわかりません。アドバイスをお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
No.6 の補足 > 展開されないことがあります。 こういうことでしょうか? 左の #title1 リンクを押す → 展開 右の #title1 見出しを押す → 閉じる 左の #title1 リンクを押す → 展開されない ならば function open(hash) { $(hash).parent('li').find('.content').show(300); location.hash = '#opened'; //【追加】 }
その他の回答 (8)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
そうそう :tergetをIE8以前で > ⇒レッド ■ ワン: red-one: CSS3: Target 擬似クラスを実装するスクリプト sfTarget.js を(勝手に)作り直し( http://redone-on.blogspot.jp/2008/06/css3-target-sftargetjs.html )
お礼
引き続き、情報を下さり感謝です。 ありがとうございます!!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
そうそう、HTML本体を _<div class="section"> __<h2>見出し</h2> __<div class="section" id="SECTION1"> ___<h3><a href="#SECTION1">1項見出し</a></h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="section" id="SECTION2"> ___<h3><a href="#SCTION2">2項見出し</a></h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="section" id="SECTION3"> ___<h3><a href="#SECTION3">3項見出し</a></h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="section" id="SECTION4"> ___<h3><a href="#SECTION4">4項見出し</a></h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="nav"> ___<ol> ____<li><a href="#SECTION1">1項</a></li> ____<li><a href="#SECTION2">2項</a></li> ____<li><a href="#SECTION3">3項</a></li> ____<li><a href="#SECTION4">4項</a></li> ___</ol> __</div> _</div> のほうが使いやすいですね。タイトルクリックで広がります。
お礼
お返事遅れてすみません! 書き込みありがとうございます! 使いやすくなりました。
- Ogre7077
- ベストアンサー率65% (170/258)
No.5 ですが、少々誤解があるようなので、ちゃんと書いてみました。 ie8 とのことですので <script> が少々泥臭いです。すみません。 -- menu.html そのまま -- a.html <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="http://code.jquery.com/jquery-migrate-1.1.0.js"></script> <script src="https://raw.githubusercontent.com/cowboy/jquery-hashchange/v1.3/jquery.ba-hashchange.js"></script> <script>$(function(){ function open(hash) { $(hash).parent('li').find('.content').show(300) } if (location && location.hash) open(location.hash); $(window).hashchange(function(){if (location && location.hash) open(location.hash);}); $('#list li h4').click(function(){$(this).parents('ul#list li').find('.content').toggle(300);}); })</script> <style> #list li .content { display:none; } </style> <ul id="list"> <li> <h4 id="title1">タイトル1</h4> <div class="content"><p>あ<p>あ<p>あ<p>あ<p>あ<p>あ<p>あ<p>あ<p>あ<p>あ<p>あ</div> <li> <h4 id="title2">タイトル2</h4> <div class="content"><p>い<p>い<p>い<p>い<p>い<p>い<p>い<p>い<p>い<p>い<p>い</div> <li> <h4 id="title3">タイトル3</h4> <div class="content"><p>う<p>う<p>う<p>う<p>う<p>う<p>う<p>う<p>う<p>う<p>う</div> </ul>
お礼
サンプルソースありがとうございます! とてもわかりやすくてありがたいです。。 早速試してみたのですが、最初にクリックしたリンクは 開くのですが、2回目からが開かないのです。。 1回目・タイトル1クリック→開く 2回目・タイトル2クリック→開かない ページをリロードして 1回目・タイトル2クリック→開く 2回目・タイトル1クリック→開かない ・・といった具合なのです。 そのまま持ってきて試したのですが 私がどこか不足しているところがあるのか、見直している最中です。 あと少しなのにもどかしいです・・ Ogre7077様の環境では動作されているのですよね・・
補足
色々試し、下に書いた現象は回避されるようになりました! 早とちりで書き込みすみません。 スムーズに動くようになったところで、ページを何度か切り替えてテストしていたのですが、3~4回に1度くらいの頻度で 展開されないことがあります。 他のメニューをクリックして、再度もどると今度は展開されていたりします。 度々で恐縮なのですが、この現象について 回避方法など、アドバイスいただけないでしょうか。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
あれじゃ印刷したら惨めなことになるので・・ _<style type="text/css"> <!-- html,body{margin:0;padding:0;} body{width:100%;height:100%;} h1,h2,h3,h4,h5,h6,p{margin:0;} p{text-indent:1em;} --> _</style> _<style type="text/css" media="print"> <!-- h1,h2,h3,h4,h5,h6,p{line-height:1.8em;} div.section div.nav{display:none;} --> _</style> _<style type="text/css" media="screen"> <!-- body{position:relative;} h1,h2,h3,h4,h5,h6,p{line-height:1.6em;} h3{height:30px;} h2,h3{z-index:10;position:relative;} p{text-indent:1em;} div.header,div.section,div.footer{width:100%;min-width:630px;max-width:1000px;margin:0 auto;padding:5px;} div.header{position:fixed;top:0;left:0;height:100px;border-bottom:ridge 3px gray;background-color:white;z-index:20;} div.section{position:relative;top:110px;} div.section div.nav{position:fixed;left:0;top:110px;width:200px;height:100%;border-right:ridge 3px gray;} div.section h2,div.section p{margin-left:210px;} div.section div.section{width:auto;min-width:0;margin:0 0 0 210px;padding:0;position:static;overflow:hidden;height:30px;} div.section div.section p{margin:0 1em;} div.section h2{height:40px;} div.footer>*{margin-left:210px;position:relative;top:120px;} div.section div.section:target{height:300px;min-height:300px;margin-top:-150px;padding-top:150px;} div.section div.section+div.section:target{margin-top:-180px;padding-top:180px;} div.section div.section+div.section+div.section:target{margin-top:-210px;padding-top:210px;} div.section div.section+div.section+div.section+div.section:target{margin-top:-240px;padding-top:240px;} div.section div.nav a:active{background-color:red;} div.section h2{background-color:white;} #SECTION1{background-color:rgb(200,255,255);} #SECTION1 h3{background-color:aqua;} #SECTION2{background-color:rgb(255,200,255);} #SECTION2 h3{background-color:fuchsia;} #SECTION3{background-color:rgb(225,255,200);} #SECTION3 h3{background-color:lime;} #SECTION4{background-color:rgb(255,255,200);} #SECTION4 h3{background-color:yellow;} div.section div.section h3 a{display:block;width:100%;height:100%;text-decoration:none;color:black;} --> _</style>
お礼
ご丁寧にありがとうございます! みやすくなりました。 社内ではフレーム好きな担当者が多いので 今後も活用できそうです。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
ちょっと時間が取れたのでサンプル ★CSS3の:target擬似クラス使ってますので、古いブラウザにも使うならjavascriptでも ★Another HTML Lint - Gateway( http://www.htmllint.net/html-lint/htmllint.html# ) でチェック済みHTML4.01strict + CSS3(:targetのみ) ★タブは_に置換してあるので戻す。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta name="author" content="ORUKA1951"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" > _<link rel="START" href="../index.html"> _<style type="text/css"> <!-- html,body{margin:0;padding:0;} body{width:100%;height:100%;position:relative;} h1,h2,h3,h4,h5,h6,p{margin:0;line-height:1.6em;} h3{height:30px;} p{text-indent:1em;} div.header,div.section,div.footer{width:100%;min-width:630px;max-width:1000px;margin:0 auto;padding:5px;} div.header{position:fixed;top:0;left:0;height:100px;border-bottom:ridge 3px gray;background-color:white;z-index:10;} div.section{position:relative;top:110px;} div.section div.nav{position:fixed;left:0;top:110px;width:200px;height:100%;border-right:ridge 3px gray;} div.section h2,div.section p{margin-left:210px;} div.section div.section{width:auto;min-width:0;margin:0 0 0 210px;padding:0;position:static;overflow:hidden;height:30px;} div.section div.section p{margin:0 1em;} div.section h2{height:40px;} div.footer>*{margin-left:210px;position:relative;top:120px;} div.section div.section:target{height:300px;min-height:300px;margin-top:-150px;padding-top:150px;} div.section div.section+div.section:target{margin-top:-180px;padding-top:180px;} div.section div.section+div.section+div.section:target{margin-top:-210px;padding-top:210px;} div.section div.section+div.section+div.section+div.section:target{margin-top:-240px;padding-top:240px;} --> _</style> </head> <body> _<div class="header"> __<h1>タイトル</h1> __<p>このページでは・・・・</p> _</div> _<div class="section"> __<h2>見出し</h2> __<div class="section" id="SECTION1"> ___<h3>1項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="section" id="SECTION2"> ___<h3>2項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="section" id="SECTION3"> ___<h3>3項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="section" id="SECTION4"> ___<h3>4項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="nav"> ___<ol> ____<li><a href="#SECTION1">1項</a></li> ____<li><a href="#SECTION2">2項</a></li> ____<li><a href="#SECTION3">3項</a></li> ____<li><a href="#SECTION4">4項</a></li> ___</ol> __</div> _</div> _<div class="footer"> __<h2>文書情報</h2> __<dl class="documentHistry"> ___<dt id="FIRST-PUBLISHED">First Published</dt> ___<dd>2013-03-03</dd> __</dl> _</div> </body> </html>
お礼
書き込みありがとうございます! 1ページでこんな表示ができるなんて、知らなかったです! びっくりしました。 勉強になります。。 対象ブラウザバージョンが古くてie8なので javascriptを探してみます。
- Ogre7077
- ベストアンサー率65% (170/258)
menu.html でリンクを押すと、a.html 内で load または hashchange のイベントが発生します。 ここで URL 内に hash の値が有るならば、対応する中身を展開する、でいかがでしょうか // a.html $(window).on('load hashchange', function(){ if (location && location.hash) 展開(location.hash); }); // 動作イメージ a.html が表示される → イベント load が発生 → hash が無いので、なにもしない menu.html で、リンク a.html#title1 が押される → イベント hashchange が発生 → hash == "#title" なので、展開("#title1") が実行される menu.html で、リンク b.html が押される → menu.html で、リンク a.html#title1 が押される → イベント load が発生 → hash == "#title" なので、展開("#title1") が実行される hashchange は古いブラウザで動かない問題がありますが、 その場合は以下の jQuery プラグインを併用してください http://benalman.com/projects/jquery-hashchange-plugin/
お礼
書き込みありがとうございます! 展開、とあるのはリンク元のメニュー名ですよね。 それが複数ある場合(メニュー1、メニュー2・・)は その数分記述すればいいのでしょうか。
- tracer
- ベストアンサー率41% (255/621)
フレームを使うなと頭ごなしに言うつもりはありませんし、フレームを使ってもご所望のことはできますが、明らかに難易度が高くなります。実装方法は、JavaScriptを使って異なるフレームと通信することになります。つまり、javascriptをご存じない方が選択する方法ではありません。 フレームを使わずにページを作れるのであれば、あるいは、CSSだけで目的を達成できるようになるかもしれません。
お礼
書き込みをありがとうございます。 このサイトは社員閲覧用ページで、依頼者からフレーム指定で きているので変更ができないのです。。 フレームを死守したいのであれば、実装にはハードルが高そうだということですね。 フレームを使わずにCSSだけで目的達成できるかも、とは ターゲット疑似クラスのことでしょうか。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
そもそもフレームは使うべきではありません。 1999年(15年前)のHTML4.01の勧告以来、frameは非推奨です 「HTML文書を作る場合には、この仕様における、他のDTDセットではなく strict DTD に適合する文書を作るよう推奨する。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/conform.html#h-4.1 )」 ですし、フレームには様々な問題があります。 HTML フレーム 問題( https://www.google.co.jp/search?q=HTML%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%20%E5%95%8F%E9%A1%8C&hl=ja ) 「JavaScript、Cookie、セッション ID、フレーム、DHTML、Flash などの特殊な機能が使用されているためにサイトの一部がテキスト ブラウザで表示されない場合、検索エンジンのスパイダーがサイトをうまくクロールできない可能性があります。ggogle-ウェブマスター向けガイドライン( https://support.google.com/webmasters/answer/35769?hl=ja#2 )」 それでももフレームはここでも、一年に数回は話題として登場していますね。 とにかくHTMLは単純に文書構造だけを記述します。 そのうえで、スタイルシートで実現しましょう。 ★最も率直な方法は、それぞれの内容を記したHTMLを作成し、共通なメニューからそれぞれのページにリンクさせること。 断然有利で分かりやすい方法です。最もベストな方法です。(面倒臭いだけ) リンク先のタイトルもきちんと書いてあれば、それぞれのページが検索エンジンにもわかりますし 利用者がブックマークしてもきちんとブックマークできる。 共通なメニューはスタイルシートで各ページでデザインします。 ページ数が多い場合は、SSIなどを使用してincludeするか、ページ自体をサーバー側で出力させる。 ★コンテンツの量が少ないときは率直にスタイルシートで実装しても良いでしょう。 実に様々な方法があります。 いずれにしろ、まずどのようにプレゼンテーションするかは忘れて、きちんとHTMLを書きましょう。
お礼
書き込みをありがとうございます。 情報が不足してすみません。 このページは社内閲覧用でして、外部に出すことはないサイトになります。 依頼者(社員)がフレームが好みのためこの作りになっていて、変更はできないので、やりたいことの実現は難しそうですね。。 ありがとうございます。
お礼
書き込みありがとうございます! できました! 何度も親切に教えていただき感謝です。 勉強になりました。