• postCss基本介绍


    🌟什么是postCss?

            我个人的理解postCss就是css界的babel,它提供一个过程,而在这个过程中,去干什么就是你自己的事情,所以很多人写插件,去做代码转换,或者兼容等等。

    babel 提供过程 @babel/preset-env  es6-es5
    `JavaScript`
    AST -> transform -> generate(生成)
    postCss提供过程 
    `css`
    AST -> transform -> generate(生成)

    两者都是提供一个过程,只是一个是处理javaScript,一个是处理css。

    过程介绍

    这个过程中AST指的是AST抽象语法树,这是一种概念(思想),举个例子:es6箭头函数的AST如下:

    可以访问这个网站来将代码转换为抽象语法树https://astexplorer.net/

    根据这其中的节点(标记),去执行转换等操作,这一步就是transform,比如将上图const 转换为 var。

    转换完成后就是generate(生成),输出:

    1. var a = function () {
    2. return 123
    3. }

     以上就是一个完整过程的粗略说明。

    🌟使用

    安装

     npm i postcss

    不知道大家有没有见过这个插件:autoprefixer,这个东西是帮助实现兼容各个浏览器加前缀的,并且是基于postCss实现的。没见过也不奇怪,因为我们平时使用的脚手架中其实都已经配好了。

    下面我们也来用一用(我们这里是单独使用,postCss可以结合vite和webpack使用,vite中自带了postCss,webpack需要postcss-loader,下篇文章会结合vite写一个实现页面适配的插件):

    npm i autoprefixer

     index.css:

    1. .flex{
    2. display: flex;
    3. }

    index.ts: 

    1. import postcss from "postcss";
    2. import autoprefixer from "autoprefixer";
    3. import fs from 'node:fs'
    4. const css = fs.readFileSync('./index.css', 'utf-8')
    5. postcss([autoprefixer()]).process(css).then(result => {
    6. console.log(result.css)
    7. })

    postcss是一个函数,参数是一个插件数组,并且多个插件执行顺序就是按数组顺序依次执行,process()接收的就是css文件,终端输入ts-node .\index.ts启动:

    可以看到这里就是把我们的css文件内容输出,并无变化,这是因为autoprefixer()需要传入需兼容浏览器规则,然后动态去兼容各个浏览器版本:

    1. import postcss from "postcss";
    2. import autoprefixer from "autoprefixer";
    3. import fs from 'node:fs'
    4. const css = fs.readFileSync('./index.css', 'utf-8')
    5. //browserList
    6. const browserList: string[] = [
    7. 'ie >=8',
    8. 'chrome >= 31',
    9. 'firefox >= 31',
    10. 'safari >= 7',
    11. 'opera >= 23',
    12. ];
    13. postcss([autoprefixer(browserList)]).process(css).then(result => {
    14. console.log(result.css)
    15. })

    此时输出结果如下:

    🌟总结

    如前文所说,postCss就是为我们提供了一个过程,在这个过程中我们可以去进行需要的操作,这里就简单介绍一下,下篇结合vue3 + vite 实现移动端适配插件,原理就是将项目中所有的px单位转换成vw单位。

  • 相关阅读:
    云存储目前面临的3个问题
    SQL Server教程 - T-SQL-DDL(Data Definition Language)
    为什么CRM管理策略能增加企业利润?
    目标检测——小麦穗头数据集
    【详细教程hexo博客搭建】1、从零开始搭建一个能用的博客
    linux中经典详解 top命令的作用
    Java应用|使用Apache Spark MLlib构建机器学习模型
    C++入门(二)
    自适应感兴趣区域的级联多尺度残差注意力CNN用于自动脑肿瘤分割| 文献速递-深度学习肿瘤自动分割
    放到WEB-INF中的文件,不能直接通过浏览器地址栏访问了
  • 原文地址:https://blog.csdn.net/G_ing/article/details/138073748