「レスポンシブ」ヘッダーを作る Part2【CSS編】
前回の記事はこちら≫「レスポンシブ」ヘッダーを作る Part1【HTML編】
今回は2回目、CSSでレスポンシブヘッダーのデザイン部分。
正直CSSができるようになれば、めちゃくちゃオシャレなヘッダーも作れちゃうんで頑張っていきましょう。
さて、最初にCSSを作る前の準備をしていきます。
前回作った「Header」フォルダのなかに「css」フォルダを作りましょう。そしてcssフォルダのなかに「master.css」というファイルを作成します。
※フォルダ階層
Header/ ├ index.html └ css/ └ master.css
そしたらindex.htmlファイルをひらいて「title」タグの上に次のコードを書いていこう。
はい、これで準備はOK。さっそくmaster.cssファイルを開いてやっていきましょう。
First Step: CSSのスタイルデザインをリセットしよう
/* Reset style */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
color: #fafafa;
list-style: none;
text-decoration: none;
}
最初にやることはCSSのスタイルをリセット。
リセットしないと…
- 変な空白が入ったり
- 残念な見た目になる
だからリセットすることは重要。
まあ最低限、絶対にリセットしなきゃいけないのは次の3つです。あとは好みでリセットしちゃってください。今回は上記のリセットスタイルでやっていきます。
margin: 0; padding: 0; box-sizing: border-box;
「*」はすべてのタグに適用してねってこと。
Next Step: ヘッダーの土台を作っていこう
/* Normal header style */
.header_bg {
background: #323232;
width: 100%;
height: 80px;
}
ここでは、ヘッダーの枠の部分を作っていきます。まあ、前回の動画でいえば黒い部分全体ってとこです。
Width(幅)の100%はコンテンツの最大幅。たとえば親要素が300pxの幅しかなかったら300pxしか大きくなりません。
今回は親要素がbodyなのでディスプレイのサイズに自動で変更されます。
- 背景色が#323232、まあ黒に近い色
- ヘッダーの幅をここでは、ディスプレイのサイズ分
- ヘッダーの高さを80pxに設定
Next Step: ヘッダーのタイトルを作っていこう
.header_contents {
width: 100%;
max-width: 1024px;
height: 100%;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.header_contents h1 {
font-size: 22px;
margin: 0 0 0 40px;
}
次にヘッダーの中にあるヘッダータイトルとヘッダーコンテンツの幅を決めていきましょう。
ヘッダータイトルもナビゲーションも全てこのheader_contentsの中に入ります。
- header_contents…コンテンツの幅をメインで決める
- コンテンツ幅は最大で1024px、それ以上は大きくならず1024pxで維持
- コンテンツ幅が1024px以下ならディスプレイのサイズに100%で表示
- display: flex→align-items: centerでコンテンツが自動で上下をあわせる
- display: flex→justify-content: space-between;でコンテンツ1024px内で自動で左右の端に
ちなみに…
display: flex; justify-content: space-between; align-items: center;
この3つの組み合わせは、めっちゃ使うので覚えておくとCSSデザインがスムーズにいきます。
Next Step: ヘッダーのナビゲーションを作っていこう
.header_nav_lists {
display: flex;
}
.header_nav_lists li {
margin: 0 40px 0 0;
}
.nav_link {
font-size: 18px;
}
はい、つぎはナビゲーション部分を作っていきましょう。display: flexもう一回でてきましたね。flexについて簡単に説明すると…
※flexとは?
簡単にいえばBlock要素を横並びにしてくれるかんじです。display: flexを使った状態で、flex-directionを設定すればたて並びや逆から表示するように指定可能。
というかんじです。
- display: flexのみ指定なのはさっき上下左右調整してあるから
- .header_nav_lists li…リストの左右を調整
Next Step: ハンバーガーメニューを作っていこう
/* Responsive menu button */
.responsive_btn {
display: none;
flex-direction: column;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
margin: 0 40px 0 0;
cursor: pointer;
position: relative;
z-index: 10;
}
.menu_line {
background: #fafafa;
border-radius: 5px;
width: 100%;
height: 5px;
margin: 4px 0;
}
というわけで、ここからハンバーガーボタンです。ちなみにここままだと、ハンバーガーボタンは表示されません。
えっ、て?はい、じゃあdisplay: noneの部分をdisplay: flexに変更しましょう。どうですか?表示されましたよね。
これは今、表示してもジャマなのでdisplay: noneで非表示にしておきましょう。次のステップでdisplay: flexの処理をしていきます。
- .responsive_btn…ハンバーガーボタンの大きさを設定
- display: noneで非表示、ディスプレイ幅が小さくなれば表示させる
- .menu_line…ハンバーガーボタンが表示される線を設定
- ハンバーガーボタンは.responsive_btnの大きさを変えれば線の長さも変更可能
Next Step: レスポンシブメニューを作っていこう
/* Responsive style */
@media screen and (max-width: 768px) {
.responsive_btn {
display: flex;
}
.header_bg {
position: relative;
}
.header_nav {
background: #323232;
width: 100%;
height: 100vh;
padding: 80px 0 0 0;
position: fixed;
top: 0;
right: -100%;
transition: .5s;
}
.header_nav_lists {
display: block;
text-align: center;
}
.header_nav_lists li {
margin: 0 0 40px;
text-align: center;
}
.nav_link {
font-size: 20px;
}
}
ここからはブラウザ幅が768px以下になったとき、レスポンシブに変更するCSSスタイルを書いていきます。
まず重要なのは、つぎのCSS。簡単にいえば、ブラウザ幅が768px以下になったら{}内のCSSにしてねってこと。
@media screen and (max-width: 768px) {
}
さて、上記の()には次の2つどちらかを指定可能。どっちでもOK。
- max-width…指定値以下になったら実行
- min-width…指定値以上になったら実行
レスポンシブメニューを作るコツとしては、position: fixedとabsoluteを使うこと。まあ正直慣れが必要。作っていくしかない。
※fixedって?
指定した要素をtop / left / bottom / rightで指定、その箇所に固定すること。
※absoluteって?
親要素にfixed / relative / stickyのどれかが使われてるときに使う。親要素のうえに文字をのっけたい(画像のうえとか)場合なんかに使う感じ。慣れが必要。
まあ要素同士を重ねたいときにfixed / relative / sticky、absoluteを使おうねって話。
- ブラウザ幅が768px以下になったら上記のCSSスタイルを適用
- .responsive_btn…display: flexでハンバーガーボタンを表示
- .header_nav…レスポンシブナビ専用のメニューを設定
- .header_nav…ハンバーガーボタンが押されたら表示するため、right: -100%で画面外へ
- レスポンシブメニューのコツはposition: fixedとabsolute
Final Step: レスポンシブナビを表示させるCSSを書こう
/* js function "menuToggle" starting only */
.menu_active {
right: 0;
}
さっきの「Next Step: レスポンシブメニューを作っていこう」で書いた.header_nav部分の表示、非表示をきりかえるCSSスタイル。
この「.menu_active」は、次のJavaScript編で使うから必ず忘れずに書いておこう。
はい、今回はここまで。
次は最後、JavaScriptをやっていきましょう。
Final Stepへ≫「レスポンシブ」ヘッダーを作る Part3【JavaScript編】