CSS Modules とは
CSS Modules は、コンポーネント(ファイル)単位で CSS ファイルを分けて管理する仕組みです(これ自体は Next.js の仕組みではありません)。 CSS の名前空間がコンポーネントごとに分離されるため、シンプルな CSS クラス名を付けても名前がコンフリクトする心配がありません。
Next.js は標準で CSS Modules の仕組みをサポートしており、CSS ファイルの拡張子を .module.css
にするだけで、各コンポーネントの実装ファイルから簡単にインポートすることができます。
Next.js で CSS Modules 機能を使う
Next.js で特定のコンポーネント用に CSS ファイルを用意するときは、そのコンポーネントと同じディレクトリに .module.css
という拡張子を持つファイルを作成します。
この拡張子は、Next.js で CSS Modules の仕組みを使うときのルールです。
ここでは、警告メッセージを表示する Alert
コンポーネント用の Alert.module.css
を作成してみます。
といっても、普通に CSS ファイルを記述するだけです。
グローバルに適用する CSS ファイルと異なるのは、Alert
コンポーネント用のスタイル定義しか含まれていないことです。
この CSS ファイルを Alert
コンポーネントから使用するには、次のようにインポートします。
上記の例では .css
ファイルを使いましたが、Next.js は Sass を標準サポート しているので、.scss
ファイルも同様にインポートすることができます。
TypeScript を使っているときに警告が出る場合
TypeScript を使ってコンポーネントを実装している場合、css
ファイルをインポートしている部分で次のような警告が出ることがあります。
これは、.css
ファイルの内容を styles
オブジェクト経由で参照するときに、型情報が存在しないよという警告です。
この警告を抑制するには、プロジェクトのルートにある型情報ファイル (next-env.d.ts
) に次のように追記します。
この記述により、TypeScript コンパイラに対して、「styles
オブジェクトは文字列型のパラメーターを持っているよ」ということを知らせることができます。
ここでは、将来的に Sass を導入 したときのために、.scss
ファイルにも同様の型情報を追加しています。
関連記事
- Next.js で Sass (scss/sass) を有効にする
- Next.js ですべてのページにグローバルな CSS を適用する (pages/_app.ts)
- Next.js の Image コンポーネントで画像を表示する (next/image)
- Next.js の API Routes 機能で Web API を作成する
- Next.js のダイナミックルーティング機能を利用する (getStaticPaths, getStaticProps, getServerSideProps)
- Next.js でコンポーネント内に直接 CSS を記述する (styled-jsx)
- Next.js で全ページ共通のレイアウトを定義する(Layout コンポーネント)