電子書籍の厳選無料作品が豊富!

こんにちは!

CSS初心者で、今回初めてCSSを利用してホームページを作っています。
制作中に、行き詰ってしまい質問をさせていただきました。

メインナビの背景に画像、その上にリストのテキスト、そしてカーソルオーバーをすると、違う画像が表示するようにしています(ナビは、リストをfloatで横並びに表示しています)。

IEだと、問題なく正しい位置で表示されるのですが、Firefoxや Chromeだと、カーソルオーバー用の画像が下に少しずれて表示されてしまいます。

元凶を、探してみたんですが、なかなか見つけられません。
わかる方がいらっしゃったら、教えていただけないでしょうか。

お粗末なCSSコードですが(多分、無駄なコードがいっぱいありそう・・・)
のせさせていたたきました。

よろしくお願いします。





CSS
--------------------------------------------------------------


@import url(base.css);
body{
text-align:center;
margin-right : auto;margin-left : auto;
background-image : url(images/bg_brown.png);
background-repeat: repeat;
font-size : 90%;
padding-top : 0px;
padding-bottom : 0px;
margin-top : 0px;
margin-bottom : 0px;
height : 100%;
}
#wrap{
text-align : center;
margin-top : 0px;
margin-left : auto;
margin-right : auto;
margin-bottom : auto;
width : 100%;
padding-top : 0px;
}
#com_back{
background-image : url(images/bg_green.png);
background-repeat : repeat-x;
}
#g_navi_back{
width : 100%;
height : 80px;
text-align : center;
background-repeat : repeat;
background-image : url(images/bg_g_navi.png);
}
#g_navi{
overflow : hidden;
width : 900px;
margin 0 auto;
margin-left : auto;
margin-right : auto;
background-repeat : no-repeat;
background-image : url(images/navi_base.png);
height : 80px;
}
#g_navi ul{
padding-top : 0px;
padding-left : 0px;
padding-right : 0px;
padding-bottom : 0px;
margin-top : 0px;
margin-left : 0px;
margin-right : 0px;
margin-bottom : 0px;
}
#g_navi li{
text-align : center;
width : 180px;
float : left;
border-collapse : collapse;
background-position : left center;
top : 50%;
bottom : 50%;
letter-spacing : 1px;
line-height : 18px;
}
#g_navi li a{
display : block;
padding-top : 20px;
}
#g_navi ul li a:link{
text-decoration : none;
color : black;
}
#g_navi ul li a:hover{
background-image : url(images/navi_hover_g.png);
background-repeat : no-repeat;
background-position : center center;
height : 80px;
}
.inner{
text-align : left;
margin-top : 0px;
margin-left : auto;
margin-right : auto;
width : 900px;
background-repeat : repeat;
height : auto;
background-image : url(images/bg_white.png);
}

html
------------------------------------------------------------------------------
<!--外枠-->
<div id="wrap">
<!--ロゴ-->
<div id="com_back"><div id="com" ></div></div>

<!--ナビ-->
<div id="g_navi_back">
<div id="g_navi">
<UL style="list-style-type : none">
<LI><a href="index.html">ホーム</a></li>
<LI><a href="**********">ご案内</a></li>
<LI><a href="**********">ご利用方法</a></li>
<LI><a href="**********">イベント詳細</a></li>
<LI><a href="**********">アクセス</a></li>
</UL></div>
</div><!--ナビ_end-->
<div class="clear"><hr /></div><!--ナビfloatクリア-->

<div class="inner"><!--インナー-->

A 回答 (2件)

そんな長くて煩雑だと・・・途中で読む気がうせてしまいました。

すみません。
IEでのみ表示が違う原因で、最も多いのは互換モードでの動作です。--IEの解釈が間違っている--
HTMLを標準モードで起動するように書き換えてください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
・・・
詳しくは、
DOCTYPE スイッチ - Google 検索 ( https://www.google.co.jp/#hl=ja&safe=off&output= … )
 など

 HTML5を目前とした今は、transitinalは過去の技術です。1999年のHTML4.01の勧告以来「HTML文書を作る場合には、この仕様における、他のDTDセットではなく strict DTD に適合する文書を作るよう推奨する。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」といわれ続けてきたことですから。

 HTMLを
Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint. … )
 などでチェックしながら、ウェブ標準にまず直してください。

 それでスタイルシートを記述すれば、どのブラウザでも標準モードで起動し、ブラウザによる差は消えるでしょう。

 なお、スタイルシートはHTMLが文書構造だけ記述してあれば、もっとシンプルに簡単になるし、わかりやすくなります。

 昨日回答した
(CSS)縦メニューを一枚画像で作るには・・ - Webデザイン・CSS - 教えて!goo ( http://oshiete.goo.ne.jp/qa/7464353.html )
 なんて、HTMLは極めて簡単で、スタイルシートもわかりやすいかと。

 たぶん、あなたの期待されていることをHTMLさえ正しければ・・・HTMLは半分、スタイルシートは1/10で済むと思います。
★継承されるプロパティは、一度しか書かない
★同じ設定をする要素はグループ化する。
★デザインのためにidやclassは書かない
 これだけで、随分とスリムになりメンテナンスも容易になります。
「例」
 (CSS)縦メニューを一枚画像で作るには・・ - Webデザイン・CSS - 教えて!goo ( http://oshiete.goo.ne.jp/qa/7464353.html )

 具体的には、HTMLは
<div class="nav">
 <ol>
  <li><a href=""></a></li>
  <li><a href=""></a></li>
  <li><a href=""></a></li>
  <li><a href=""></a></li>
 </ol>
</div>
 だけでよいのです。
    • good
    • 0
この回答へのお礼

とても丁寧な回答、ありがとうございました。

わかりづらいCSSながらも、解説していただいてとても助かりました。
おっしゃる通り、標準モードに切り替えることで、今回の問題は解決しました。

多分、スタイルシートやhtmlの知識が、不充分なのが一番原因なんですよね。

今後は、教えて頂いたサイトと、別で回答されている内容を参考に
スタイルシートとhtmlの簡素化を目指して、文書構造もきれいな
HPを作っていきたいと思います。

お礼日時:2012/05/11 10:53

>IEだと、問題なく正しい位置で表示されるのですが、Firefoxや >Chromeだと、カーソルオーバー用の画像が下に少しずれて表示されてしまいます。


間違っているのはIEだね・・・(IEのバージョンにもよる)

>多分、無駄なコードがいっぱいありそう・・・)
ですね・・・ 半分以下に簡素化できますよ。

まずは、#1さんの通りDTD標準準拠に変更

作り直した方が後々の問題を回避できるけど、
とりあえずの応急処置なら、

#g_navi li a{
padding-top : 20px;

#g_navi ul li a:hover{
height : 80px;

実際の画像サイズが不明なので、良くわからないが、
この部分の高さが矛盾なのでは?
計算上では、21px程度のズレかな・・・
何故、a:hoverの時だけ height : 80px; なのかな???
    • good
    • 0
この回答へのお礼

わかりづらい、内容にも関わらず、回答していただいて
ありがとうございました。

問題点は、標準モードに切り替えることでクリアできました。

ご指摘の・・・

#g_navi li a{
padding-top : 20px

は、テキスト文字(「ご案内」等)が、垂直の中央にこさせるために
入れてます。


#g_navi ul li a:hover{
height : 80px

の件ですが、これを入れないと、画像が切れて表示されてしまうのです。
ナビのベースの画像の高さが80px、ロールオーバー用の画像の高さは80pxです。
表示させたい位置は、縦横間でセンターなのですが
80pxの指定を入れないと、ナビの「ご案内」等のテキスト部分にしか画像が反映されず、
そこからはみ出している画像部分は切れてしまうのです。


もっと、知識&技能があれば解決する問題なのでしょうが>_<;

ご指摘ありがとうございました。

お礼日時:2012/05/11 11:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!