べんりワザ・つまずいたとき

クラス名の付け方に迷わなくなる考え方

red、box2、aaa——クラス名が思いつかないのは、名前を「見た目」で付けようとしているからです。役割で名づける考え方と、定番のルールBEMの読み方・書き方をまとめました。

redbox2aaa——クラス名が思いつかないのは、名前を見た目で付けようとしているからです。名前は「どう見えるか」ではなく「何のためのものか」で付ける。これだけで迷いはほとんど消えます。

見た目で名づけると、あとで困る

.red {
  color: #e5484d;
}

一見よさそうですが、「やっぱり青にしよう」と思ったときに詰みます。

<!-- クラス名はredなのに青い、という地獄 -->
<p class="red" style="color: blue;">セール中</p>

役割で名づけていれば、色を変えても名前はそのままで済みます。

.price-sale {
  color: #e5484d;
}
✕ 見た目の名前○ 役割の名前
.red.price-sale
.big-text.section-title
.left-box.profile-card
.mt20.section

「これは何か」と自分に聞いて、その答えを英語にする——これが基本の作法です。

BEM——迷わないための定番ルール

とはいえ、名前を自由に付けていくと、今度は「似た名前だらけ」になります。世界的によく使われている命名ルールがBEMです。読み方は「ベム」。

block__element--modifier
部分意味
Block(かたまり)独立した部品そのものcard
Element(部品)かたまりの中のパーツ。__でつなぐcard__title
Modifier(変化)見た目や状態のちがい。--でつなぐcard--wide
外側のかたまりがcard、その中の部品がcard__titlecard__text。名前を見ただけでどこに属する部品かが分かります。

実例で見る

<div class="card">
  <h3 class="card__title">しまちゃん</h3>
  <p class="card__text">ゆきぐにに住んでいます。</p>
</div>

<div class="card card--highlight">
  <h3 class="card__title">おしらせ</h3>
  <p class="card__text">あたらしい絵をかきました。</p>
</div>
.card {
  border: 1px solid #ddd;
  border-radius: 12px;
  padding: 16px;
}
.card__title {
  font-size: 18px;
  margin: 0 0 8px;
}
.card--highlight {
  border-color: #ff8a3d;
  background: #fff8f3;
}

ポイントは、変化を付けるときに元のクラスを消さずに足すこと(class="card card--highlight")。共通の見た目はcardに書いたまま、違いだけをcard--highlightに書けます。

ゆるくても構わない。大事なのは一貫性

BEMを完璧に守る必要はありません。個人のサイトなら、次の3つだけでも十分に効果があります。

  1. 役割で名づけるredではなくprice-sale
  2. かたまりごとに接頭辞をそろえるherohero-titlehero-image
  3. 同じサイトの中で書き方を混ぜないcamelCasekebab-caseを行き来しない)

いちばん困るのは、ルールが無いことではなくルールがバラバラであることです。

classとidの使い分け

classid
何回使える?何回でも1ページに1つだけ
主な用途見た目を付けるJavaScriptで特定する・ページ内リンクの目印
CSSの強さふつう強すぎる(あとで上書きしにくい)

見た目はclass、と覚えてください。idでスタイルを書くと、後から少しだけ変えたいときに上書きできず苦労します。

CSSクラスで“狙って”飾るクラスセレクタの基本は、CSSコースのこの回でHTMLページ内リンクidを使ったページ内リンクの作り方はこちら

名前に使ってよい文字

  • 半角英小文字とハイフンが基本(profile-card
  • 数字は途中や末尾ならOKstep2)。ただし先頭に数字は使えない2stepはエラー)
  • 日本語やスペースは避ける

まとめ

  1. クラス名は見た目ではなく役割で付ける(redではなくprice-sale
  2. BEMはblock__element--modifierかたまり・部品・変化の3階層で名づける
  3. 完璧さより一貫性。見た目はclass、idはJavaScriptとページ内リンクに使う

名前が整っているCSSは、1か月後の自分が読んでも意味が分かります。それがいちばんの効果です。

よくある質問

CSSのクラス名は日本語でもいいですか?
技術的には動きますが、避けるのが無難です。ファイル名やURLと同じく、環境によって文字化けや入力ミスの原因になります。ローマ字よりも英単語を使うと、あとから読み返しやすくなります。
BEMのアンダースコア2つとハイフン2つは必ず守るべきですか?
自分だけのサイトなら1つでも構いませんが、2つにする理由があります。単語の区切り(例:main-visual)と、部品の区切りを見た目で区別できるからです。
idとclassはどう使い分けますか?
見た目を付けるのはclass、JavaScriptから1つの要素を特定したりページ内リンクの目印にしたりするのがidです。idは1ページに1つしか使えません。