一番良いCSSの設計手法とは
過去にまとめたCSS設計についての考えをまとめてみた。
今は、どういった設計をすべきだろうか。
ReactやVueを使う場面も増えていく環境で、どの設計手法が一番運用しやすいのか。
CSS設計手法の歴史
2009年
OOCSS
-
レイアウトと見た目のclassをわける
-
主コンポーネントと要素コンポーネントに依存性を持たせない
-
HTMLをみるだけでレイアウトが想像できる
-
baseクラス + base別パターンクラス + 装飾クラスのように構成
-
クラスの組み合わせで表現
-
大きさ、色、パターンクラスで使い分ける
-
structure + skin
-
-
備考
-
場所に依存した指定方法はダメ
-
セレクタにスタイルを当てると、打ち消しスタイルが必要になってしまう
-
ひとつひとつのパーツに名前をつけ、それをオブジェクトとする
-
何をひとつのモジュールとするのかが難しい
-
baseクラスをページ固有の名詞にしてしまうと汎用性がなくなる
-
-
注意
-
見た目のクラスをたくさん作ると膨大になり、何が用意されているかわかり辛い
-
命名規則をちゃんとしないと後で困る
-
redクラスとかfont16クラスとかいう意見もあるが、微妙
-
BEM
関連記事
BEMとは何か の詳しい話はせず、簡単にだけ説明します。詳しくはこちらを確認ください。 https://en.bem.info/ BEMを利用する上で、BEMは気持ち悪いと感じる理由の1つ 「なぜBEMはアンダースコア([…]
-
CSSを共通の命名規則を実装できるためのもの
-
命名規則
-
Block__Element—Modifier
-
Block—Modifier
-
Element—Modifier
-
きもちわるいのでせめてこっち
-
Block_Element-Modifier
-
-
-
Block
-
要素のかたまり
-
-
Element
-
Blockの構成要素
-
-
Modifier
-
Block、Elementでスタイルが変わるもの
-
hoverとかも
-
-
クラスの管理方式
-
BlockとElementの区切りはアンスコ2個(__)
-
1個にしたい
-
-
BlockやElementを2つ以上の単語で表す時はハイフン1個(-)
-
キャメルケースでいい
-
-
BlockまたはElementとModifierの区切りはハイフン2個(–)
-
1個にしたい
-
-
ModifierのKeyとValueの区切りはアンスコ1個(_)
-
そんなにkeyって必要?
-
-
-
感想
-
Elementは1階層まで、2階層まで、のようなルールが必要かも
-
Blockの単位をしっかりすれば、そこまでElementは増えないはず
-
2012年
SMACSS(すまっくす)
-
それぞれを別ファイルにわけて管理する
-
ベース
-
reset.cssはここで指定する
-
基本要素セレクタで指定
-
-
汎用スタイルもここ
-
-
レイアウト
-
今までヘッダー、フッター、メイン、サイドなどidをつけているような主要なもの
-
idを付ける or lを先頭につける
-
l-header
-
-
-
モジュール
-
BEMでいうBlock + Element
-
block-element
-
-
レイアウト内のモジュール
-
それ単体でスタイルが独立している
-
どこに配置しても、デザインが崩れないように
-
-
ステート
-
is-aaaなどのクラス名
-
BEMでいうModifier
-
モジュールの別パターン
-
活性非活性、表示非表示など
-
jsで動的に変更を加えるときに使ったりもする
-
-
テーマ
-
全体のテーマを変えるとき(使わなそう)
-
-
その他
MCSS
-
CSSの管理ルール
-
以下のCSSにわける
-
reset
-
reset.css
-
-
base
-
base_module.css
-
どのページでも再利用可能なモジュール
-
.mt10, clearfix とか。
-
子孫モジュールの指定をしてはいけない
-
-
project
-
project_module.css
-
各プロジェクト用にユニークな名前をつける
-
base base_project のように指定する
-
-
cosmetic(基本不要?)
-
cosmetic.css
-
ie用とか
-
hoverとかも良いのかな?
-
-
FLOCSS
-
OOCSS、SMACSS、BEM、SuitCSS、MCSSを取り入れたルール
-
Foundation
-
resetとか
-
-
Layout
-
headerとか
-
-
Object
-
component
-
最低限の機能を持ったモジュール
-
-
project
-
プロジェクト固有
-
componentと一緒に使ったり、固有に作ったりする
-
-
utility
-
わずかなスタイル調整の便利クラス
-
component, projectを無駄に増やしていかないようにするもの
-
clearFixとかもここに入れる
-
-
-
命名規則
-
MindBEMdingを採用。オリジナルのBEMは取り入れない。
-
Block Element Modify
-
-
基本的に1CSSファイルにまとめる