Vol.10 レスポンシブWebデザインでつくる「グローバルナビゲーション」
ヘッダーに続き、グローバルナビゲーションを完成させていく。画像を使わないテキストのナビなので、比較的簡単な作りになっている。まずは、「style.css」の「a要素」のプロパティを「body要素」の下に記述する。
「style.css」
/*========================================== body ===========================================*/ body { width: 100%; background-color:#FFF; font-family:'Helvetica Neue', Helvetica, Arial, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', Meiryo, メイリオ, sans-serif; color:#000; } a { color:#000; text-decoration:none; } a:hover { color:#555; text-decoration:underline; }
続いて「style.css」にグローバルナビゲーションのスタイルを記述する。コード黒枠の右上にマウスオーバーで表示される「ソースを表示」からコピー。
「style.css」
@charset "utf-8"; /* /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_ 全デバイス共通のスタイルとスマートフォン向けレイアウト指定 /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/ /*========================================== body ===========================================*/ body { width: 100%; background-color:#FFF; font-family:'Helvetica Neue', Helvetica, Arial, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', Meiryo, メイリオ, sans-serif; color:#000; } a { color:#000; text-decoration:none; } a:hover { color:#555; text-decoration:underline; } /*========================================== ヘッダーのスタイル ===========================================*/ header { text-align:center; margin:0 auto; } header h1 { padding:15px 5px 15px 5px; } header h1 img { width:100%; height:auto; max-width:200px; } header img { width:100%; height:auto; max-width:960px; } /*========================================== グローバルナビゲーションのスタイル ===========================================*/ #gnav ul { text-align:center; margin:0 auto; } #gnav ul li { float: left; width: 50%; border-bottom: 2px solid #000; padding-top: 15px; padding-bottom: 15px; } #gnav ul li a{ display: block; } /* タブレット向けレイアウト指定:521px~960px */ @media only screen and (min-width: 521px) { } /* PC向けレイアウト指定:961px以上では固定レイアウト */ @media only screen and (min-width: 961px) { }
まずは「全デバイス共通のスタイルとスマートフォン向けレイアウト指定」に重点をおき、2段組み×3列のナビを作っていく。
▲2段組みのナビ
説明するのは下記のナビゲーションのスタイル
/*========================================== グローバルナビゲーションのスタイル ===========================================*/ #gnav ul { text-align:center; margin:0 auto; } #gnav ul li { float: left; width: 50%; border-bottom: 2px solid #000; padding-top: 15px; padding-bottom: 15px; } #gnav ul li a{ display: block; }
「ul要素」全体にセンター揃えの指定をし、「li要素」では「floatプロパティ」に「left」を指定し、要素を左に回り込ませる。2段組みのボックスを作成するので、「li要素」に「width: 50%;」と指定する。「body要素」が「width: 100%;」となっているため、子要素であるidセレクタ「gnav」も値が継承されるので「width: 100%;」となる。すなわち50%と50%の2段組みのナビが、どのデバイスで見ても100%横幅いっぱいに表示されるということである。
「border」のスタイルを記述し、「padding」で天地を整える。最後にリストの「a要素」を「ブロックレベル要素」にする。これは元々「a要素」は「インライン要素」であり、高さを持たないためである。なので高さを確保できる「ブロックレベル要素」へと変換する必要があるのだ。これでスマートフォン用の一通りのスタイルは完成。
続いて「index.html」にオーソドックスなナビゲーションを記述。
「index.html」
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <link rel="stylesheet" href="css/reset.css"> <link rel="stylesheet" href="css/style.css"> <title>MY BLOG</title> <!--[if lt IE 9]> <script src="js/html5shiv.js"></script> <![endif]--> <!--[if lt IE 9]> <script src="js/css3-mediaqueries.js"></script> <![endif]--> </head> <body> <div id="wrap"> <!-- ヘッダー --> <header> <h1><img src="images/logo.jpg" alt="俺のブログ"></h1> <img src="images/topimage.jpg" alt="俺のブログ"> </header> <!-- グローバルナビゲーション --> <nav id="gnav"> <ul class="cf"> <li><a href="#">HOME</a></li> <li><a href="#">COLUMN</a></li> <li><a href="#">SNS</a></li> <li><a href="#">PROFILE</a></li> <li><a href="#">ABOUT</a></li> <li><a href="#">CONTACT</a></li> </ul> </nav> </div><!-- #wrap end --> </body> </html>
説明するのは下記の部分。
<!-- グローバルナビゲーション --> <nav id="gnav"> <ul class="cf"> <li><a href="#">HOME</a></li> <li><a href="#">COLUMN</a></li> <li><a href="#">SNS</a></li> <li><a href="#">PROFILE</a></li> <li><a href="#">ABOUT</a></li> <li><a href="#">CONTACT</a></li> </ul> </nav>
リンク先はまだ設定しなくて良い。ここで注意が1点。「ul要素」に指定したclassセレクタの「cf」である。これは、「Vol.6 レスポンシブWebデザインの基本構造」のときにダウンロードしてもらった「reset.css」の中に記述されているclassセレクタであり、「回り込み解除」の指定となっている。
「reset.css」の下のあたり
/* TRIAINAでは以下のコードを追加しています。 */ ol, ul { list-style: none; } /* clearfix */ .cf { zoom: 1; } .cf:before, .cf:after { content: ""; display: table; } .cf:after { clear: both; }
「float」指定をしている要素に対しての「回り込み解除」である。「class=”cf”」とするだけなので、非常に使いやすい。
それでは、実際にPCで見てみよう。
【グローバルナビ】
ウインドウ幅を広げたり、狭くしたりしてグローバルナビ部分を見てほしい。2段×3列のナビが、どのサイズで見ても横幅が画面全体に100%表示されているのが分かるだろう。これは「body要素」の「width: 100%;」の指定をそのまま継承しているからであり、作成中のサイトは現段階では最大960pxにする必要がある。
#gnav ul { text-align:center; margin:0 auto; max-width: 960px; }
「#gnav ul」の中に「max-width: 960px;」としてやるだけである。では見てみよう。
「グローバルナビ」
これでナビ部分は、960px以上のウインドウサイズでは固定され表示される。次に521px以上では2段×3列のグローバルナビを、横1列にしていく。タブレット向けレイアウト指定の521px~960pxの「メディアクエリ」指定内にCSSを追加(上書き)してやればいい。
▲521px以上ではナビが横1列
/* タブレット向けレイアウト指定:521px~960px */ @media only screen and (min-width: 521px) { #gnav { border-bottom: 5px double #000; margin-top: 10px; } #gnav ul { margin-bottom: 10px; } #gnav ul li { width: 16.6666667%; border-bottom: none; } }
要は、スマートフォン向けスタイルの変更箇所を、タブレット向けスタイルのメディアクエリ指定内で、変更したものを上書きしてやればいいのだ。まずは新たに「#gnav」全体のスタイルを記述。スマートフォン向けのスタイルでは、ナビが3列であったため「li要素」それぞれに「border」の指定をしていたが、今度は横1列、全体のボーダー線を「#gnav」に指定し、「margin」で余白の調整をする。スマートフォン向けスタイルでは「ul要素」には、「max-width: 960px;」を指定していたが、タブレット向けスタイルに追加した「#gnav」全体は「body」の「width: 100%;」を継承しているため、ボーダー線は画面サイズ一杯に表示される。ちなみに「ul要素」はスマートフォン向けスタイルで「max-width: 960px;」と指定しているので、タブレット向けスタイルの「ul要素」も最大幅960pxのままである。変更をメディアクエリ指定内に上書きしない箇所は、そのままの値を共通して持つのである。そして、スマートフォン用スタイルでは「ul要素」の「margin-bottom」が0だったのに対して、タブレット向けスタイルでは、「margin-bottom: 10px;」と上書き。
%でwidth指定
スマートフォン向けスタイルの「li要素」は2段組みだったので「width: 50%;」としていた所を、タブレット向けスタイルでは横1列なので6段にする。pxで指定すると幅が固定されてしまので、521px~960px間を可変にする方法をとらなければいけない。なので、ここでも当然%で指定する。100÷6=16.6666667となり、タブレット向けスタイルの「li要素」には「width: 16.6666667%;」と上書きしてやる。
不要な値は「none」を指定
最後に、スマートフォン向けスタイルの「li要素」に指定してある「border」の値は、タブレット向けスタイルでは「#gnav」に指定してあるので、不要となる。そこで「border-bottom: none;」として「li要素」の「borderプロパティ」の値を無効にしてしまおう。
共通の値はそのままで
スマートフォン向けスタイルの記述部分は、「全デバイス共通のスタイル」も兼ね備えている。スマートフォン向けスタイルで指定した記述が、タブレット向けスタイルでも共通となるものは、同じ記述をもう一度書き込む必要はない。スマートフォン向けスタイルで変更する部分のみを、タブレット向けスタイルや、PC用固定スタイルで上書きしていけばいいのだ。ここでも「961px以上では固定レイアウト」のPC向けスタイルが、タブレット向けスタイルと同じであるため、記述する必要がないのである。
「グローバルナビ完成」
▼ ▼ ▼
以上がレスポンシブWebデザインにおける「グローバルナビゲーション」の基本的な構造である。ポイントは%指定をすること。それによりナビが可変となり、あらゆるデバイスの幅にフィットしたものとなるのだ。
次回はコンテンツ部分を作成していく。期待して待っていてほしい。