PostCSS

範例

預設行為

Next.js 使用 PostCSS 來編譯其內建 CSS 支援的樣式。

在不進行任何配置的情況下,Next.js 預設會對 CSS 進行以下轉換:

預設情況下,CSS Grid自訂屬性 (CSS 變數) 不會為 IE11 進行編譯。

若要為 IE11 編譯 CSS Grid 佈局,可以在 CSS 檔案頂部加入以下註解:

/* autoprefixer grid: autoplace */

你也可以透過下方折疊的配置來為整個專案啟用 IE11 的 CSS Grid 佈局支援。更多資訊請參考下方的「自訂插件」章節。

點擊查看啟用 CSS Grid 佈局的配置
postcss.config.json
{
  "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 鍵值,如下所示:

package.json
{
  "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 使用的預設配置:

postcss.config.json
{
  "plugins": [
    "postcss-flexbugs-fixes",
    [
      "postcss-preset-env",
      {
        "autoprefixer": {
          "flexbox": "no-2009"
        },
        "stage": 3,
        "features": {
          "custom-properties": false
        }
      }
    ]
  ]
}

須知:Next.js 也允許將檔案命名為 .postcssrc.json,或是從 package.jsonpostcss 鍵值讀取配置。

也可以使用 postcss.config.js 檔案來配置 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,
              },
            },
          ],
        ]
      : [
          // 開發環境不進行轉換
        ],
}

須知:Next.js 也允許將檔案命名為 .postcssrc.js

請勿使用 require() 來導入 PostCSS 插件。插件必須以字串形式提供。

須知:如果你的 postcss.config.js 需要支援同專案中的其他非 Next.js 工具,則必須改用可互通的物件格式:

module.exports = {
  plugins: {
    'postcss-flexbugs-fixes': {},
    'postcss-preset-env': {
      autoprefixer: {
        flexbox: 'no-2009',
      },
      stage: 3,
      features: {
        'custom-properties': false,
      },
    },
  },
}

On this page