はじめに

みなさまこんにちは!おはようございます!
マークアップエンジニアのうさこでございます!

またお前か・・・という声が聞こえてきそうですね・・・?花粉なんて爆発してしまえばいいと思っている今日この頃でございます。

さて・・・今回はコーディングをする際にきっと頭を抱える方も多いのでは・・・
クラス名の命名規則についてです!!

クラス名の命名・・・地味で単純な作業ですが、悩み始めると止まらず時間のロスに繋がっているのは紛れも無い事実なのです。。

目次

考え方

目標はやはりこの4つとなります!

  • 予測しやすい
  • 再利用しやすい
  • 保守しやすい
  • 拡張しやすい

なぜ SMACSS と BEM なのか

BEM の Block や Element の考え方は素敵すぎるのですが、クラス名がものすごく冗長になってしまいがち・・・。SMACSS もクラスの管理という面でカテゴライズの考え方は素敵・・・。

それじゃあ~、思いきって良いとこ取りしてよしなにしちゃえ!!ってことで生まれた CSS 設計が今回のお話です。BEM ? SMACSS とはなんぞや??という方はこちらをご覧ください!

接頭辞の重要性

クラス名に接頭辞をつける事で、その要素が layout の役割を担っているのか、module の役割を担っているのか、ぱっと一目ではっきりと区別できるようになります。ページ固有のクラス名には接頭辞をつけない事で、役割を持つクラス名と差別化を図ります。

例えば、下記のようなソースがあったとします。

例) HTML

試しに接頭辞を無くしてみます。

例) HTML

どれがどの役割を担っているのかよく分からなくなってしまう上に、クラス名がぶつかるというカオスなことに。。やっぱり接頭辞必要だよねという結論に・・・。

ID について

ID セレクタは詳細度が高くなってしまいスタイルの上書きが入り乱れ CSS の煩雑化が予想されるため、CSS の利用については基本使用せず、javascript にフックさせる場合にのみ使用します。

基本形

Prefix は SMACSS のカテゴライズに準じます。
Element と Block は BEM の考え方に準じます。

要素の区切り記号は、「 _(アンダースコア) 」としたいと思います。

_(アンダースコア) にすることで、クラスを選択したい時に shift + クリックせずともダブルクリックで全選択できるためです!!

例) HTML

Block

Element

Modifier

または

Prefix

SMACSS に準じてカテゴライズします。

  • l : Layout(layout)
  • md : Module(module)
  • is : State(状態)

Block

BEM の考え方に準ずるようにします。
Element で構成されている要素です。

layout で使えそうなもの

  • sec : セクション要素
  • grid : グリッド要素
  • colset : カラムセット要素

module で使えそうなもの

  • nav : ナビゲーション要素
  • list : リスト要素
  • article : 記事要素
  • media : メディア要素
  • alert : アラート要素
  • form : フォーム要素

Element

BEM の考え方に準ずるようにします。
Block を構成する要素です。

layout で使えそうなもの

  • col : Block のカラム要素

module で使えそうなもの

  • ttl : Block のタイトル要素
  • img : Block の画像要素
  • btn : Block のボタン要素
  • date : Block の日付要素
  • name : Block の名前要素

共通で使えそうなもの

  • header : Block のヘッダー要素
  • body : Block のメイン要素
  • footer : Block のフッター要素
  • item : Block のアイテム要素

Modifier

Block または Element のバリエーション違いとなる要素です。下記のように、マルチクラスで指定します。

例) HTML

注意点

SMACSS や BEM に限ったことではありませんが・・・Sass を利用する際は、過度なネストには十分に注意しましょう!!

例) BAD (展開前)

例) BAD (展開後)

セレクタが冗長になりがち・・・。

Element は Block に紐付いているものなので、わざわざネストさせる必要はありませんッ!何でもかんでもネストしてしまえば良いという考えは捨て去りましょう!

例) GOOD!! (展開前)

例) GOOD!! (展開後)

スッキリヾ(。・∀・)ノダー!!

さいごに

いかがでしたでしょうか!
今回はこの辺で失礼します!
どなたかのお役に立てますように・・・(´。‐ω‐`)

参考URL

あわせて読みたい記事