投稿日:2021年3月13日
CreateReactAppにはスタイルシートのモジュール機能がついています。この機能を使うことで、地獄のようなCSS命名規則を捨てることができます。
create-react-appで作成したアプリケーションにはスタイルシートのモジュール機能がついています。一応言っておきますが、@importや@useを使ったモジュールとは違うので注意!
このモジュール機能を使用すると、CSSの命名規則(OOCSS、BEM、SMACSS、FLOCSS)の地獄から解放されます。この命名規則で悩んでいる方はぜひ使って見ましょう!
この記事は以下の環境で確認されました。
実際にReactアプリケーションでSassモジュールを使ってみましょう。
まずはサンプルプロジェクトを作成します。
$ mkdir sample
$ cd sample
$ npm init
$ npx create-react-app app
Sassモジュールを使用するにはnode-sassのパッケージが必要になります。プロジェクトにインストールしておきましょう。
$ cd app
$ npm install --save node-sass
これだけでSassでモジュール機能が使うことができます。早速Sassモジュールファイルを作成しましょう。モジュールファイルは~~~.module.scssまたは~~~.module.sassという名前にします。scssにするかsassにするかは使いたい構文によって使い分けてください。
自分はscssの構文が好きなので、App.module.scssというファイルを作ってみます。
.area {
text-align: center;
}
使用する側のjsではファイルをimportすることで、モジュール内に定義されたCSSセレクタを使用できます。
import styles from "./App.module.scss";
function App() {
return <div className={styles.area}></div>;
}
export default App;
Sassモジュールの良いところはコンパイル後のコードにあります。
実際に開発用サーバーを起動させてコードを見てみましょう。
$ npm start
ChromeのDevToolsなどを使ってコードを見てみましょう。
以下のようなコードが生成されています。
<div class="App_area__2S3N0"></div>
Sassモジュールはコンパイル時に
{Sassモジュール名}_{セレクタ名}_{アプリ内で一意なランダム値}
というクラス名に変換されます。つまり各モジュールで同じセレクタ名を使用しても、コンパイル後には絶対にセレクタ名が被ることが無いのです(サイコー!!)。
それぞれのモジュール内では以下のようにシンプルなセレクタ名を使うことができるため、命名規則が非常にシンプルになります。
.area { // コンポーネントの外枠。marginやpaddingなどで位置を調整
}
.content { // コンポーネントのメイン部分。具体的なデザインを定義。
}
OOCSS、BEM、SMACSS、FLOCSSとはおさらばだ!