CSSをあてる要素をどう分割するか
設計手法
責務をどのように分割するか、名前をつけるか という点でいくつかの代表的なアプローチがある。
- OOCSS
- BEM
- SMACSS
- FLOCSS
SMACSS
以下のように責務を分割する。
- Base
- ベースとなるデフォルトのスタイルを定義する
- Layout
- ページを構成するブロック要素のスタイルを定義する
- プレフィックスとして
layout-
やl-
が使われる。
- Module
- 再利用可能なスタイルを定義する
- State
- レイアウトやモジュールの状態を表すスタイル
- 例 is-active, is-enable
- Theme
- 色、形状、レイアウト、書体などの見た目や振る舞いを表すスタイル
- プレフィックスとして
theme-
が使われる。
https://murashun.jp/article/programming/css/css-design.html#chapter-5
FLOCSS(フロックス)
以下のように責務を分割する。
- Foundation
- スタイルの初期化を行う
- 例: reset.css
- Layout
- ページを構成するブロック要素のスタイルを定義する
- 例: header, main, sidebar, footerなど
- Object
- Component
- 使い回せる要素を定義する。
- 例: btn要素
- Project
- プロジェクト固有のスタイルを定義する。
- (よくわからない)
- Utility
- Component,Project以外の色々
- 例: clearfix,
.mbs { margin-bottom: 10px; }
など
- Component
要素名にはプレフィックスを付けることが推奨されている
Component - .c-* Project - .p-* Utility - .u-*
参考:https://github.com/hiloki/flocss
tips
子孫セレクタは少ない方が高速
CSSは右から左に読み込まれるため、子孫セレクタの多いこっちより
.wrapper .main .list .row
少ないこっちのほうが、探し出す要素の数が少ないため高速
.list-row
idやclassには要素名をつけないほうが高速
li.list より .li-listのほうが高速
責務で要素の名前をつける
スタイルの内容やコンテンツ名で名前をつけない
# 赤じゃなくなったら、class名を全部書き換える必要あり。 .coler-red # 見積もり表以外でも使いたくなったとき、class名を全部書き換える必要あり。 .mitsumori-table
隙間をとるマージンについて
- 上下の要素間の隙間を空ける時は、
margin-bottom
にだけ適用する - 左右の要素間の隙間を空ける時は、
margin-right
にだけ適用する