PostCSS

Примеры

Поведение по умолчанию

Next.js компилирует CSS для своей встроенной поддержки CSS с использованием PostCSS.

Без дополнительной конфигурации Next.js компилирует CSS со следующими преобразованиями:

По умолчанию CSS Grid и Custom Properties (CSS-переменные) не компилируются для поддержки IE11.

Для компиляции CSS Grid Layout под IE11 можно добавить следующий комментарий в начало CSS-файла:

/* autoprefixer grid: autoplace */

Также можно включить поддержку IE11 для CSS Grid Layout во всём проекте, настроив autoprefixer с конфигурацией, показанной ниже (свёрнуто). Подробнее см. в разделе "Настройка плагинов".

Нажмите, чтобы увидеть конфигурацию для включения CSS Grid Layout
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 позволяет настроить целевые браузеры (для Autoprefixer и компилируемых возможностей CSS) через Browserslist.

Для настройки browserslist добавьте ключ browserslist в ваш package.json:

package.json
{
  "browserslist": [">0.3%", "not dead", "not op_mini all"]
}

Вы можете использовать инструмент browsersl.ist для визуализации целевых браузеров.

CSS Modules

Для поддержки CSS Modules не требуется дополнительной настройки. Чтобы включить CSS Modules для файла, измените его расширение на .module.css.

Подробнее о поддержке CSS Modules в Next.js.

Настройка плагинов

Предупреждение: При определении пользовательского файла конфигурации 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 или читать настройки из ключа postcss в package.json.

Также можно настроить PostCSS с помощью файла postcss.config.js, что полезно при необходимости условного включения плагинов в зависимости от окружения:

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 должен поддерживать другие инструменты в проекте, используйте совместимый объектный формат:

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