CSS Modules
Next.js は、.module.css
拡弽子を使用した CSS Modules の組み込みサポートを持っています。
CSS Modules は、ユニークなクラス名を自動的に作成することで、scope CSS をローカルにします。これにより、衝突を心配することなく、異なるファイルで同じクラス名を使用することができます。この振る舞いは、CSS Modules を Component レベルの CSS を含める理想的な方法にしています。
Example
CSS Modules は、app
ディレクトリ内の任意のファイルにインポートできます:
import styles from './styles.module.css'
export default function DashboardLayout({
children,
}: {
children: React.ReactNode
}) {
return <section className={styles.dashboard}>{children}</section>
}
import styles from './styles.module.css'
export default function DashboardLayout({ children }) {
return <section className={styles.dashboard}>{children}</section>
}
.dashboard {
padding: 24px;
}
CSS Modules は、オプション機能であり、.module.css
拡張子を持つファイルのみ有効になります。通常の<link>
スタイルシートとグローバルな CSS ファイルも引き続きサポートされています。
production では、すべての CSS モジュールファイルが自動的に多くの圧縮され、コード分割された .css
ファイルに結合されます。これらの.css
ファイルは、あなたのアプリケーションの中で熱い実行 paths を表し、アプリケーションの描画に必要な CSS が最小限になるように保証します。
Global Styles
グローバルの styles は、app
ディレクトリ内の任意の layout、ページ、または component にインポートすることができます。
Good to know: これは、
pages
ディレクトリとは異なり、グローバルな styles を_app.js
ファイル内でのみ import できるということです。
例えば、app/global.css
という名前のスタイルシートを考えてみましょう:
body {
padding: 20px 20px 60px;
max-width: 680px;
margin: 0 auto;
}
root layout ( app/layout.js
)の中に、 import を使って global.css
スタイルシートをインポートし、アプリケーション内の全ての route に styles を適用します:
// These styles apply to every route in the application
import './global.css'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
)
}
// These styles apply to every route in the application
import './global.css'
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
</html>
)
}
External Stylesheets
外部パッケージによって公開されたスタイルシートは、app
ディレクトリのどこでも、コロケーションされた Component を含むものでも、インポートすることができます:
import 'bootstrap/dist/css/bootstrap.css'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body className="container">{children}</body>
</html>
)
}
import 'bootstrap/dist/css/bootstrap.css'
export default function RootLayout({ children }) {
return (
<html lang="en">
<body className="container">{children}</body>
</html>
)
}
Good to know: 外部のスタイルシートは、 npm パッケージから直接インポートするか、ダウンロードしてコードベースと共に配置する必要があります。
<link rel="stylesheet" />
を使用することはできません。
Additional Features
Next.js は、 styles を追加するための作成体験を改善する追加機能を含んでいます:
next dev
を使ってローコールで実行する場合、ローカルのスタイルシート(グローバルか CSS modules のいずれか)はFast Refreshを利用して、編集が保存されるとすぐに変更が反映されます。next build
で production の number を行うとき、 CSS ファイルは、より少ない.css
ファイルにまとめて縮小され、 styles を取得するために必要なネットワーク要求の数を減らします。- JavaScript を無効にすると、 production build (
next start
)でも styles は読み込まれます。しかし、Fast Refreshを有効にするためには、next dev
では依然として JavaScript が必要です。