概要と目標ヘッダーを完成させよう。
ヘッダーやグローバルナビ、ハンバーガーメニュのCSSを定義し、
ヘッダー部分を完成させよう。
ヘッダーやグローバルナビ、ハンバーガーメニュのCSSを定義し、
ヘッダー部分を完成させよう。
position: fixedで固定して、
ヘッダー全体は、position: fixedで固定し、
スクリーンリーダー用のテキストは非表示にする。
class属性を追加する。
<header class="l-header" role="banner">
<div class="l-wrapper">
<h1 class="l-header-title">
<span class="screen-reader-text" lang="en">Dummy Photo Gallery</span>
<a href="./"><img src="images/logo-primary.png" srcset="images/logo-primary.png 1x, images/logo-primary@2x.png 2x" alt="Dummy Photo Gallery"></a>
</h1>
<nav class="l-header-nav" role="navigation">
<h2 class="screen-reader-text">サイト内メニュー</h2>
<button type="button" aria-controls="global-nav" aria-expanded="false">メニューを開閉する</button>
<ul id="global-nav" lang="en">
<li><a href="#">All</a></li>
<li><a href="#">Mountain</a></li>
<li><a href="#">Ocean</a></li>
<li><a href="#">River</a></li>
<li><a href="#">Lake</a></li>
<li><a href="#">Other</a></li>
</ul>
</nav>
</div>
<!-- /.l-wrapper -->
</header>
.l-header-titleのスタイルの上に、以下のCSSを記述| セレクタ | プロパティ | 値 |
|---|---|---|
.l-header |
ポジション | 固定配置モード |
| 配置位置 |
|
|
| 余白 |
|
|
| ボーダーの幅(下) |
1px
|
|
| ボーダーのスタイル(下) |
実線
|
|
| ボーダーの色(下) |
#e0e0e0
|
|
| 背景の色 |
#fff
|
| セレクタ | プロパティ | 値 |
|---|---|---|
.l-header |
余白 |
|
| セレクタ | プロパティ | 値 |
|---|---|---|
.l-header |
余白 |
|
/* Header */
.l-header {
position: fixed;
top: 0;
right: 0;
left: 0;
padding: .75em 0;
border-bottom: 1px solid #e0e0e0;
background-color: #fff;
}
.l-header-title {
float: left;
}
.l-header-nav {
float: right;
}
@media screen and (min-width: 768px) {
.l-header {
padding: 1.5em 0;
}
}
@media screen and (min-width: 1024px) {
.l-header {
padding: 1.75em 0;
}
}
footer関連のスタイルの下に、以下のCSSを記述/*
Module
-----------------------------------------------------*/
/* Accesibility */
.screen-reader-text {
position: absolute;
overflow: hidden;
clip: rect(1px, 1px, 1px, 1px);
width: 1px;
height: 1px;
}
スマホの時はドロワーメニューで表示する。
ul要素に、class属性を追加する。
<nav class="l-header-nav" role="navigation">
<h2>サイト内メニュー</h2>
<button type="button" aria-controls="global-nav" aria-expanded="false">メニューを開閉する</button>
<ul id="global-nav" class="l-global-nav" lang="en">
<li><a href="#">All</a></li>
<li><a href="#">Mountain</a></li>
<li><a href="#">Ocean</a></li>
<li><a href="#">River</a></li>
<li><a href="#">Lake</a></li>
<li><a href="#">Other</a></li>
</ul>
</nav>
| セレクタ | プロパティ | 値 |
|---|---|---|
.l-global-nav |
ポジション | 固定配置モード |
| 配置位置 |
|
|
| ボックスの幅 |
100%
|
|
| ボックスの高さ |
120%
|
|
| 余白 |
|
|
| 背景の色 |
#263238
|
|
.l-global-navの中の a要素 |
表示モード | ブロック |
| 余白(上下左右) | 1em |
|
| 文字の色 | #90a4ae |
|
| テキストの装飾 | なし | |
| 文字の太さ | 700 |
|
.l-global-navの中の a要素 のホバー時 |
背景の色 | #212121 |
| 文字の色 | #fff |
| セレクタ | プロパティ | 値 |
|---|---|---|
.l-global-nav |
ポジション | 通常配置モード |
| 余白(上下左右) | 0 |
|
| 背景の色 | 透明 | |
.l-global-navの中の li要素 |
フロート | 左 |
.l-global-navの中の li要素と隣接している li要素 |
ボックスの間隔(左) | 1em |
.l-global-navの中の a要素 |
余白 |
|
| 文字の色 | #263238 |
|
/* Global Nav */
.l-global-nav {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 3em 0;
width: 100%;
height: 120%;
background-color: #263238;
}
.l-global-nav li a {
display: block;
padding: 1em;
color: #90a4ae;
text-decoration: none;
font-weight: 700;
}
.l-global-nav li a:hover {
background-color: #212121;
color: #fff;
}
@media screen and (min-width: 768px) {
.l-global-nav {
position: static;
padding: 0;
background-color: transparent;
}
.l-global-nav li {
float: left;
}
.l-global-nav li + li {
margin-left: 1em;
}
.l-global-nav li a {
padding: .2em .5em;
color: #263238;
}
}
このままでは、スマホ時ドロワーメニューが常時表示されるので、
スマホで閲覧している時は、グローバルナビをブラウザの外に移動させておく。
/* Global Nav */
.l-global-nav {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 3em 0;
width: 100%;
height: 120%;
background-color: #263238;
transition: transform .3s ease-in-out; /* IE9非対応 */
-webkit-transform: translateX(100%); /* Android, Brackberry */
-ms-transform: translateX(100%); /* IE9 */
transform: translateX(100%);
}
.l-global-nav li a {
display: block;
padding: 1em;
color: #90a4ae;
text-decoration: none;
font-weight: 700;
}
.l-global-nav li a:hover {
background-color: #212121;
color: #fff;
}
@media screen and (min-width: 768px) {
.l-global-nav {
position: static;
padding: 0;
background-color: transparent;
-webkit-transform: translateX(0); /* Android, Brackberry */
-ms-transform: translateX(0); /* IE9 */
transform: translateX(0);
}
.l-global-nav li {
float: left;
}
.l-global-nav li + li {
margin-left: 1em;
}
.l-global-nav li a {
padding: .2em .5em;
color: #263238;
}
}
span要素で中の具を、beforeとafterでパンを作る。
ハンバーガーメニューは、span要素で、真ん中の横棒を作成し、
span要素のbeforeで上、
span要素のafterで下の横棒を作成する。
button要素に、class属性を追加し、span要素を作成する
<nav class="l-header-nav" role="navigation">
<h2 class="screen-reader-text">サイト内メニュー</h2>
<button type="button" class="button-hamburger" aria-controls="global-nav" aria-expanded="false">
<span class="hamburger">
<span class="screen-reader-text">メニューを開閉する</span>
</span>
</button>
<ul id="global-nav" class="l-global-nav" lang="en">
<li><a href="#">All</a></li>
<li><a href="#">Mountain</a></li>
<li><a href="#">Ocean</a></li>
<li><a href="#">River</a></li>
<li><a href="#">Lake</a></li>
<li><a href="#">Other</a></li>
</ul>
</nav>
| セレクタ | プロパティ | 値 |
|---|---|---|
.button-hamburger |
配置モード | 絶対配置 |
| 配置位置 |
|
|
| ボックスの重なり順序 |
1
|
|
| ボックスの幅 |
24px
|
|
| ボックスの高さ |
24px
|
|
| ボックスの間隔 |
|
|
| ボーダー(上下左右) |
0
|
|
| アウトライン |
0
|
|
| アピアランス (ベンダープレフィックス : -webkit-と-moz-) |
なし | |
| カーソルの形状 | ポインター | |
| 背景の色 | 透明 | |
.hamburger |
配置モード | 絶対配置 |
| 配置位置 |
|
|
| 表示モード | ブロック | |
| ボックスの幅 |
18px
|
|
| ボックスの高さ |
2px
|
|
| ボックスの間隔(上下左右) | 自動 | |
| 角丸(上下左右) |
4px
|
|
| 背景の色 |
#263238
|
|
.hamburgerのbeforeとafter |
コンテンツ | 空白 |
| 配置モード | 絶対配置 | |
| 表示モード | ブロック | |
| ボックスの幅 |
100%
|
|
| ボックスの高さ |
100%
|
|
| 角丸(上下左右) |
4px
|
|
| 背景の色 | 継承 | |
.hamburgerのbefore |
表示位置 | 上: -5px |
.hamburgerのafter |
表示位置 | 上: 5px |
| セレクタ | プロパティ | 値 |
|---|---|---|
.button-hamburger |
表示モード | なし |
/* Button */
.button-hamburger {
position: absolute;
top: 0;
right: 2.5%;
bottom: 0;
z-index: 1;
width: 24px;
height: 24px;
margin: auto 0;
border: 0;
outline: 0;
background-color: transparent;
cursor: pointer;
-webkit-appearance: none; /* Chrome, Safari, Opera, Android */
-moz-appearance: none; /* Firefox */
appearance: none; /* IE非対応 */
}
.hamburger {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: block;
width: 18px;
height: 2px;
margin: auto;
border-radius: 4px;
background-color: #263238;
}
.hamburger:before,
.hamburger:after {
position: absolute;
display: block;
width: 100%;
height: 100%;
border-radius: 4px;
background-color: inherit;
content: '';
}
.hamburger:before {
top: -5px;
}
.hamburger:after {
top: 5px;
}
@media screen and (min-width: 768px) {
.button-hamburger {
display: none;
}
}
bodyにクラスを付ける。
ハンバーガーメニューの動作は、jQueryを活用する。
ハンバーガーメニューをクリック時に、
body要素にクラス属性を付加し、
そのクラスが付いている時は、ドロワーメニューを表示する。
button要素に、jQuery用のclass属性「js-button-hamburger」を追加する。
<button type="button" class="js-button-hamburger button-hamburger" aria-controls="global-nav" aria-expanded="false">
<span class="hamburger">
<span class="screen-reader-text">メニューを開閉する</span>
</span>
</button>
</body>の直前に、jQuery本体(「js」 › 「lib」フォルダ内)と、<script src="js/lib/jquery-1.12.1.min.js"></script>
<script src="js/common.js"></script>
body要素に、is-active-drawer」というクラス属性をトグルするjQueryのコードと、button要素のaria-expanded属性を切り替える(true / false)jQueryのコードを記述$(function () {
/*
drawer Menu
------------------------------------------------*/
$('.js-button-hamburger').click(function () {
$('body').toggleClass('is-active-drawer');
if($(this).attr('aria-expanded') == 'false') {
$(this).attr('aria-expanded', true);
} else {
$(this).attr('aria-expanded', false);
}
});
});
body要素にクラスが付加されるかとbutton要素のaria-expanded属性が変更されているかを確認
is-active-drawerというクラスが、body要素にあれば表示する。
body要素に、is-active-drawerクラスがある時は、
非表示にしていた、グローバルナビを表示させる。
l-global-nav 関連のところに、以下のCSSを記述.is-active-drawer .l-global-nav {
-webkit-transform: translateX(0); /* Android, Brackberry */
-ms-transform: translateX(0); /* IE9 */
transform: translateX(0);
}
.hamburger 関連のところに、以下のCSSを記述.hamburger:before,
.hamburger:after {
position: absolute;
display: block;
width: 18px;
height: 2px;
border-radius: 4px;
background: #263238;
content: '';
transition: transform .2s ease-in-out; /* IE9非対応 */
}
.is-active-drawer .hamburger {
background-color: transparent;
}
.is-active-drawer .hamburger:before,
.is-active-drawer .hamburger:after {
top: 0;
background-color: #90a4ae;
}
.is-active-drawer .hamburger:before {
-webkit-transform: rotate(-45deg); /* Android, Brackberry */
-ms-transform: rotate(-45deg); /* IE9 */
transform: rotate(-45deg);
}
.is-active-drawer .hamburger:after {
-webkit-transform: rotate(45deg); /* Android, Brackberry */
-ms-transform: rotate(45deg); /* IE9 */
transform: rotate(45deg);
}