ガイド

CSS→SCSS変換ツールのネストの仕組みと、変換後に確認すること

ルールのまとめ方とネストの仕組み、ネストルールの書き方、あえて対応していない範囲を解説します。

まず押さえること

CSSをSCSSへ変換するツールは多くありますが、見た目を整えるためにルールやメディアクエリの順番まで無条件に動かすと、変換後にスタイルの優先順位が変わることがあります。このツールは、変換で動かす範囲を小さく決まったものに絞り、何が動いたかを確認しやすくしています。

実践するときのポイント

初期のネストルールのままでも、欄を空にした標準のBEM判定でも、.c-button__label や .c-button--primary は &__label、&--primary のSCSSネストに変換されます。ネストルールの有無にかかわらず、ルートが同じルールは1つのブロックにまとめます。.c-button と .c-button__label は、あいだに別のルールが挟まっていても、1つの .c-button { … } の中に入ります。同じセレクタの宣言は元の順番のままですが、もともと後ろにあったルールが、関係のない別のセレクタより前に来ることがあります。別々のセレクタで同じ要素にスタイルを当てている場合は、取り込む前に元のCSSと出力を見比べてください。

見落としやすい点

BEMそのままではない命名でも、ネストルールを1行に1つずつ書けば、自分のプロジェクトに合わせたネストにできます。たとえば .*-*&__*&-- と書くと、* が名前、& がネストの区切りになり、.c-card__img--cap は .c-card { &__img { &--cap { … } } } に変換されます。初期ルールの .*-*.&*-* を使えば、.c-card.is-disabled も .c-card { &.is-disabled { … } } になります。:hover や ::before などの疑似クラス・疑似要素は、ルールに書かなくても &:hover のように自動でネストします。.c-box__header, .c-box__time のようなカンマ区切りも、違いが最後の1段だけなら &__header, &__time とまとめます。どのルールにも当てはまらないセレクタは書いたまま残し、件数を変換レポートに表示します。メディアクエリは並べ替えず、隣り合っていて条件が完全に同じものだけをまとめます。

次にやること

一方で、CSS Modules、@layer、複雑な @supports、ネスト済みCSS、SCSS独自構文の完全な理解や、自動でのプロパティ並べ替えは対象外です。万能な整形を目指すより、変換結果をレビューしやすく、意図しない見た目の崩れを減らすことを優先しています。

一度きりで終わらせず、必要な場面で繰り返せる手順として使うのがおすすめです。

関連ツールを開く

ガイド一覧を見る →