以前は、SMACCSやBEMを仕事で使っていました。しかし、今はRSCSSというCSS記法に落ち着いています。
RSCSSの特徴は一言で言うなら、ミニマムです。
-
で始まり、打ち消し系クラスは_
で始まるRSCSSのルールの中から、これだけは守らないと破綻します。
コンポーネントでデザインを捉えることが前提です。
2箇所以上同じコードの塊があり、見た目が同じか派生している場合、私はコンポーネントと捉えます。
あっこれどっかで似たようなの書いてるとあれば、コンポーネント化を考えましょう。
以下のように2単語以上でコンポーネントを命名し、 子要素(Element)は1単語で命名します。
.primary-button {
> .icon {
}
> .text {
}
}
1単語のコンポーネントはだめです。
.button {
}
コンポーネントの中にコンポーネントではない2単語以上もだめです。それが他で定義済みのコンポーネントなら問題ないです。
.primary-button {
> .button-icon {
/* コンポーネントじゃないここでしか登場しないスタイル */
}
> .text {
}
}
子セレクタを使用して、
必ずそのコンポーネント直下の1単語のクラス にのみスタイルが適用されるようにします。
.description-panel {
> .title {
}
}
以下のようにしてしまうと、.description-panel
のDOM要素以下のコンポーネント.title
を使ったすべてコンポーネントに影響がでてしまいます。
.description-panel {
.title {
}
}
コンポーネント自身のサイズは親に書きます、
これをしないと他の場所でそのコンポーネントを使い回せません。
.button-group {
> .primary-button {
width: 100px;
}
}
.primary-button {
/* 自身のサイズ定義はかかない */
}
例えば幅100%で使いたいといったときに、わざわざ打ち消さないといけません。
.primary-button {
width: 100px;
}
クラス名の重複 を防ぐことができます。
2単語以上ハイフンつなぎの命名規則は、チーム人数多いとかぶりやすいです。
見た目や機能に対してどんな英語を使うのか共通化すると、
チームで運営した際に、もっとリーディングしやすくなります。
codicなどの辞書サイトで、検索した言葉を使うようにしましょう。
一人でしか触らない場合はあまり必要はないです。
あとからコードを移植しやすいように、クラス定義の中にスタイルを書きます。
.primary-button {
font-size: 20px;
@media (min-width: 480px) {
font-size: 14px;
}
}
以下のように書いてしまうと、.primary-button
を移植する場合、場所が離れてしまい移動しづらいです。
.primary-button {
font-size: 20px;
}
/* ここに他のコンポーネントの定義も書かれている */
@media (min-width: 480px) {
/* ここに他のコンポーネントの定義も書かれている */
.primary-button {
font-size: 14px;
}
}
SCSSであることが前提ですが、HTMLの構造を維持して、CSSを書いていきます。
.description-panel {
> .main {
> .title {
}
}
}
RSCSSでは、ネストは直接の子までです。
しかし、深いネストを避けるにはコンポーネントをさらに分けなければなりません。
そうすると、時間がかかり、コンポーネントの場所が離れてしまい編集しづらくなります。
ただ、チーム共通のライブラリの用途等の場合は、しっかりコンポーネントを分けて作りましょう。
どうでしょうか、長々しく書いてしまいましたが、
まずは公式のドキュメントをみるのをおすすめします。
非常にわかりやすいです。
そして実際に書いてみてください。
今までBEMなどで厳格に書いていた人は非常に書きやすいと感じるかと思います。
他にも、CSSの種別と読み込み順の設計方法であるitcssと組み合わせるとよりいいのですが、
それは後日書きます。
Happy Coding CSS!