第4章 - 0002 l-body-inner-0001を作ってheaderとfooterを設置しよう

この節について

これまでmodulesディレクトリの中にモジュールのファイルを作成してきましたが、この節ではlayoutsディレクトリを作成して、その中にレイアウトのファイルを作成します。

レイアウトのクラスの作り方については、接頭辞がmod-ではなくl-になるだけで、モジュールと同じです。

この節ではまずレイアウトのクラスを作成して、次の節でその役割や特徴について説明します。

layoutsディレクトリを作成しよう

scssディレクトリの中にlayoutsディレクトリを作成します。
コマンドで作成しても良いですし、右クリックなどで開くコンテキストメニューなどからでも良いです。

コマンドで作成する場合(Mac)

tutorialディレクトリ内で以下のコマンドを実行するとlayoutsディレクトリが作成できます。

1
mkdir src/scss/layouts

Block名を決める

今回のBlock名は l-body-inner-0001 にします。

モジュールのクラスの接頭辞はmod-でしたが、レイアウトのクラスの接頭辞はl-です。

scssファイルの作成

ファイル名の命名規則はモジュールと同じで _Block名.scss です。

先ほど決めたBlock名の先頭にアンダースコア(_)を足したものがファイル名になりますので src/scss/layouts/_l-body-inner-0001.scss を作成します。

src/scss/module-list.scssの編集

src/scss/module-list.scss@import "./layouts/*"; を追記して以下のようにします。

1
2
3
4
5
6
7
8
9
// base
@import "./base/global-variables/media-queries/media-queries.scss";
@import "./base/default.scss";

// layouts
@import "./layouts/*";

// modules
@import "./modules/*";

レイアウトの作成

public/html/template.html のbodyの中に以下のように追記します。

1
2
3
4
5
6
7
8
9
10
11
<div class="l-body-inner-0001">
<div class="l-body-inner-0001__header-wrapper">
ここにヘッダーのモジュールが入ります。
</div>
<div class="l-body-inner-0001__contents-wrapper">
ここにコンテンツ領域のレイアウトが入ります。
</div>
<div class="l-body-inner-0001__footer-wrapper">
ここにフッターのモジュールが入ります。
</div>
</div>

src/scss/layouts/_l-body-inner-0001.scss に以下のように記述します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.l-body-inner-0001 {
position: relative;
min-height: 100vh;
padding-bottom: 41px;
box-sizing: border-box;
background-color: #f7f7f7;
@media #{$g__is-md} {
min-height: 0;
}
.l-body-inner-0001__header-wrapper {
}
.l-body-inner-0001__contents-wrapper {
}
.l-body-inner-0001__footer-wrapper {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
}
}

ヘッダーモジュールを設置する

module-list.htmlに作成しておいたmod-header-0001をコピー&ペーストして以下のようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<div class="l-body-inner-0001">
<div class="l-body-inner-0001__header-wrapper">
<header class="mod-header-0001">
<div class="mod-header-0001__inner">
<div class="mod-header-0001__logo-area">
<a href="#" class="mod-header-0001__logo">
ロゴ
</a>
</div>
<ul class="mod-header-0001__button-group">
<li class="mod-header-0001__login-button-wrapper">
<a href="#" class="mod-button-0001 mod-button-0001--size-sm">ログイン</a>
</li>
<li class="mod-header-0001__sign-up-button-wrapper">
<a href="#" class="mod-button-0001 mod-button-0001--size-sm mod-button-0001--secondary">新規登録</a>
</li>
</ul>
</div>
</header>
</div>
<div class="l-body-inner-0001__contents-wrapper">
ここにコンテンツ領域のレイアウトが入ります。
</div>
<div class="l-body-inner-0001__footer-wrapper">
ここにフッターのモジュールが入ります。
</div>
</div>

フッターモジュールを設置する

module-list.htmlに作成しておいたmod-footer-0001をコピー&ペーストして以下のようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<div class="l-body-inner-0001">
<div class="l-body-inner-0001__header-wrapper">
<header class="mod-header-0001">
<div class="mod-header-0001__inner">
<div class="mod-header-0001__logo-area">
<a href="#" class="mod-header-0001__logo">
ロゴ
</a>
</div>
<ul class="mod-header-0001__button-group">
<li class="mod-header-0001__login-button-wrapper">
<a href="#" class="mod-button-0001 mod-button-0001--size-sm">ログイン</a>
</li>
<li class="mod-header-0001__sign-up-button-wrapper">
<a href="#" class="mod-button-0001 mod-button-0001--size-sm mod-button-0001--secondary">新規登録</a>
</li>
</ul>
</div>
</header>
</div>
<div class="l-body-inner-0001__contents-wrapper">
ここにコンテンツ領域のレイアウトが入ります。
</div>
<div class="l-body-inner-0001__footer-wrapper">
<footer class="mod-footer-0001">
<div class="mod-footer-0001__copy-area">
<a href="#" class="mod-footer-0001__copy">
&copy;中野ピク氏
</a>
</div>
</footer>
</div>
</div>

この節で編集したファイルの全容

src/scss/module-list.scss は以下の通りになりました。

1
2
3
4
5
6
7
8
9
// base
@import "./base/global-variables/media-queries/media-queries.scss";
@import "./base/default.scss";

// layouts
@import "./layouts/*";

// modules
@import "./modules/*";

public/html/template.html は以下の通りになりました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>中野ピク氏流CSS設計</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="../stylesheets/html5reset-1.6.1.css">
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous" />
<link rel="stylesheet" href="../stylesheets/module-list.css">
</head>
<body>
<div class="l-body-inner-0001">
<div class="l-body-inner-0001__header-wrapper">
<header class="mod-header-0001">
<div class="mod-header-0001__inner">
<div class="mod-header-0001__logo-area">
<a href="#" class="mod-header-0001__logo">
ロゴ
</a>
</div>
<ul class="mod-header-0001__button-group">
<li class="mod-header-0001__login-button-wrapper">
<a href="#" class="mod-button-0001 mod-button-0001--size-sm">ログイン</a>
</li>
<li class="mod-header-0001__sign-up-button-wrapper">
<a href="#" class="mod-button-0001 mod-button-0001--size-sm mod-button-0001--secondary">新規登録</a>
</li>
</ul>
</div>
</header>
</div>
<div class="l-body-inner-0001__contents-wrapper">
ここにコンテンツ領域のレイアウトが入ります。
</div>
<div class="l-body-inner-0001__footer-wrapper">
<footer class="mod-footer-0001">
<div class="mod-footer-0001__copy-area">
<a href="#" class="mod-footer-0001__copy">
&copy;中野ピク氏
</a>
</div>
</footer>
</div>
</div>
</body>
</html>

src/scss/layouts/_l-body-inner-0001.scss は以下の通りになりました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.l-body-inner-0001 {
position: relative;
min-height: 100vh;
padding-bottom: 41px;
box-sizing: border-box;
background-color: #f7f7f7;
@media #{$g__is-md} {
min-height: 0;
}
.l-body-inner-0001__header-wrapper {
}
.l-body-inner-0001__contents-wrapper {
}
.l-body-inner-0001__footer-wrapper {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
}
}

表示確認

public/html/template.html をブラウザで開いて確認してみてください。

この節の終わりに

レイアウトのクラスとHTML文書構造を作成して、その中にmod-header-0001とmod-footer-0001を設置することによって、ページの雛形ができました。

次の節ではこのコードを読み返しながら、l-body-inner-0001の役割や特徴について解説していきます。

続きはこちら

とてもやさしいCSS設計チュートリアルの目次へ戻る