PostCSS
デフォルトの挙動
Next.jsは、組み込みのCSSサポートのためにPostCSSを使用してCSSをコンパイルします。
特別な設定なしで、Next.jsは以下の変換を加えてCSSをコンパイルします
- Autoprefixerは、CSSルールにベンダープレフィックスを自動的に追加します (IE11まで対応)。
- クロスブラウザのFlexboxのバグは、仕様通りに動作するように修正されます。
- 新しいCSS機能は、Internet Explorer 11との互換性のために自動的にコンパイルされます。
デフォルトでは、CSS Gridとカスタムプロパティ(CSS変数)はIE11サポートのために**コンパイルされません**。
IE11向けにCSS Grid Layoutをコンパイルするには、CSSファイルの冒頭に以下のコメントを配置します
/* autoprefixer grid: autoplace */
プロジェクト全体でIE11向けにCSS Grid Layoutのサポートを有効にするには、以下に示す(折りたたまれた)設定でAutoprefixerを構成することもできます。詳細については、下の「プラグインのカスタマイズ」を参照してください。
クリックして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 Modules
CSS Modulesをサポートするために設定は不要です。ファイルでCSS Modulesを有効にするには、ファイル名を.module.css
という拡張子に変更してください。
Next.jsのCSS Moduleサポートについてはこちらで詳細を確認できます。
プラグインのカスタマイズ
警告: カスタムの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はpostcss.config.js
ファイルで設定することもできます。これは、環境に基づいて条件付きでプラグインを含めたい場合に便利です
module.exports = {
plugins:
process.env.NODE_ENV === 'production'
? [
'postcss-flexbugs-fixes',
[
'postcss-preset-env',
{
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
features: {
'custom-properties': false,
},
},
],
]
: [
// No transformations in development
],
}
ご存知でしたか: 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, }, }, }, }
この情報は役に立ちましたか?