本文へ移動
verified onnext@16.3.5react@19
最終検証日 2026-09-26
Next.js道場

CSS が反映されないとき。どこで読み込むか

Next.js の CSS は、それを import したページや layout を開いたときにだけ読み込まれます。

CSS は、import した場所で読み込まれる

Next.js は、ページごとに、そのページで使う CSS だけを HTML に読み込ませます。「そのページで使う」とは、そのページと、それを包む layout が import したものです。

3つのページで確かめました。

app/layout.tsx     import './globals.css'      ← h1 の色
app/a/page.tsx     import './a.css'            ← .accent の色
app/b/page.tsx     (import なし)              ← .accent を使っている
ページを直接開いたときに読み込まれた CSS(実機で確かめた)
ページglobals.cssa.css
/読み込まれる読み込まれない
/a読み込まれる読み込まれる
/b読み込まれる読み込まれない

/b の .accent には色が付きませんでした。a.css の中身は全体に効く書き方ですが、読み込まれるのは a.css を import した /a を開いたときだけです。

全ページで使う CSS は、ルートの layout で

// app/layout.tsx
import './globals.css'
 
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="ja">
      <body>{children}</body>
    </html>
  )
}

どのページもルートの layout の内側に描かれるので、ここで import した CSS はすべてのページに届きます。実機で、/b を直接開いても h1 に globals.css の色が付きました。

CSS Modules はクラス名が変わる

ファイル名を .module.css で終わらせると、CSS Modules になります。ほかのファイルと名前が混ざらないように、クラス名が書き換えられます。

クラス名は styles から取り出す
文字列で書く
import styles from './m.module.css'
 
<p className="title">見出し</p>

色が付かない。title というクラスは、もう無い。

styles から渡す
import styles from './m.module.css'
 
<p className={styles.title}>見出し</p>

書き換えたあとの名前が入る。

実機では、.title が m-module__haHm7G__title のような名前に変わっていました。文字列の "title" の要素は既定の色のまま、styles.title の要素にだけ色が付きました。

書き換えたあとの名前の形は、版によって変わり得ます。名前を直接書かず、いつも styles から取り出してください。

このページで扱わないもの

Tailwind CSS のような道具が反映されない場合は、その道具の設定を確かめてください。Next.js の外の道具なので、このサイトでは扱いません。ここに書いたのは、Next.js 16.3.5 で確かめた範囲だけです。

確かめ方

  1. 本番と同じビルドで、そのページを直接開く
  2. 開発ツールの要素のタブで、要素に当たっているクラス名と、読み込まれた CSS を見る
  3. CSS Modules なら、当たっているクラス名が書き換えたあとの名前になっているかを見る

出典

このページの内容は上記の一次情報を基準に書いています。個人ブログや二次情報を根拠にしていません。

理解できたか試す

では、このコードはどうなりますか。

ページ a で ./a.css を import して、.accent に色を付けました。ページ b でも同じクラス名を使っています。/b を直接開くと、b の .accent に色は付きますか。

この問題を解くこのテーマの問題 3 問