![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
CSSのcurrentを使ったグローバルナビゲーションの作り方を教えてください。
以下のように二枚のつながった背景画像をロールオーバーさせるCSSのcurrentを使ったグローバルナビゲーションの作り方を教えてください。
画像URLと参考サイト
http://www.kagaya.co.jp/images/menu_gNav.gif
http://www.kagaya.co.jp/index.php
No.4ベストアンサー
- 回答日時:
#NAV,*{ }
と記述するなら大抵の場合
*{ }
で同じ効果が得られます。
ですがこのままではナビゲーション以外の要素にもmarginとpaddingの設定がされてしまい見た目が崩れる原因になります。
#NAV,#NAV * { }
これはあくまでナビゲーションとその子要素への指定に限定している感じです。
*(全称セレクタ)を使った初期化も簡単な例として提示しましたが、実はそんなに多く使われてはいません。
全称セレクタは全ての要素に適用を対象としているので、input要素のように各ブラウザによってCSSでも調整が困難な要素にまで設定が適用されてしまうためです。
実際には以下のように個別に指定する方法が多いのではないかと思います。
body, p, ul, ol, h1 , h2 , h3 , h4 , h5 , h6 {
margin:0;
padding:0;
}
なるほどわかりました!
#NAV,#NAV * { }とは
#NAVと#NAVの中の全ての子要素?に適用する書き方という事ですね!
ご丁寧な解説でとても助かりました!ありがとうございました!
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;
}
丁寧な解説本当にありがとうございます!
なるほど、よくわかりました。
しかし、
#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.s …
早速の回答ありがとうございます。
よくわかりました。
解決することができましたありがとうございました!
ところで、
#NAV,#NAV *{
margin:0;
padding:0;
}
の記述がよくわからないのですが、
#NAV {
margin:0;
padding:0;
}
ではいけないのでしょうか?
なぜ#NAVを二つ並べるのでしょうか?
お時間あればご教授ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSでサイトの背景に画像を組み込みたいのですが反映されません 2 2022/11/22 16:21
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS 画像が分割されて切り替わる、ループアニメーションが作りたい 7 2023/05/27 17:12
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- ホームページ作成・プログラミング ホームページ作成について。「ワードプレスではありません」。 3 2023/08/13 14:44
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS サイトをマルチデバイス対応にする為の準備や、CSSなどのおすすめサンプル集やアドバイスを頂きたいです 1 2022/07/13 22:15
- HTML・CSS 【HTML】【CSS】【Swiper】 元の画像は横1200×縦600なのですが、実際のサイト上に反 5 2022/07/16 13:57
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
中点「・」の改行について
-
画像イメージの上下左右、欲し...
-
Media Queries 4 で 非推奨とな...
-
CSSでボックスのheightが0になる
-
ページを拡大縮小でborderが消...
-
CSS上での計算を行うためのルー...
-
CSS、width100%でもできる余白
-
form input テキストを上下中央...
-
プルダウンで長い名前の選択肢...
-
float を使うと隙間ができる
-
横並びリスト ブラウザ縮小 カ...
-
cssで「下よせ」ってどうやって...
-
CSSで画像を同じ位置に重なり合...
-
Safariでheight:100%のボックス...
-
外部CSSファイルからのリンク色...
-
【CSS】ヘッダーの高さが不明の...
-
IEとFireFoxでの指定位置のズレ...
-
CSS:animation開始位置の設定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
画像イメージの上下左右、欲し...
-
css初心者 フレックスボックス...
-
CSSでボックスのheightが0になる
-
CSS、width100%でもできる余白
-
CSS:animation開始位置の設定
-
スクロールボックスを中央に配...
-
form input テキストを上下中央...
-
表示倍率を変えるとレイアウト...
-
W3Cのソースコードの検証サービ...
-
<div>と<div>の間の10px程の...
-
CSSで背景画像を一番下にもって...
-
CSSがなぜかfont-sizeだけ効か...
-
table周辺の隙間をなくしたい。
-
footer を横幅いっぱいに広げる...
-
【CSS】ヘッダーの高さが不明の...
-
CSS3で角丸写真にシャドーを付...
-
定義リストに下線をつけたいと...
-
Media Queries 4 で 非推奨とな...
おすすめ情報