postCss基本介绍

ops/2024/9/24 22:25:00/

🌟什么是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(生成),输出:

javascript">var a = function () {return 123
}

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

🌟使用

安装

javascript"> npm i css>postcss

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

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

javascript">npm i autoprefixer

 index.css:

css">.flex{display: flex;
}

index.ts: 

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

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

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

javascript">import css>postcss from "css>postcss";
import autoprefixer from "autoprefixer";
import fs from 'node:fs'
const css = fs.readFileSync('./index.css', 'utf-8')
//browserList
const browserList: string[] = ['ie >=8','chrome >= 31','firefox >= 31','safari >= 7','opera >= 23',
];
css>postcss([autoprefixer(browserList)]).process(css).then(result => {console.log(result.css)
})

此时输出结果如下:

🌟总结

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


http://www.ppmy.cn/ops/17402.html

相关文章

R可视化:绘制带有显著性标记的误差棒图

介绍 ggplot2绘制分组误差棒图加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE) library(tidyverse) library(ggpubr) library(rstatix)# rm(list = ls()) options(stringsAsFactors = F) options(future.globals.maxSize = 10000 * 1024^2)Importing data …

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏,据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后,在1975年传入美国,1976年leslieH.Autl博士甚至还出版了一本名为The…

YOLOv8 实现车牌检测,生成可视化检测视频(20240424)

原项目源码地址:GitHub 我的源码地址:Gitee 环境搭建请参考:Win10 搭建 YOLOv8 运行环境(20240423)-CSDN博客 环境测试请参考:本地运行测试 YOLOv8(20240423)-CSDN博客 训练数据…

如何在PostgreSQL中使用索引覆盖扫描提高查询性能?

文章目录 解决方案1. 创建合适的索引2. 确保查询能够使用索引覆盖扫描3. 调整查询以利用索引覆盖扫描4. 监控和调优 示例代码1. 创建索引2. 编写查询3. 检查是否使用索引覆盖扫描4. 调整索引 总结 在PostgreSQL中,索引是提高查询性能的关键工具之一。索引允许数据库…

鼠标手辅助器

鼠标发生移动后 ,静止在某位置指定时间后即可触发点击事件 支持多种点击事件,支持快捷键触发,支持自定义配置 有其他更好的思路 ,支持有偿定制,留言留下联系方式,看到会加你 # !/usr/bin/python3 # -*- c…

laravel 使用微信的图片内容检测及文字内容检测

文字内容检测 const SEC_LABEL [100 > 正常,10001 > 广告,20001 > 时政,20002 > 色情,20003 > 辱骂,20006 > 违法犯罪,20008 > 欺诈,20012 > 低俗,20013 > 版权,21000 > 敏感,];/*** 检测文字安全* param $openid openid* param $content 检…

python 脚本头(PyCharm+python头部信息、py头部信息、python头信息、py头信息、py文件头部)

文章目录 参考PyCharm设置脚本头头部信息 参考 https://developer.aliyun.com/article/1166544 https://blog.csdn.net/Dontla/article/details/131743495 https://blog.csdn.net/dongyouyuan/article/details/54408413 PyCharm设置脚本头 打开pycharm,点击file–…

软件工程中的耦合和内聚

耦合 在软件工程中,耦合是一个重要的概念,用于描述模块或组件之间的相互依赖程度。 从非直接耦合到内容耦合的耦合性依次升高,所以非直接耦合是我们最想见到的结果,内容耦合是我们最不想见到的结果。 非直接耦合数据耦合标记耦…