OOCSS
OOCSS(Object Oriented CSS)は、オブジェクト指向にもとづいて考案された設計思想。TwitterやGitHubなどで採用されており、身近なところでいうとBootstrapがこの思想のもとに設計されている。
- Container(入れ物)とContents(中身)を分けて考える
- .container > .contentsのように依存関係にせず、.containerと.contentsを独立させる(再利用性が向上)
- Structure(基本構造)とSkin(見た目)を分けて考える
- .btnで基本構造を定義し、.btn-primaryで見た目を変更する
| <h1>OOCSS(Object Oriented CSS)</h1> <ul class="menu"> <li class="item item-large">link</li> <li class="item item-active">active</li> </ul> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /*oocss.css */ .menu { list-style-type: none; } .item { width: 80px; margin-bottom: 5px; color: #4486F7; border: 1px solid #4486F7; text-align: center; } .item-large { width: 100px; } .item-active { color: #fff; background-color: #4486F7; } |
BEM
BEM(Block Element Modifier)は、独特な命名規則(MindBEMding)で有名な設計思想。OOCSSはマルチクラス(クラスを組み合わせて使う)のに対し、BEMはシングルクラス(ひとつのクラスで定義する)なのでメンテがしやすい。
特徴
3つをBlock__Element–Modifierのように結合してクラス名を決める。
Elementはアンダースコア2つ(__)で結合、Modifierはダッシュ2つ(–)で結合する。
サンプルコード
| <!-- bem.html --> <h1>BEM(Block__Element--Modifier)</h1> <ul class="menu"> <li class="menu__item--large">link</li> <li class="menu__item--active">active</li> </ul> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* bem.sass */ .menu { list-style-type: none; &__item { width: 80px; margin-bottom: 5px; color: #4486F7; border: 1px solid #4486F7; text-align: center; &--large { width: 100px; } &--active { color: #fff; background-color: #4486F7; } } } |
SMACSS
SMACSS(Scalable and Modular Architecture for CSS)は、OOCSSやBEMの流れをうけて考案された設計思想。
特徴
- Base
- reset.cssやnormalize.css
- サイト全体のデフォルトスタイルを定義する
- Layout
- Moduleの配置を決める
- プレフィックスに「l-」をつける(例: .l-main、.l-sub)
- Module
- 再利用可能なパーツ
- 親モジュールの名前をプレフィックスにつける(例: 親: .item、子: .item-box)
- State
- LayoutやModuleの変化した状態
- プレフィックスに「is-」をつける(例: .is-active、.is-error)
- Theme
- LayoutやModuleのTheme(色を管理する)
- プレフィックスに「theme-」をつける(例: .theme-color)
サンプルコード
| <!-- smacss.html --> <h1>SMACSS(Scalable and Modular Architecture for CSS)</h1> <div class="l-container"> <ul class="menu"> <li class="menu-item is-large">link</li> <li class="menu-item is-active">active</li> </ul> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* smacss.sass */ .l-container { /***/ } .menu { list-style-type: none; &-item { width: 80px; margin-bottom: 5px; color: #4486F7; border: 1px solid #4486F7; text-align: center; } } .is-large { width: 100px; } .is-active { color: #fff; background-color: #4486F7; } |
FLOCSS
FLOCSS(たぶんFoundation Layout Object CSS)は、OOCSSやBEM、SMACSSの流れを受けて考案された設計思想。
特徴
- Foundation
- reset.cssやnormalize.css
- サイト全体のデフォルトスタイルを定義する
- Layout
- Objectの配置を決める
- ページ単位で唯一の存在になるのでidセレクタを使う
- Object
- Component
- 再利用可能なパーツ
- プレフィックスに「c-」をつける(例: .c-btn、.c-btn_primary)
- Project
- Componentにするほどでもないパーツ
- プレフィックスに「p-」をつける(例: .p-article、p.article__title)
- Utility
- 汎用クラスで単一のスタイルを持つ
- プレフィックスに「u-」をつける(例: .u-clearfix、.u-block)
BEMとおなじMindBEMdingという命名規則が用いられている。
また、ディレクトリ構成も構造に合わせて分割することで、メンテしやすくなっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ├── foundation │ ├── _base.scss │ └── _reset.scss ├── layout │ ├── _main.scss │ └── _sidebar.scss └── object ├── component │ ├── _button.scss │ └── _grid.scss ├── project │ ├── _articles.scss │ └── _profile.scss └── utility ├── _clearfix.scss ├── _margin.scss └── _text.scss |
サンプルコード
| <!-- flocss.html --> <h1>FLOCSS</h1> <div id="container"> <ul class="c-menu"> <li class="c-menu__item c-menu__item--large">link</li> <li class="c-menu__item c-menu__item--active">active</li> </ul> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #container { /***/ } .c-menu { list-style-type: none; &-item { width: 80px; margin-bottom: 5px; color: #4486F7; border: 1px solid #4486F7; text-align: center; &--large { width: 100px; } &--active { color: #fff; background-color: #4486F7; } } } |