PostCSS
デフォルトの動作
Next.js は 組み込みのCSSサポート のために PostCSS を使用して CSS をコンパイルします。
設定なしでそのまま使用すると、Next.js は以下の変換を行いながら CSS をコンパイルします:
- Autoprefixer が自動的にベンダープレフィックスを CSS ルールに追加します(IE11 まで対応)。
- クロスブラウザの Flexbox バグ が修正され、仕様 通りに動作します。
- 新しい CSS 機能は Internet Explorer 11 との互換性のために自動的にコンパイルされます:
デフォルトでは、CSS Grid と カスタムプロパティ(CSS 変数)は IE11 サポートのために コンパイルされません。
CSS Grid Layout を IE11 用にコンパイルするには、CSS ファイルの先頭に次のコメントを追加します:
/* autoprefixer grid: autoplace */
また、以下の設定(折りたたまれています)で autoprefixer を設定することで、プロジェクト全体で CSS Grid Layout の IE11 サポートを有効にできます。詳細は以下の「プラグインのカスタマイズ」を参照してください。
クリックして CSS Grid Layout を有効にする設定を表示
{
"plugins": [
"postcss-flexbugs-fixes",
[
"postcss-preset-env",
{
"autoprefixer": {
"flexbox": "no-2009",
"grid": "autoplace"
},
"stage": 3,
"features": {
"custom-properties": false
}
}
]
]
}
CSS 変数は 安全にコンパイルすることができない ため、コンパイルされません。変数を使用する必要がある場合は、Sass によってコンパイルされる Sass 変数 のようなものを使用することを検討してください。
ターゲットブラウザのカスタマイズ
Next.js では Browserslist を通じてターゲットブラウザ(Autoprefixer とコンパイルされる CSS 機能用)を設定できます。
browserslist をカスタマイズするには、package.json
に以下のように browserslist
キーを追加します:
{
"browserslist": [">0.3%", "not dead", "not op_mini all"]
}
browsersl.ist ツールを使用して、どのブラウザを対象としているかを視覚化できます。
CSS モジュール
CSS モジュールをサポートするために設定は必要ありません。ファイルに対して CSS モジュールを有効にするには、ファイルの拡張子を .module.css
に変更します。
Next.js の CSS モジュールサポートについて詳しくはこちら をご覧ください。
プラグインのカスタマイズ
警告: カスタム PostCSS 設定ファイルを定義すると、Next.js は デフォルトの動作 を 完全に無効化 します。 Autoprefixer を含め、コンパイルが必要なすべての機能を手動で設定してください。 また、カスタム設定に含まれるプラグインは手動でインストールする必要があります(例:
npm install postcss-flexbugs-fixes postcss-preset-env
)。
PostCSS 設定をカスタマイズするには、プロジェクトのルートに postcss.config.json
ファイルを作成します。
これは Next.js が使用するデフォルトの設定です:
{
"plugins": [
"postcss-flexbugs-fixes",
[
"postcss-preset-env",
{
"autoprefixer": {
"flexbox": "no-2009"
},
"stage": 3,
"features": {
"custom-properties": false
}
}
]
]
}
豆知識: Next.js では
.postcssrc.json
というファイル名や、package.json
のpostcss
キーから設定を読み込むことも可能です。
環境に基づいて条件付きでプラグインを含めたい場合に便利な postcss.config.js
ファイルで PostCSS を設定することも可能です:
module.exports = {
plugins:
process.env.NODE_ENV === 'production'
? [
'postcss-flexbugs-fixes',
[
'postcss-preset-env',
{
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
features: {
'custom-properties': false,
},
},
],
]
: [
// 開発時は変換なし
],
}
豆知識: Next.js では
.postcssrc.js
というファイル名も使用可能です。
PostCSS プラグインをインポートするために require()
を使用 しないでください。プラグインは文字列として提供する必要があります。
豆知識:
postcss.config.js
が同じプロジェクト内の他の非 Next.js ツールをサポートする必要がある場合は、相互運用可能なオブジェクトベースの形式を使用する必要があります:module.exports = { plugins: { 'postcss-flexbugs-fixes': {}, 'postcss-preset-env': { autoprefixer: { flexbox: 'no-2009', }, stage: 3, features: { 'custom-properties': false, }, }, }, }