PostCSS
默认行为
Next.js 使用 PostCSS 编译其内置 CSS 支持的 CSS。
开箱即用,无需任何配置,Next.js 使用以下转换编译 CSS
- Autoprefixer 自动将供应商前缀添加到 CSS 规则(追溯到 IE11)。
- 跨浏览器 Flexbox 错误修复 被纠正为表现得像 规范 一样。
- 新的 CSS 功能会自动编译以兼容 Internet Explorer 11
默认情况下,CSS Grid 和 自定义属性 (CSS 变量) 不为 IE11 支持编译。
要为 IE11 编译 CSS Grid 布局,你可以将以下注释放在你的 CSS 文件的顶部
/* autoprefixer grid: autoplace */
你也可以通过配置 autoprefixer,在你的整个项目中为 CSS Grid 布局 启用 IE11 支持,配置如下(已折叠)。有关更多信息,请参阅下面的“自定义插件”。
点击查看启用 CSS Grid 布局的配置
{
"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.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,
},
},
],
]
: [
// No transformations in development
],
}
须知: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, }, }, }, }
这是否有帮助?