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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
HTMLで文字が重なって表示されます
-
widthやheightの数値に単位(px...
-
form input テキストを上下中央...
-
li 黒丸含んで移動する方法
-
指定したborderの一部が表示さ...
-
IEとFireFoxでCSSの見た目をそ...
-
divで囲まれたpaddingの指定を...
-
定義リストに下線をつけたいと...
-
インラインフレーム内の表示位...
-
css初心者 フレックスボックス...
-
CSSがなぜかfont-sizeだけ効か...
-
スクロールボックスを中央に配...
-
HP作成で背景画像が表示されな...
-
<li>の黒い点を消したい。
-
Media Queries 4 で 非推奨とな...
-
添付のような飾り枠内に箇条書...
-
Liで背景画像が表示されない (...
-
【CSS】ヘッダーの高さが不明の...
-
DIVタグ(中央揃え)内の画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
css初心者 フレックスボックス...
-
CSSがなぜかfont-sizeだけ効か...
-
【CSS】ヘッダーの高さが不明の...
-
画像イメージの上下左右、欲し...
-
CSS、width100%でもできる余白
-
スクロールボックスを中央に配...
-
<div>と<div>の間の10px程の...
-
CSSで背景画像を一番下にもって...
-
余分な縦スクロールバーが出て...
-
CSS:animation開始位置の設定
-
form input テキストを上下中央...
-
Media Queries 4 で 非推奨とな...
-
CSSでボックスのheightが0になる
-
W3Cのソースコードの検証サービ...
-
表示倍率を変えるとレイアウト...
-
定義リストに下線をつけたいと...
-
背景が下まで表示されないんです。
-
footer を横幅いっぱいに広げる...
おすすめ情報