postcss 是一个用javascript 工具和插件转换css 代码的工具。比如我们可以使用Autoprefixer 插件来自动获取浏览器的流行度和能够支持的属性,并根据这些数据帮我们自动的为css 规则添加前缀,将最新的css 语法转换成大多数浏览器都能理解的语法。
css 模块能让我们永远不用担心命名太大众化而造成冲突
postcss 与webpack 结合使用,需要安装style-loader、 css-loader、 postcss-loader 三个loader
Autoprefixer 插件
比如有时候我们的部分浏览器不支持css3的display: flex 属性,那么我们就需要在此属性前添加对应的前缀来兼容。这个时候我们就可以使用Autoprefixer 插件配合postcss来完成。
安装Autoprefixer 插件
npm install autoprefixer -D
创建 postcss.config.js 文件
// postcss.config.jsmodule.exports = {plugins: [require('autoprefixer')]}
同时在webpack.config.js 配置相关loader
// webpack.config.jsmodule.exports = {module: {rules:[{test: /\.css$/,exclude: /node_modules/,use: ['style-loader', 'css-loader', 'postcss-loader']}]}}
我们还需要在 package.json 约定浏览器版本
// package.json{"browserslist": ["> 1%", // 支持的浏览器为全球使用率在1%以上的浏览器"last 2 version" // 浏览器版本为最新的2个版本]}
最终效果显示
css 模块
启用css 模块
// webpack.config.jsmodule.exports = {module: {rules:[{test: /\.css$/,exclude: /node_modules/,use: ['style-loader',{loader: 'css-loader',options: {modules: true}},'postcss-loader']}]}}
同时在引入css文件的地方,引入的是一个模块
// index.cssbody {background-color: green;display: flex;}body .box {height: 100px;width: 100px;background-color: red;}
// index.js// 以往引入的方式为// import './index.css'import style from './index.css'const div = document.createElement('div')// div.classList.add('box')div.classList.add(style.box)document.body.appendChild(div)
最终效果展示

对于css 模块,我们还可以部分开启 css 模块模式,比如全局样式我们可以冠以 .global 前缀,如:
.global.css 我们使用普通模式
.css 其它的css我们使用css 模块模式
// webpack.config.jsmodule.exports = {module: {rules:[// 匹配启用css模块模式的文件{test: new RegExp(`^(?!.*\\.global).*\\.css`),exclude: [path.resolve(__dirname, '..', 'node_modules')],use: ['style-loader',{loader: 'css-loader',options: {modules: true}},'postcss-loader']},// 匹配普通模式的文件{test: new RegExp(`^(.*\\.global).*\\.css`),exclude: [path.resolve(__dirname, '..', 'node_modules')],use: ['style-loader','css-loader','postcss-loader']}]}}
