参考资料:13 分钟掌握 PostCSS_哔哩哔哩_bilibili(峰华前端)
postcss基本使用
postcss是个处理css相关文件的平台,可以通过插件来补全浏览器前缀、使用新特性转成旧的写法、px自动转rem、css语法规则检查等等。
搭建项目
新建文件夹 test-postcss
用vscode打开,命令里初始化项目
yarn init -y
新建index.html,内容包括
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="./style.css" />
<title>test-postcss</title>
</head>
<body>
<main>
<div class="boxs">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</main>
</body>
新建style.css,内容有
main {
margin-bottom: 24px;
letter-spacing: 1px;
font-size: 24px;
height: 100vh;
background-color: black;
}
.boxs {
padding-bottom: 18px;
display: grid;
grid-template-columns: repeat(3, 1fr);
height: 100%;
align-content: space-around;
}
.box {
width: 100px;
height: 100px;
background: linear-gradient(45deg, blue, orange);
}
使用postcss
安装
yarn add postcss postcss-cli -D
运行
npx postcss style.css -o dist.css
这时可以看到根目录下的dist.css,内容和style.css一样,因为还没有配置任何插件。
把浏览器里的引用地址改为dist.css
<link rel="stylesheet" href="./dist.css" />
使用autoprefixer插件
安装
yarn add autoprefixer -D
运行指令,通过参数使用这个插件
npx postcss style.css -o dist.css -u autoprefixer
此时打包后的代码仍无变化,可以用 npx autoprefixer --info
查看加前缀的属性。
修改支持的浏览器列表,让兼容Chrome 69以上的版本,在package.json中增加
"browserslist": [
"cover 99%",
"Chrome >= 69"
],
运行指令(同上),可以看到生成的dist.css里面一些属性和值加了浏览器前缀
-webkit-align-content: space-around;
-ms-flex-line-pack: distribute;
align-content: space-around;
……
background: -webkit-linear-gradient(45deg, blue, orange);
background: -moz-linear-gradient(45deg, blue, orange);
background: -o-linear-gradient(45deg, blue, orange);
background: linear-gradient(45deg, blue, orange);
命令行带参不方便,可使用配置文件。根目录下新建postcss.config.js,内容为
module.exports = {
plugins: [
require("autoprefixer")
]
}
删除dist.css后运行不带参数的指令
npx postcss style.css -o dist.css
发现配置生效了。
使用postcss-preset-env
这个插件功能涵盖了autoprefixer,而且还有将高版本css转成低版本的能力,即css界的babel。
安装
yarn add postcss-preset-env -D
测试babel,需要把css的stage属性提高,使用比较新的属性测试,比如& 选择器
修改 postcss.config.js ,增加如下配置
const postcssPresetEnv = require('postcss-preset-env')
module.exports = {
plugins: [
postcssPresetEnv({
stage: 0
}),
]
}
然后在css中使用&嵌套选择器,以及使用比较新的属性padding-inline
.boxs {
padding-inline: 12px;
}
.box {
&:hover {
background: linear-gradient(45deg, orange, blue);
}
}
运行指令编译css,发现输出的css中 &
内的内容被提出来了,padding-inline
也变成了padding-left
和 padding-right
。鼠标滑过浏览器上的色块,也有变化。
使用stylelint
stylelint可以检查css写法是否规范
安装
yarn add stylelint stylelint-config-standard -D
根目录新建.stylelintrc.json文件,内容为
{
"extends":"stylelint-config-standard"
}
在postcss.config.js里面配置
plugins: [
require("stylelint")
]
再运行编译,发现控制台弹出黄色的警告,内容是哪些css写法不符合规范。如果没看到弹出警告,那尝试将某个属性名字或值修改成一个错误的写法,再编译,警告就出来了。
使用postcss-pxtorem
可以在打包时自动把px单位转换成rem
安装
yarn add postcss-pxtorem -D
在postcss.config.js中配置,其中propList为‘*’是将所有属性转换,而默认的只有字号字间距等几个属性。
plugins: [
require("postcss-pxtorem")({
propList: ['*'],
})
]
运行编译指令,发现输出的css中的px已经变成了rem。
指令简写
运行一长串指令不方便,可以添加到package.json中的scripts里
"scripts": {
"build":"postcss style.css -o dist.css"
}
现在在命令行直接运行 yarn build
即可
在CRA中使用
先提交完代码,再暴露配置项
yarn eject
在config下的webpack.config.js中查找postcss,把postcss-preset-env中的stage改为0。注意有两处,分别是判断是否使用useTailwind。
然后再package.json中把postcss相关的依赖重新手动安装为最新版。重启项目,发现css新写法已经被转换了。
查找ident: ‘postcss’,在后面同级的plugins数组内最后添加pxtorem模块即可,当然先要手动安装依赖。
require('postcss-pxtorem')({
propWhiteList: ['*'],
})
重启项目,px已经变成rem了。