第3章 7節 mod-header-0001を作ろう

この節について

この節ではヘッダーのモジュールを作成していきますが、そろそろBEMに慣れてきたことと思います。
この節で作成するモジュールは、これまでのものよりは少しElementクラスが多いですが、Modifierクラスはありません。

このモジュールの作成を通して、Elementクラスの命名規則についてしっかりと理解していきましょう。

HTML

まずは以下のHTMLを public/html/module-list.html に追記します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<header>
<div>
<div>
<a href="#">
ロゴ
</a>
</div>
<ul>
<li>

</li>
<li>

</li>
</ul>
</div>
</header>

Block名を決める

今回のBlock名は mod-header-0001 にします。

scssファイルの作成

ファイル名の命名規則は _Block名.scss です。

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

Blockクラス

まずはBlockクラスを以下の通り記述します。
先ほど決めたBlock名がそのままクラス名になります。

1
2
3
4
5
.mod-header-0001 {
padding: 12px 0;
background-color: #ffffff;
border-bottom: 1px solid #dddddd;
}

Blockクラスをモジュール単位の一番外側のタグに付与します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<header class="mod-header-0001">
<div>
<div>
<a href="#">
ロゴ
</a>
</div>
<ul>
<li>

</li>
<li>

</li>
</ul>
</div>
</header>

Elementクラス(1〜6個目)

そろそろBEMに慣れてきていることと思いますし、一度にまとめて追記する方が記事としても読み進めやすいと思いますので、ここで一度に6個のElementクラスを追記します。

ざっくり丸ごとコピー&ペーストするのも良いと思いますし、追記するクラス名を一つひとつ確認しながら進めるのも良いと思います。
それぞれの習熟度に合わせて進めてください。

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
.mod-header-0001 {
padding: 12px 0;
background-color: #ffffff;
border-bottom: 1px solid #dddddd;
.mod-header-0001__inner {
width: 1200px;
margin: 0 auto;
padding: 0 8px;
box-sizing: border-box;
@media #{$g__is-lg} {
width: 100%;
}
&::after {
content: "";
display: block;
clear: both;
}
}
.mod-header-0001__logo-area {
float: left;
}
.mod-header-0001__logo {
color: #222222;
font-weight: bold;
font-size: 20px;
text-decoration: none;
padding: 4px;
&:hover {
opacity: 0.7;
}
}
.mod-header-0001__button-group {
float: right;
display: flex;
}
.mod-header-0001__login-button-wrapper {
}
.mod-header-0001__sign-up-button-wrapper {
margin-left: 16px;
}
}

新たに作成したElementクラス6個を以下のように付与します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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">

</li>
<li class="mod-header-0001__sign-up-button-wrapper">

</li>
</ul>
</div>
</header>

ボタンモジュールを入れ子にする

第3章 5節 mod-button-0001を作ろう」で作成したmod-button-0001–size-smのボタンをliタグの中にコピー&ペーストして以下のようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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>

この節で追加した行の全容

public/html/module-list.html は以下のように追記しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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>

src/scss/modules/_mod-header-0001.scss は以下のように作成しました。

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
.mod-header-0001 {
padding: 12px 0;
background-color: #ffffff;
border-bottom: 1px solid #dddddd;
.mod-header-0001__inner {
width: 1200px;
margin: 0 auto;
padding: 0 8px;
box-sizing: border-box;
@media #{$g__is-lg} {
width: 100%;
}
&::after {
content: "";
display: block;
clear: both;
}
}
.mod-header-0001__logo-area {
float: left;
}
.mod-header-0001__logo {
color: #222222;
font-weight: bold;
font-size: 20px;
text-decoration: none;
padding: 4px;
&:hover {
opacity: 0.7;
}
}
.mod-header-0001__button-group {
float: right;
display: flex;
}
.mod-header-0001__login-button-wrapper {
}
.mod-header-0001__sign-up-button-wrapper {
margin-left: 16px;
}
}

表示確認

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

この節のおわりに

そろそろElementクラスの命名規則は充分に理解できたことと思います。
今後のElementクラスの追記については、細かい説明は省略して、できるだけ簡易的にしていこうと思います。

続きはこちら

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