1. PostCSS
- PostCSS本身只有解析能力
- 各种神奇的特性全靠插件
- 目前至少有200多个插件
2. PostCSS插件
- import 模块合并
- autoprefixer 自动加前缀
- cssnano 压缩代码
const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');
const atImport = require('postcss-import');
const cssnext = require('postcss-cssnext');
const precss = require('precss');
module.exports = {
plugins: [
atImport,
cssnext,
precss,
autoprefixer({
browsers: ['Firefox > 1']
}),
cssnano
]
};
:root{
--mainColor: red;
--dager-theme: {
color: white;
background-color: red;
};
}
a{
color: var(--mainColor);
}
.danger{
@apply --danger-theme;
}
3. PostCSS支持的构建工具
- CLI命令行工具
- webpack postcss-loader
- Gulp gupl-postcss
- Grunt grunt-postcss
- Rollup rollup-postcss
4. webpack和css
- css-loader将css变成js
- style-loader将js样式插入head
- ExtractTextPlugin将css从js中提取出来,无需通过js加载,可以单独加载css
- css modules解决css命名冲突的问题
- less-loader,sass-loader各类预处理器
- postcss-loader,PostCSS处理
5. 如何解决css模块化问题
- Less、Sass等CSS预处理器
- PostCSS插件(postcss-import / precss等)
- webpack处理CSS(css-loader + style-loader)
6. PostCSS可以做什么?
- 取决于插件可以做什么
- autoprefixer、cssnext、precss等,兼容性处理
- import模块合并
- css语法检查、兼容性检查
- 压缩文件
7. CSS modules是做什么的,如何使用?
- 解决类名冲突的问题
- 使用PostCSS或者webpack等构建工具进行编译
- 在HTML模板中使用编译过程产生的类名
8. 为什么使用JS来引用、加载CSS?
- JS作为入口,管理资源有天然优势
- 将组件的结构、样式、行为封装到一起,增强内聚,减少跟外部的耦合
- 可以做更多处理(webpack)