• ベストアンサー

CSSのcurrentを使ったグローバルナビゲーションの作り方

CSSのcurrentを使ったグローバルナビゲーションの作り方を教えてください。 以下のように二枚のつながった背景画像をロールオーバーさせるCSSのcurrentを使ったグローバルナビゲーションの作り方を教えてください。 画像URLと参考サイト http://www.kagaya.co.jp/images/menu_gNav.gif http://www.kagaya.co.jp/index.php

  • HTML
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
回答No.4

#NAV,*{ } と記述するなら大抵の場合 *{ } で同じ効果が得られます。 ですがこのままではナビゲーション以外の要素にもmarginとpaddingの設定がされてしまい見た目が崩れる原因になります。 #NAV,#NAV * { } これはあくまでナビゲーションとその子要素への指定に限定している感じです。 *(全称セレクタ)を使った初期化も簡単な例として提示しましたが、実はそんなに多く使われてはいません。 全称セレクタは全ての要素に適用を対象としているので、input要素のように各ブラウザによってCSSでも調整が困難な要素にまで設定が適用されてしまうためです。 実際には以下のように個別に指定する方法が多いのではないかと思います。 body, p, ul, ol, h1 , h2 , h3 , h4 , h5 , h6 { margin:0; padding:0; }

katsunof
質問者

お礼

なるほどわかりました! #NAV,#NAV * { }とは #NAVと#NAVの中の全ての子要素?に適用する書き方という事ですね! ご丁寧な解説でとても助かりました!ありがとうございました!

その他の回答 (3)

回答No.3

>なぜ#NAVを二つ並べるのでしょうか? 今回の場合では #NAV { margin:0; padding:0; } でもかまわないのですが、一応汎用性を持たせています。 例えばhtmlの記述的に <ul> <li> <p id="OMOTENASHI"><a href="#">おもてなし</a></p> <p id="SUGOSHIKATA"><a href="#">過ごし方</a></p> <p id="KYAKUSHITSU"><a href="#">客室</a></p> </li> </ul> となるケースもあるかもしれませんし。 CSSを使ってレイアウトするとき、最初に大まかな初期化する人もいるのでそれにもあわせた感じです。 例えば初期化で一番簡単な書き方だと以下のようになります。 *{ margin:0; padding:0; }

katsunof
質問者

お礼

丁寧な解説本当にありがとうございます! なるほど、よくわかりました。 しかし、 #NAV,#NAV *{ margin:0; padding:0; } は #NAV, *{ margin:0; padding:0; } とはならないんですね。 #NAV { margin:0; padding:0; } と *{ margin:0; padding:0; } が合体したものだから #NAV, *{ margin:0; padding:0; } と考えたのですが、 #NAV,#NAV * と#NAVを二つ並べて書かないとならないロジックがいまいち分からないのですが、もしお時間が許すのであれば教えてください。

回答No.2

画像の位置指定間違ってました・・・(汗 #NAV #OMOTENASHI a:hover { background:url(​http://www.kagaya.co.jp/images/menu_gNav.gif)​ no-repeat 0 -60px; } #NAV #SUGOSHIKATA a:hover { background:url(​http://www.kagaya.co.jp/images/menu_gNav.gif)​ no-repeat -160px -60px; } #NAV #KYAKUSHITSU a:hover { background:url(​http://www.kagaya.co.jp/images/menu_gNav.gif)​ no-repeat -320px -60px; }

回答No.1

※先に一番下を読んでもらう方がいいかもしれません。 まずHTMLに関してですが、メニューリストという扱いになるので現状は以下のようにマークアップされることが多いです。 <ul id="NAV"> <li id="OMOTENASHI"><a href="#">おもてなし</a></li> <li id="SUGOSHIKATA"><a href="#">過ごし方</a></li> <li id="KYAKUSHITSU"><a href="#">客室</a></li> </ul> あまり多くてもやることは代わらないので、3つのメニュー項目でサンプルを書いてみます。 CSSでのレイアウトはfloatでボックスを並べて、幅と高さを指するだけです。この時、ブラウザごとにデフォルトの初期値が異なるプロパティがあるため、その部分を先に初期化しておきます。 /* 初期化 */ #NAV,#NAV *{ margin:0; padding:0; } /* レイアウト */ #NAV { width:960px; height:60px; } #NAV li { float:left; width:160px; height:60px; } ここまでで大まかなレイアウトはできていますが、a要素がまだインライン要素なので、ボタン全域をカバーできていません。なのでブロック要素にします。 メニューの●も消しましょう。 /* 初期化 */ #NAV,#NAV *{ margin:0; padding:0; } /* レイアウト */ #NAV { width:960px; height:60px; } #NAV li { list-style:none; float:left; width:160px; height:60px; } #NAV a { display:block; } 今回の場合、CSSで画像を表示する方法としてbackground(背景画像)を利用します。 アクティブ時(hover)の画像だけを個別に指定し、全体の画像をul要素に一括で指定しておくと記述がすっきりします。 /* 初期化 */ #NAV { width:960px; height:60px; background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 0 0; } /* レイアウト */ #NAV li { list-style:none; float:left; width:160px; height:60px; } #NAV a { display:block; } /* ロールオーバー時の画像 */ #NAV #OMOTENASHI a:hover { background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 0 60px; } #NAV #SUGOSHIKATA a:hover { background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 160px 60px; } #NAV #KYAKUSHITSU a:hover { background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 320px 60px; } 最後に文字が画像にかぶっているので画面の外に飛ばして完成です。 /* 初期化 */ #NAV { width:960px; height:60px; background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 0 0; } /* レイアウト */ #NAV li { list-style:none; float:left; width:160px; height:60px; } #NAV a { display:block; text-indent:-9999px; } /* ロールオーバー時の画像 */ #NAV #OMOTENASHI a:hover { background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 0 60px; } #NAV #SUGOSHIKATA a:hover { background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 160px 60px; } #NAV #KYAKUSHITSU a:hover { background:url(http://www.kagaya.co.jp/images/menu_gNav.gif) no-repeat 320px 60px; } と作りかたを書いたのはいいのですが・・・ この方法はサーバーの負担を減らせるので大規模サイトでの利用は考慮できますが、デメリットもあるためあまりおすすめしません。 CSSでのロールオーバーはまだ完全に環境が整っていない状況です。 現状では以下のリンク先のようなjavascriptを使う方が適していると思います。 http://css-happylife.com/log/javascript/000157.shtml

katsunof
質問者

お礼

早速の回答ありがとうございます。 よくわかりました。 解決することができましたありがとうございました! ところで、 #NAV,#NAV *{ margin:0; padding:0; } の記述がよくわからないのですが、 #NAV { margin:0; padding:0; } ではいけないのでしょうか? なぜ#NAVを二つ並べるのでしょうか? お時間あればご教授ください。

関連するQ&A

  • CSSでグローバルナビゲーションメニューをつくりたい

    CSSで、グローバルナビゲーションメニューのボタンリンクをコーディングしたいと思っています。ボタンをマウスでポインタしたらロールオーバーし、カレントページのボタンはマウスでポイントした時と、同じようにロールオーバー画像を表示させたいと思っておりますが、可能なのでしょうか?

  • 【CSS】ナビゲーション ロールオーバー(画像使用)

    こんにちは。 ナビゲーションをCSSで画像ロールオーバーを試みたのですが 上手くいきません。 下記URLでファイルを参照いただき、どこが間違っているのかご教授いただけますでしょうか。 どうぞ宜しくお願い申し上げます<(_ _)> <参照HTML>http://www.rough-inc.jp/ <参照CSS>http://www.rough-inc.jp/css/style.css <使用の画像>※下記2種類 http://www.rough-inc.jp/images/navi.gif http://www.rough-inc.jp/images/navi_bg.gif

    • ベストアンサー
    • HTML
  • グローバルナビゲーション(カレントページ・マウスオーバー)の作り方を教

    グローバルナビゲーション(カレントページ・マウスオーバー)の作り方を教えてください。 個別ページ毎にactなどとクラスをいちいち割り振るのではなく、JavaScriptで、パッと一気に処理したいと考えています。 ネットを探し回って、「カレントページ」「マウスオーバー」それぞれに対応する記述は見つけたのですが、それらを組み合わせると期待通りの動作となりません。具体的には、カレントページで、グローバルメニューをマウスオーバーした際、マウスオーバー画像へ変わるまではよいのですが、マウスアウトした時点で、カレントではない、ノーマル画像へと変更されてしまいます。(リロードすると、カレントメニュー画像へと戻るのですが…) 「カレントページにいるときは、マウスオーバー画像を表示させずにカレントメニュー画像のままにしとく」 あるいは、 「カレントページでマウスアウトした際はカレントメニュー画像を、その他のページでマウスアウトした際はノーマルメニュー表示させる」ようにするためには、どうしたらよいでしょうか? スクリプトそのものを教えていただけると一番有難いのですが、難しいようであれば、参考になるサイト等でも構いません。何らしかのヒントだけでも、誰かくださいー。

  • css

    プリント時のCSS設定についておたずねします。 現在index.htmlとindex.cssがあります。 index.htmlに ----------------------------------------------------------- <link href="index.css" rel="stylesheet" type="text/css" media="all" /> ----------------------------------------------------------- としてindex.cssを読み込み index.css内では ----------------------------------------------------------- body{ background:url("../images/bg_body.gif") repeat-x; } ----------------------------------------------------------- として、bodyの背景に画像を貼り付けています。 これを印刷時にはbodyに指定している背景画像を非表示にして 印刷させたいのです。 ※ブラウザの詳細設定「背景の色とイメージを印刷する」にはチェックを入れたまま。 別途cssを用意しhtml側で ----------------------------------------------------------- <link href="print.css" rel="stylesheet" type="text/css" media="print" /> ----------------------------------------------------------- とすれば出来そうなのですが、ちょっと答えが出ません・・・ そもそもなぜこのような事がやりたいのかというと コンテンツ内容が長くなった時、印刷すると複数ページに渡りますが、 <body>に指定した画像が、2ページ目、3ページ目にも表示される為です。 背景にしている画像は高さを十分に確保しており横32px×縦3000px位で、 一番上(0pxの高さ)から150px位の高さまで単純なグラデーションをかけたものです。 151px以降は1色のベタ塗りという感じです。 ブラウザ閲覧上はコンテンツ内容が長くても背景画像のグラデは ページ上部のみ表示されるのですが、印刷時に2ページ目、3ページの上部に グラデが表示されてしまうという事です。

  • 1枚画像で作るCSSのナビゲーション・ロールオーバーが上手く動作しません。

    はじめまして。初歩的な質問で非常に申し訳ないのですが 今日1日自力で頑張ってみたのですがどうしても解決できないので、ご教授いただけないかと思い書き込ませていただきました・・・・。 ナビゲーションメニューを作っているのですが、 1枚画像でロールオーバーという方法でやっています。 [やりたいこと] 「横978px 縦40pxの画像を使って 6つのメニューに分けて、ロールオーバーをしているようにみせる」 [うまくいかない事] ・横並びにしたいのに、なぜか画像が縦に6つ並んでしまっている状態。 ・最初の「home」以外が全くロールオーバーしてくれない・・・ どこかおかしなところがあれば教えてください・・ よろしくお願いいたします。 【HTML】 <div id="navigation"> <ul> <li id="bttop"><a href="#" title="Home">Home</a></li> <li id="btdai"><a href="#" title="menu1">menu1</a></li> <li id="btsyo"><a href="#" title="menu2">menu2</a></li> <li id="btweb"><a href="#" title="menu3">menu3</a></li> <li id="btmap"><a href="#" title="menu4">menu4</a></li> <li id="bttel"><a href="#" title="menu5">menu5</a></li> </ul> </div> 【CSS】 #navigation { position: absolute; width: 978px; } #navigation ul { width: 978px; height:40px; margin: 0; padding: 0; list-style: none; } #navigation li { margin: 0; padding: 0; width: 978px; height: 40px; text-indent: -9999px; } #navigation li a { width: 163px; height: 40px; text-decoration: none; display: block; float:left; } #navigation li#bttop { background: url(img/navi_bar.jpg) no-repeat 0px 0px; } #navigation li#btdai { background: url(img/navi_bar.jpg) no-repeat 163px 0px; } #navigation li#btsyo { background: url(img/navi_bar.jpg) no-repeat 326px 0px; } #navigation li#btweb { background: url(img/navi_bar.jpg) no-repeat 489px 0px; } #navigation li#btmap { background: url(img/navi_bar.jpg) no-repeat 652px 0px; } #navigation li#bttel { background: url(img/navi_bar.jpg) no-repeat 815px 0px; } /* マウスオーバー時の指定 ---------------------------------------------------- */ #navigation li#bttop a:hover { background: url(img/navi_bar.jpg) no-repeat 0px -40px; } #navigation li#btdai a:hover { background: url(img/navi_bar.jpg) no-repeat 163px -40px; } #navigation li#btsyo a:hover { background: url(img/navi_bar.jpg) no-repeat 326px -40px; } #navigation li#btweb a:hover { background: url(img/navi_bar.jpg) no-repeat 489px -40px; } #navigation li#btmap a:hover { background: url(img/navi_bar.jpg) no-repeat 652px -40px; } #navigation li#bttel a:hover { background: url(img/navi_bar.jpg) no-repeat 815px -40px; }

  • ナビゲーションにCSSで画像入れるには

    宜しくお願いします。 制作ソフトはDreamweaver8、XHTML+CSSレイアウトでデザインビューでやっています。 CSSでのナビゲーションについて質問させて頂きます。 横型の8項目あるナビゲーションを、画像で作りたいのです。 そしてCSSで高さ40に指定した「#navi」の中で、改行しながら8項目入力しました。 8ヶとも斜体にしリンク設定して、CSSの「#navi p」を作りフロートを左、マージンと余白を0にすると横並びになりました。 そして「#navi p a」のCSSを作り、表示をブロックにして高さ40幅100に。「#navi p em」で可視性を非表示に。 ここからです。ここからこの100×40のリンク箇所に、ナビ画像を「a:link a:visited a:hover a:active」の4つ×8ヶ入れたいのです。 CSSで背景として入れると思うのですがやり方がわかりません。 もし分かる方おられましたら、宜しくお願いします。

  • CSS による画像を使ったロールオーバー

    よろしくお願いします。 CSSを使って、画像のロールオーバーをしようとしています。 HTMLの構成としては、 タイトル画像(幅800px)の下に、CSSを使って作った ロールオーバーするメニューを横並びで配置したいと思っています。 http://edo-freiheit.sakura.ne.jp/eblog/2006/06/css_2.html のサイトを参考に(ほとんどまる写しですが)して、 作成してみたのですが、HTML全体を左寄せしても、中央寄せ してもロールオーバーしたメニューの項目の左側に隙間というか 余白が入ってしまい、上のタイトル画像とズレが生じててしまいます。 この余白をなくす方法がありましたらお教え下さい。

    • ベストアンサー
    • HTML
  • cssスプライト positionが効かない

    現在サイトを制作中で、グローバルナビのcssスプライトでつまずいてしまいました。 background-positionがなぜか効きません、、、、。 htmlとcssのチェックをしていただけないでしょうか?? どなたか親切なかた宜しくお願い致します!! <div id="gnav"> <ul> <li class="gnav_1"><a href="#"><img src="images/gnav_home.png" width="164" height="60" alt="ホーム" /></a></li> <li class="gnav_2"><a href="#"><img src="images/gnav_intro.png" width="164" height="60" alt="初めての方へ" /></a></li> <li class="gnav_3"><a href="#"><img src="images/gnav_staff.png" width="164" height="60" alt="スタッフ紹介" /></a></li> <li class="gnav_4"><a href="#"><img src="images/gnav_price.png" width="164" height="60" alt="料金" /></a></li> <li class="gnav_5"><a href="#"><img src="images/gnav_access.png" width="164" height="60" alt="アクセス" /></a></li> <li class="gnav_6"><a href="#"><img src="images/gnav_q&a.png" width="164" height="60" alt="よくあるご質問" /></a></li> </ul> </div><!--gnav--> --------------------------------css------------------------------ #gnav { overflow: hidden; } #gnav ul { margin: 24px 0 0 7px ; } #gnav ul li { float: left; width: 164px; height:60px; background: url(images/gnav_on.png) 0 0 no-repeat; } #gnav ul li a { display:block; } .gnav_2 { background-position: -164px 0; } .gnav_3 { background-position: -328px 0; } .gnav_4 { background-position: -492px 0; } .gnav_5 { background-position: -656px 0; } .gnav_6 { background-position: -820px 0 ; } #gnav ul li a:hover img{ visibility:hidden; }

    • ベストアンサー
    • CSS
  • IE6とXHTML+CSS

    XHTML+CSSでサイトを制作したのですがIE7で確認すると正常に映るのですがIE6で確認すると画像がズレたりロールオーバーのオーバー時の画像が表示されなかったりしてしまいます!! どうすれよいのでしょうか。。。詳しい方アドバイス等聞かせてください!また参考になるようなサイトのURLを教えてください。よろしくお願いします。

    • ベストアンサー
    • HTML
  • IE6とXHTML+CSS

    外部スタイルシート+XHTMLでサイトを作成したのですがその際メニュー項目のロールオーバーのオーバー時がIE7だと正常に見えるのですがIE6だとオーバー時の画像が消えてしまいます。その部分の外部スタイルシートとXHTMLをそれぞれ記述するので詳しい方アドバイスお願いします!ちなみにメニューボタンの高さは一緒で幅はそれぞれ違います。 <XHTML> <div id="sabNavi"> <ul> <li class="smenu01"><a href="#">サイトマップ</a></li> <li class="smenu02"><a href="#">プライバシーポリシー</a></li> <li class="smenu03"><a href="#">お問合せ</a></li> </ul> </div> <外部スタイルシート> #sabNavi{ width:300px; } #sabNavi a{ height:20px; display:block; text-indent:-9999px; } #sabNavi a:hover{ background-position:0 -20px; } .smenu01 a{ background:url(images/btn_sitemap.gif) no-repeat 0 0; width:71px; } .smenu02 a{ background:url(images/btn_privacy.gif) no-repeat 0 0; width:108px; } .smenu03 a{ background:url(images/btn_information.gif) no-repeat 0 0; width:55px; } .smenu01:hover{ background:url(images/btn_over_sitemap.gif) no-repeat 0 0; } .smenu02:hover{ background:url(images/btn_over_privacy.gif) no-repeat 0 0; } .smenu03:hover{ background:url(images/btn_over_information.gif) no-repeat 0 0; }

専門家に質問してみよう