源码学习-postcss-pxtransform

这是一个postcss 插件,主要功能是根据不同平台,将css 中的px 单位,转化为rem 或者 rpx;

postcss 的主要原理是将css 转换成ast , 然后通过操作ast 的节点,最后将修改后的ast 转换为css . 在原理实现上跟babel 是一样的。

既然是修改节点,当然要知道节点的类型有哪些了?

h1 {
font-family: “Open Sans”, fontstack(“Arial”);
}

rule: 一个css 规则,包括一个选择器,以及用大括号包含的属性值。如上的一段就是一条规则
decl(declaration): rule 里面的一条样式。由prop 和 value 组成。如: font-family: “xxxxx” 就是一个decl. 其中prop 是 font-family; value 是 xxxxx;
comment: 一条注释。比如: // postcss-pxtransform rn eject enable
AtRules: 以@开头的规则。比如@imort “xxx.css”; @media screen and (max-width: 300px) {}

核心流程:
1 通过walkDecls 遍历所有的decl .
2 通过正则替换,将px 转换成rem 或者 rpx

考虑到插件的灵活性,增加了不转换的规则
主要通过方式
1 在css 文件头,通过注释: postcss-pxtransform disable
2 在配置信息中,增加包含和非包含的正则匹配,将一些规则排除在外,不参与转换
这里的正则形如: ['position, !background-position], 意思是所有包含posiition 的,但是却不包含background-position 的delc 。

这里有一个疑问: 为什么不通过黑名单的形式,来排除掉不参与转换的呢?而是通过包含和非包含两重关系来判断呢?
答: 目前想到的答案是:这种方案可能更灵活。如果只有黑名单,可能黑名单太多,导致不好配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值