ess和Sass主要是解决了一个模块化的问题,但是还有一个全局的样式的污染问题。我今天个人分享的就是关于PostCss的一些个人理解。
PostCss是Autoprefixer的开发者Andrey Sitnik开发的,它最初是一个通过JavaScript来处理CSS 的方法。
可以理解为一种插件系统(类似于css领域的webpack),它本身只是一个API,作为一个API它可以创建任何需要的插件和工具。
PostCss有两个概念:pre-processor(预处理器)和post-processor(后处理器)。
像Sass、Less和Stylus都是属于预处理器的范畴,按照预处理器的语法来写css的代码,最后交由预处理器的编译器编译成一个传统的css,这个就叫做预处理器。
post-processor(后处理器)就是我们把css代码写完之后,交由它去处理,添加一些必要的属性,比如比较典型的:CSS Prefixer,会加上一些浏览器的前缀。
PostCSS is a tool for transformimg CSS with JS plugins.
These plugins can support variables and mixins,transpile future CSS syntax,inline images,and more.
翻译过来的意思就是说呢,PostCSS是一个用JS插件转换css的工具。这些插件可以支持变量和混合,转换成未来的css语法,内联图像等。我们可以把PostCss理解成一个管道,然后在管道各处可以放一些插件,然后从管道经过的css都会经过插件的处理。实际上PostCss它将css代码转换成抽象的一个语法结构AST,就是一个对象的一个树,然后方便插件处理。
PostCss是一个插件系统,所以它既不是预处理器也不是后处理器,类似于css领域的webpack、Grunt和Gulp进行集成。它的作用就是整合预处理器和后处理器。
关于PostCss的使用,一般是不单独使用的,与已有的构建工具集合;比如webpack、Grunt和Gulp。
最广泛的PostCss使用是与webpack集成。
1 搭建环境
npm init
06-18-01
npm install webpack webpack-cli --save-dev
注意:”script“:{“bulid”:"webpack --config webpack.config.js"}意思就是说在运行webpack,--config表示指定配置文件,webpack.config.js 配置文件名。
06-18-02
06-18-03
npm run build
因为要查看PostCss打包的一个效果,所以分离css是一定需要的。
需要安装的插件:
npm install css-loader --save-dev npm install extract-text-webpack-plugin@next --save-dev npm install postcss-loader --save-dev
自动添加浏览器前缀,这个插件是根据can i use解析css并且为其添加浏览器厂商前缀的PostCss插件。
caniuse(https://www.caniuse.com )是一个网站,我们可以在这个网站里面知道我们所使用的一个属性的浏览器的支持情况。
npm install autoprefixer --save-dev
安装之后添加到webpack.config.js下面的loader里面
强制开发人员按照团队css规范来写css样式的工具,类似的eslint(JS的规范)。
npm install stylelint stylelint-config-lost stylelint-config-standard --save-dev
它是一个强大的,现代的linter,可以帮助您避免错误并在您的样式中强制执行约定。 为什么是强大的呢?因为它的特征:
关于它更多的介绍可以通过(https://stylelint.io/ )官网了解一下。
npm install postcss-cssnext --save-dev
以模块化方式实现Css, 重点在于解决了样式冲突
npm install postcss-modules --save-dev
强大的PostCSS网格系统
npm install lost --save-dev
文章主要介绍了PostCss的定位,结合webpack介绍了PostCss主要的几个插件:autoprefixer、postcss-cssnext、postcss-modules、lost、stylelint。文章可能存在很多不足,阅读的小伙伴们看到了可以稍作提示或者哪里有错误的可以私信告诉我纠正过来,O(∩_∩)O谢谢。
ostcss 一种对css编译的工具,类似babel对js的处理,常见的功能如:
1 . 使用下一代css语法
2 . 自动补全浏览器前缀
3 . 自动把px代为转换成rem
4 . css 代码压缩等等
postcss 只是一个工具,本身不会对css一顿操作,它通过插件实现功能,autoprefixer 就是其一。
less sass 是预处理器,用来支持扩充css语法。
postcss 既不是 预处理器也不是 后处理器,其功能比较广泛,而且重要的一点是,postcss可以和less/sass结合使用
这里只说在webpack里集成使用,首先需要 loader
1 . 安装
npm install postcss-loader –save-dev
2 . webpack配置
一般与其他loader配合使用,下面*标部分才是postcss用到的
配合时注意loader的顺序(从下面开始加载)
3 . postcss配置
项目根目录新建 postcss.config.js文件,里面配置一些插件
注:也可以在webpack中配置
1 . Autoprefixer
前缀补全,全自动的,无需多说
安装:
cnpm install Autoprefixer --save-dev
2 . postcss-cssnext
使用下个版本的css语法【关于语法另一篇文章会单独讲】
安装:
cnpm install postcss-cssnext --save-dev
3 . postcss-pxtorem
把px转换成rem
安装:
cnpm install postcss-pxtorem --save-dev
配置项:
特殊技巧:不转换成rem
px检测区分大小写,也就是说Px/PX/pX不会被转换,可以用这个方式避免转换成rem
大致步骤:
在PostCSS中有几个关键的处理机制:
Source string → Tokenizer → Parser → AST → Processor → Stringifier
将源css字符串进行分词
举个例子:
.className { color: #FFF; }
通过Tokenizer后结果如下:
[
["word", ".className", 1, 1, 1, 10]
["space", " "]
["{", "{", 1, 12]
["space", " "]
["word", "color", 1, 14, 1, 18]
[":", ":", 1, 19]
["space", " "]
["word", "#FFF" , 1, 21, 1, 23]
[";", ";", 1, 24]
["space", " "]
["}", "}", 1, 26]
]
以word类型为例,参数如下:
const token=[
// token 的类型,如word、space、comment
'word',
// 匹配到的词名称
'.className',
// 代表该词开始位置的row以及column,但像 type为`space`的属性没有该值
1, 1,
// 代表该词结束位置的row以及column,
1, 10
]
经过Tokenizer之后,需要Parser将结果初始化为AST
this.root={
type: 'root',
source: { input: {css: ".className { color: #FFF; }", hasBOM: false, id: "<input css 1>"},
start: { line: 1, column: 1 } ,
end: { line: 1, column: 27 }
},
raws:{after: "", semicolon: false}
nodes // 子元素
}
经过AST之后,PostCSS提供了大量JS API给插件用
插件处理后,比如加浏览器前缀,会被重新Stringifier.stringify为一般CSS。
参考:
https://segmentfault.com/a/1190000017886402
https://www.jianshu.com/p/288963680642
作者:指尖跳动
链接:https://www.jianshu.com/p/9a9048bc8978
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
PostCSS 是一个强大的 CSS 处理工具,可以帮助开发者自动化地转换和优化 CSS。通过.postcss.js 配置文件,你可以定制化地配置 PostCSS 插件和选项,以适应你的项目需求。本文将详细介绍.postcss.js 配置文件的各个方面,帮助你更好地理解如何配置 PostCSS。
首先,你需要在项目根目录下创建一个名为.postcss.js 的文件。这个文件将作为 PostCSS 的配置文件,并包含一些用于配置插件和选项的 JavaScript 代码。
一个简单的.postcss.js 配置文件可能如下所示:
module.exports={
plugins: [
'autoprefixer',
'cssnano'
]
};
在这个配置中,我们使用了两个常用的 PostCSS 插件:autoprefixer 用于自动添加 CSS 前缀,cssnano 用于压缩和优化 CSS。
你可以通过对象形式配置插件,设置插件的选项。例如,配置autoprefixer 插件的浏览器支持:
module.exports={
plugins: {
'autoprefixer': {
overrideBrowserslist: ['last 2 versions', '> 5%']
},
'cssnano': {}
}
};
在.postcss.js 配置文件中,你还可以使用更多高级选项。以下是一些示例:
你可以根据不同条件来配置插件。例如,只在生产环境下使用cssnano 插件:
const isProduction=process.env.NODE_ENV==='production';
module.exports={
plugins: {
'autoprefixer': {},
...(isProduction ? { 'cssnano': {} } : {})
}
};
有时,你可能想将多个插件配置串联起来。你可以使用postcss-preset-env 插件来预设多个插件配置:
module.exports={
plugins: {
'postcss-preset-env': {
stage: 1,
features: {
'nesting-rules': true
}
}
}
};
你可以使用插件的别名来替代插件的名称,以便更好地管理配置。
module.exports={
plugins: {
'autoprefixer': {},
'cssnano': {},
'postcss-preset-env': {
stage: 1,
features: {
'nesting-rules': true
}
}
}
};
.postcss.js 配置文件允许你定制化地配置 PostCSS 插件和选项,以满足不同项目的需求。通过了解基本配置、插件配置、高级选项以及插件的别名使用,你可以更好地掌握如何使用.postcss.js 配置文件,优化你的 CSS 处理流程,提高开发效率。
*请认真填写需求信息,我们会在24小时内与您取得联系。