CSS 設計
- BEM
- OOCSS
- SMACSS
- FLOCSS など
設計の選択によってコストや敷居が変わるため、開発の規模感や期間で使い分ける
参考
- 各 CSS 設計手法を取り入れる上でのメリット・デメリットをまとめてみた
- BEM によるフロントエンドの設計 第 1 回 基本概念とルール
- 初心者による初心者向けの SMACSS まとめ
- 脱・CSS 無法地帯。FLOCSS で指針のある設計を。
BEM
- Block(塊)、Element (要素)、Modifier (修飾) の3つに分ける
- 命名規則は.block__element--modifier とする
- シングルクラス
メモ
:細かな差分(背景色のみ)などは Modifier で切り替えるが複数差分が存在する場合は、シングルクラスの考え方を優先して Block を分ける
:ペラ 1 の LP コーディングなど、小規模・短期間開発時に使用
コード例
<ul class="executive">
<li class="executive__item">
<p class="executive__item__title"></p>
<p class="executive__item__text"></p>
</li>
</ul>
<ul class="profile">
<li class="profile__item">
<p class="profile__item__title"></p>
<p class="profile__item__text"></p>
</li>
<li class="profile__item">
<p class="profile__item__title"></p>
<p class="profile__item__text"></p>
</li>
</ul>
.executive { ... }
.executive__item { ... }
.executive__item__title { ... }
.executive__item__text { ... }
.profile { ... }
.profile__item { ... }
.profile__item__title { ... }
.profile__item__text { ... }
OOCSS
- 構造とスキン(見た目)を分離する
- オブジェクト指向
- マルチクラス
メモ
:役割が一番組みやすい粒度に感じる。他と比べて衝突が発生しやすい
:コンポーネントリストを作成しないような中規模サイト、中期間開発時に使用
コード例
<ul class="cardWrap">
<li class="card w100 border-gold">
<p class="title"></p>
<p class="text"></p>
</li>
</ul>
<ul class="cardWrap">
<li class="card">
<p class="title"></p>
<p class="text"></p>
</li>
<li class="card">
<p class="title"></p>
<p class="text"></p>
</li>
</ul>
.cardWrap { ... }
.cardWrap.large { ... }
.cardWrap .card { ... }
.cardWrap .card .title { ... }
.cardWrap .card .text { ... }
.w100 { ... }
.border-gold { ... }
SMACSS
- base/layout/module/state/theme の 5 つにわける
- layout と state と theme には接頭語をつける
- マルチクラス
メモ
:Layouts を分けるため div が増えやすいイメージ。正しいマークアップを望む場合 resetCSS が重要
:コンポーネントリストを作成する大規模サイト、長期間開発時に使用
コード例
<div class="l-container-12">
<div class="l-grid-12">
<div class="card card-executive t-boder-gold">
<p class="card-title"></p>
<p class="card-text"></p>
</div>
</div>
</div>
<div class="l-container-12">
<div class="l-grid-06">
<div class="card">
<p class="card-title"></p>
<p class="card-text"></p>
</div>
</div>
<div class="l-grid-06">
<div class="card">
<p class="card-title"></p>
<p class="card-text"></p>
</div>
</div>
</div>
.l-container-12 { ... }
.l-grid-01 { ... }
.l-grid-02 { ... }
...
.l-grid-11 { ... }
.l-grid-12 { ... }
.t-boder-red { ... }
.t-boder-gold { ... }
...
.card { ... }
.card-executive { ... }
.card-title { ... }
.card-text { ... }
FLOCSS
- OOCSS, SMACSS, BEM, SuitCSS, MCSS の考え方を取り入れた比較的新しいやつ
- 命名規則は BEM
- マルチクラス
メモ
:ディレクトリ構成まで考慮した、設計ではなく CSS「運用」のイメージ
:大規模サイト・長期間開発時かつ Sass を用いる開発で使用
コード例
SMACSS と大きく変わらないので割愛
ディレクトリ例
├──foundation/ /* Reset.cssなど土台となるCSS群 */
├──layout/ /* header, sidebar, footerなどのレイアウト用CSS群 */
└──object/
├──component/ /* 再利用できる小さなコンポーネントCSS群 例:.btn-text_small {} */
├──project/ /* プロジェクト固有のコンポーネントCSS群 例:.card-title {} */
└──utility/ /* ユーティリティクラスを定義するCSS群 例:.u-container {} */