
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の文字が縦書きになる
-
レスポンシブで困っています・・
-
HTML/CSSを使って写真のような...
-
テーブルの行を折りたたみたい...
-
HTMLタグのあるCSVファイルを利...
-
HTMLでクロス抽出したい
-
ホームページの制作について教...
-
テーブルのセルデータを自動改...
-
HTML&CSS メディアクエリにつ...
-
、URL化させるにはどうしたらい...
-
アコーディオンメニューが思う...
-
テーブルタグのセルの幅の一部...
-
GoogleSearchControlにホームペ...
-
HTML&CSS メディアクエリについ...
-
HTML&CSS メディアクエリ
-
HTML&CSSについて。
-
HTML &CSSとHTML5&CSS3 違い
-
HTML&CSSとHTML5&CSS3の違い...
-
HTML&CSSとHTML5&CSS3の違い...
-
列のどこをクリックしてもソー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
テーブルの行を折りたたみたい...
-
レスポンシブで困っています・・
-
HTMLでクロス抽出したい
-
iPhoneで HTMLファイルを閲覧
-
HTML/CSSを使って写真のような...
-
ホームページの制作について教...
-
スマホでHTMLファイルを開いて...
-
GoogleSearchControlにホームペ...
-
メモ帳の段落の揃え方
-
css初心者 フレックスボックス...
-
スマホ(android)のタッチパネ...
-
WEBページを強制的に横画面で見...
-
角丸画像の背景色を透明にした...
-
、URL化させるにはどうしたらい...
-
HTMLタグのあるCSVファイルを利...
-
静止画画像をクリックすると音...
-
テーブルのセルデータを自動改...
-
テーブルタグのセルの幅の一部...
-
スマホで、左右にスワイプして...
おすすめ情報