• 締切済み

Dreamweaverのメニューが乱れる

Dreamweaver CS3を使ってウェブホスティングしています。 Spryを使ったナビゲーションメニューをテンプレートにして50ページほどのサイトになっています。 自分で悪さをした結果でしょうが、あるとき、左側に縦置きにしているナビゲーションメニュー(子・孫格納したもの)がずらーっと縦置き一覧表示になって全頁のタイトルが一列表示されるようになってしまいました。 全タイトルにはリンクがついているのでナビゲーションからページを選ぶことは可能ですが超縦長ページになってしまい、みっともないです。 テンプレートをDWで見る限りでは異常はありませんが、テンプレートから作成したページはオフラインでも狂っています。 過去にも何回かあったのですが、わけのわからないままにいじくっていたら治っていました。  お知恵を拝借いたしたく、ご教示ください。

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

了解です。 ただ、CSSやHTML自体に詳しくないとすると、崩れる原因は、 スタイルシートのセレクタを弄くった可能性は低いと思われますから、HTMLのIDがclass名を変えてしまったため、スタイルシートのセレクタがターゲットとする要素と、HTMLの要素が合わなくなったためでしょう。  どのオーサリングツールも、カスケーディングをまったく理解できませんから、HTMLに個別にIDなり、class名を振ってしのいでいます。これは著者がカスケーディングを理解して指定しない限り、原理的に無理です。  逆に、出来上がっているCSSを開いて、私が「コメントアウト」と示した部分を設定している部分を見つけるのがたやすいでしょう。 ・display:block; ・position:absolute; の部分です。 カスケーディングについては、 6.4 カスケード処理(The cascade) ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/cascade.html#cascade ) をお読みください。

tyamag17
質問者

お礼

何とか解決したと思います、 ファイルの構成ツリーは標準のままで、以下のようになっています。 (root) Templates/ .SpryAssets/ ..SpryMenuBar.js ..SpryMenuBarVertical.css .MyTemplate.dwt ..... cssfile.css page1.html page2.html page3.html テンプレートファイル(MyTemplate.dwt)はルートディレクトリー上のフォルダー(Templates/)に格納され、自身と同レベルにあるフォルダー(SpryAssets/)に格納されたcssファイル(SpryMenuBarVerical.css)およびルートディレクトリー上にあるcssファイル(cssfile.css)を参照している。 不具合状況はテンプレートファイルをデザインビューで見て、Spryメニューバーのプロパティでスタイルをオフにした時と全く同じ状況。 ということから、テンプレートファイルを個々のファイルに反映した後にスタイル情報をつなぐリンクが切れていると推定し、良かった時と現在のページ(page1.html)のコードをプリントアウトして比較しました。 途中経過を飛ばして、、、、 分かったこと、不具合のあるpage1.htmlの<body>の前に、 <script src="SpryAssets/SpryMenuBar.js" type="text/javascript"></script> <link href="SpryAssets/SpryMenuBarVertical.css" rel="stylesheet" type="text/css" /> これではルートディレクトリーにはないディレクトリーを指定している まともに作動した時のpage1.htmlでは同一部分は、 <script src="Templates/SpryAssets/SpryMenuBar.js" type="text/javascript"></script> <link href="Templates/SpryAssets/SpryMenuBarVertical.css" rel="stylesheet" type="text/css" /> となっており、無事つながっています 一方では、テンプレートファイル(MyTemplate.dwt)のコードを見ると両方とも同じで、 <script src="SpryAssets/SpryMenuBar.js" type="text/javascript"></script> <link href="SpryAssets/SpryMenuBarVertical.css" rel="stylesheet" type="text/css" /> 以下は私の推定です。 テンプレートファイル自身から見ると、これら二つのコードファイルは甥っ子(同列のフォルダー,SpryAssetsの子)だが、テンプレート情報を上位にあるpage1.htmlに反映すると、そのページからは甥孫(同列フォルダー、Templatesの孫)になり、プログラムはそのパス情報を自動的に書き換えるはずですが、別のところからテンプレートファイルを持ってきて上書きしたり名前を書き換えたりと乱暴なことをしたために、そのリンク関係の情報が狂ってしまったのでしょう。 対策 テンプレートファイルを開いて該当部分のコードを絶対パス(../Templates/SpryAssets/,,,)に書き換えて強制的に再適用、これで治りました!テンプレートファイルはDreamWeaverの外でいじくってはいけないことを再認識しました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

 画像、拝見しました。原因はわかりましたが、それを修正するにはHMLとCSSの解析が必要です。  HTMLは、必ずその樹構造を解析してください。(DOM)  その上で、セレクタとその詳細度を計算して適用を確認してください。 [例]先の回答のHTMLにサブ・サブリストを追加したものを最後にあげておきます。 このHTMLで示してある部分をコメントアウトすると、再現されるはずです。 理由は、ここで指定してあるスタイルが適用されていないのですが、それがなぜ適用されないかは、HTMLかCSSのいずれかに原因があるのです。  下記サンプルのように、HTMLとCSSは手で書いたほうがシンプルでわかりやすいのです。ここをツールに頼ると「ワケワカメ」になりますね。ツールが作成したややこしくて複雑なHTMLやCSSを読み解くのは、プロでも容易ではありません。勘弁して・・  この様にしたいと言う希望で、ゼロから作るほうが楽です。下記ソースなら、あなたでも理解できるはずですし、直すのも簡単ですね。 ★Another HTML-lint gateway( http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ) ★The W3C Markup Validation Service( http://validator.w3.org/#validate_by_input ) で検証済み。ウェブ標準です!! <!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"> <!-- div.nav{ _width:120px; _background-color:rgb(50,0,100);color:white; _padding-top:40px; } div.nav a:link{ _color:white; _background-color:rgb(50,0,100); } div.nav a:visited{ _color:silver; } div.nav a:hover,div.nav a:focus{ _background-color:rgb(50,50,200); } div.nav a:active{ _background-color:rgb(0,0,50); _color:yellow; } div.nav h2{ _width:100px;margin:0 auto 15px auto;; _background-color:white; _color:black; _line-height:36px;text-align:center; } /* ここから */ div.nav ul, div.nav ul li{ _display:block; _list-style:none; _margin:0;padding:0; } div.nav ul li ul{ _display:none; _position:absolute; _top:5px;left:118px; } /* ここまでをコメントアウト */ div.nav ul li{ _width:118px; _border:solid 1px blue; _line-height:30px; _position:relative; } div.nav ul li:hover ul{ _display:block; } div.nav ul li:hover ul li ul{ _display:none; } div.nav ul li ul li:hover ul{ _display:block; } div.nav ul li a{ _display:block; _width:100%;height:100%; _text-decoration:none;text-align:center; } --> _</style> </head> <body> _<h1>サンプル</h1> <div class="nav"> _<h2>メニュー</h2> _<ul> __<li><a href="./1">メニュー1</a> ___<ul> ____<li><a href="./1/1">サブ1-1</a> _____<ul> ______<li><a href="./1/1/1">サブ1-1-1</a></li> ______<li><a href="./1/1/2">サブ1-1-2</a></li> ______<li><a href="./1/1/3">サブ1-1-3</a></li> _____</ul> ____</li> ____<li><a href="./2">サブ1-2</a> _____<ul> ______<li><a href="./1/2/1">サブ1-2-1</a></li> ______<li><a href="./1/2/2">サブ1-2-2</a></li> _____</ul> ____</li> ____<li><a href="./1/3">サブ1-3</a></li> ___</ul> __</li> __<li><a href="./2">メニュー2</a> ___<ul> ____<li><a href="./2/1">サブ2-1</a></li> ____<li><a href="./2/2">サブ2-2</a></li> ____<li><a href="./2/3">サブ2-3</a></li> ___ ___</ul> __</li> __<li><a href="./3">メニュー3</a> ___<ul> ____<li><a href="./3/1">サブ3-1</a></li> ____<li><a href="./3/2">サブ3-2</a></li> ____<li><a href="./3/3">サブ3-3</a></li> ___</ul> __</li> _</ul> </div> </body> </html>

tyamag17
質問者

お礼

ORUKA1951さん、 引き続きのフォローアップありがとうございます。 自分のお勉強を続けてサイトユーザーに不便をかけるわけにはいかないので、まともなメニュー表示をしていたころのデータに丸ごと入れ替え、ページごとに更新してとりあえず急場をしのぎました。 テンプレートをわずかでも変えて全ページに適用すると、メニューがぐちゃぐちゃになるのを経験したので、少々不便でも当面はページの修正だけでしのぎます。 ご指導いただいたこと、私には少々荷が重いのですが、オフラインで並行してスタディーしていきます。 英語版ソフトを苦労して使っています、マニュアルは日本語版をダウンロードできたので、さほど不便さはありません。 しばらく時間が必要かと思いますが、過去のようになんだかわからないが治ってしまった!とならないよう、教えていただいたサイトで勉強しつつ、理屈で考えながら進めます。 見通しがついたらこの場でご報告します。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

現象自体がわからないのですが、 最初の質問文では、縦に並んでしまうと読めた(横に並べたい?)ので、あのように回答したのですが、補足によると、本来は隠しておきたい2階層目のリスト項目が現れたままとも読み取れます。  その場合のスタイルシートは ul li ul{dispaly:none;} 詳細度[0 0 0 3] ul li:hover ul{display:block;} 詳細度[0 0 1 0] となるはずです。擬似クラス分、詳細度が高いから。  仕組み自体は、下記サンプルのように極めてシンプルなもののはずです。 ★きちんと消してあり、かつ擬似クラスで上書きされているか確認。HTML,CSS文法ミスのために適用されていない可能性もあるので下記サイトなどでチェックしてみること。 Another HTML-lint gateway( http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ) The W3C Markup Validation Service( http://validator.w3.org/#validate_by_input ) 例)タブは_に置換してある <div class="nav"> _<ul> __<li><a href="./">トップ</a> ___<ul> ____<li><a href="">サブ1-1</a></li> ____<li><a href="">サブ1-2</a></li> ____<li><a href="">サブ1-3</a></li> ___</ul> __</li> __<li><a href="./">トップ</a> ___<ul> ____<li><a href="">サブ2-1</a></li> ____<li><a href="">サブ2-2</a></li> ____<li><a href="">サブ2-3</a></li> ___ ___</ul> __</li> __<li><a href="./">トップ</a> ___<ul> ____<li><a href="">サブ2-1</a></li> ____<li><a href="">サブ2-2</a></li> ____<li><a href="">サブ2-3</a></li> ___</ul> __</li> _</ul> </div> の場合 div.nav ul,div.nav ul li{ _display:block; _list-style:none; _margin:0;padding:0; } div.nav ul li{ _width:100px; _border:solid 1px blue; _line-height:1.6em; } /* a要素の指定 */ div.nav ul li a{ _display:block; _width:100%;height:100%; _text-decoration:none;text-align:center; } /* ここまで定番 */ div.nav ul li:hover ul{ _display:block; }/* ここで現れる */ /*以下の宣言ブロックを消すとすべて表示される div.nav ul li ul{ _display:none; }/* ここでいったん隠してある。この二つの宣言ブロックが肝 */

tyamag17
質問者

お礼

ORUKA1951さん、 ご親切に例文を作っていただき、深く感謝いたします。  まず私が不具合現象を正確にお伝えできていなかったようで申し訳ありませんでした。 言葉よりは絵の方がよいかと思ってスクリーンショットの一部をリンクします。 テンプレートだけでブラウザー表示するとこのようにまともに見えます http://tygucci.sakura.ne.jp/open/menu.jpg このテンプレートを適用すると、リンク付きのテキストのツリーに代わってしまいます。 http://tygucci.sakura.ne.jp/open/menu_jammed.jpg これをもとに戻す(undo)のはできないみたいですね テンプレートを開いてメニューの一つをクリックしたときのプロパティーのショットがこちらです http://tygucci.sakura.ne.jp/open/css.jpg おんぶにだっこのように頼ってしまってお恥ずかしいですがご指摘されたことがこのプロパティー情報で判明するのでしょうか?

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

単純に floatされるブロックが、それを収納するブロックよりも幅が狭いため・・ floatが解除されている いずれかでしょう。

tyamag17
質問者

補足

回答ありがとうございます、私が正しく理解できたかどうか怪しいですが、テンプレートを開いてcssスタイルのプロパティを眺めました。まともに動いていたころの古いデータがあったので比較しましたが(ul-li, ul-ul, ul-ul li)違いもなく、floatにはどちらも何も値が入っていません。 ためしにテンプレートだけの状態で4種類のブラウザーでプレビューしてみると、意図通りのメニューが現れ、マウスカーソルを当てると子メニュー、孫メニューが現れます。 なので、テンプレートはまともだと思います。 このテンプレートの一部を変えて保存するとそれから派生したページすべてがアップデートされますが、そちらは依然として文字だけのツリー表示です。 理解不足のまま悪あがきをしている気がしますが、さらにご助言をいただけましたら幸いです。

関連するQ&A