introduction

默认行为

Next.js 通过PostCSS 编译CSS 进行内置CSS 支持 …

开箱即用,无需配置,Next.js 编译CSS 需要如下转换:

默认, CSS Grid 以及 Custom Properties (CSS variables) 是没有编译的 - 为了支持IE 11..

为了针对IE 11 支持编译 CSS Grid Layout ,你能够放置以下内容到CSS 文件顶部 ..
  1. /* autoprefixer grid: autoplace */

你能够启动IE 11 对 CSS Grid Layout 的支持(直接在项目中使用以下配置进行autoprefixer的配置)

例如启用CSS Grid 布局
  1. {
  2. "plugins": [
  3. "postcss-flexbugs-fixes",
  4. [
  5. "postcss-preset-env",
  6. {
  7. "autoprefixer": {
  8. "flexbox": "no-2009",
  9. "grid": "autoplace"
  10. },
  11. "stage": 3,
  12. "features": {
  13. "custom-properties": false
  14. }
  15. }
  16. ]
  17. ]
  18. }

CSS 变量不会被编译(因为它可能不安全),如果你必须使用环境变量,考虑使用替代方式(例如 Sass variables 通过Sass的形式进行编译) …

自定义目标浏览器

Next.js 允许你配置目标浏览器(对于 Autoprefixer 以及 编译的css 特性),通过 Browserslist 进行设定 …

为了自定义浏览器列表,创建一个<font style="color:rgb(17, 17, 17);">browserslist</font>key 在<font style="color:rgb(17, 17, 17);">package.json</font>例如:
  1. {
  2. "browserslist": [">0.3%", "not ie 11", "not dead", "not op_mini all"]
  3. }

你能够使用browserl.ist 工具可视化那些是你想支持的目标浏览器 ..

CSS modules

为了支持CSS 模块化,不需要做任何配置,为了针对一个文件启用CSS 模块,重命名文件让它具有.module.css后缀即可 ..

自定义插件

警告:

当你定义一个自定义的PostCSS 配置文件,Next.js 完全禁用了默认的行为 … 确保能够手动的配置需要被编译的所有特性,包括 Autoprefixer. 你也需要去安装任何需要包括的插件(手动的在自定义配置中) …

  1. npm install postcss-flexbugs-fixes postcss-preset-env

为了自定义PostCSS 配置,创建一个postcss.config.json文件到项目的根目录中 …

以下是Next.js 默认的配置

  1. {
  2. "plugins": [
  3. "postcss-flexbugs-fixes",
  4. [
  5. "postcss-preset-env",
  6. {
  7. "autoprefixer": {
  8. "flexbox": "no-2009"
  9. },
  10. "stage": 3,
  11. "features": {
  12. "custom-properties": false
  13. }
  14. }
  15. ]
  16. ]
  17. }

Next.js 也允许使用.postcssrc.json或者package.json中的 postcss配置

同样可以使用postcss.config.js配置PostCSS, 当我们想要基于环境条件性的包括某些插件

  1. module.exports = {
  2. plugins:
  3. process.env.NODE_ENV === 'production'
  4. ? [
  5. 'postcss-flexbugs-fixes',
  6. [
  7. 'postcss-preset-env',
  8. {
  9. autoprefixer: {
  10. flexbox: 'no-2009',
  11. },
  12. stage: 3,
  13. features: {
  14. 'custom-properties': false,
  15. },
  16. },
  17. ],
  18. ]
  19. : [
  20. // No transformations in development
  21. ],
  22. }

Next.js 也允许这个文件是.postcssrc.js

不要使用require去导入这个PostCSS 插件,插件必须作为字符串形式进行提供 …

注意如果你的postcss.config.js需要去支持相同项目中的其他非Next.js 工具,必须使用可互操作的基于对象的形式代替:

  1. module.exports = {
  2. plugins: {
  3. 'postcss-flexbugs-fixes': {},
  4. 'postcss-preset-env': {
  5. autoprefixer: {
  6. flexbox: 'no-2009',
  7. },
  8. stage: 3,
  9. features: {
  10. 'custom-properties': false,
  11. },
  12. },
  13. },
  14. }