博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostCSS原理解析
阅读量:6331 次
发布时间:2019-06-22

本文共 1423 字,大约阅读时间需要 4 分钟。

写在前面的话

前端工程化日益成熟今天,我们对于工具越来越深的封装。不管是从vue-cli3.0版本起,还是umibigfish 等前端脚手架,对于webpack都封装在内,对于工程化无疑是高效的,但也在一定程度上让新手们者失去了从零配置一个项目的机会,所以很多时候还是希望能透过大神们的框架,研究一下底层结构。

简介

是一个通过JS插件转换样式表的工具,它本身并不是一门新的CSS语言,而是一个平台或者是生态心态,提供插件扩展服务即,开发者可以根据这些接口,定制开发插件,目前比较流行的插件工具如:Autoprefixer Stylelint CSSnano

工作流

图片描述

大致步骤:

  • 将CSS解析成抽象语法树(AST树)
  • 将AST树”传递”给任意数量的插件处理
  • 将处理完毕的AST树重新转换成字符串

在PostCSS中有几个关键的处理机制:

Source string → Tokenizer → Parser → AST → Processor → Stringifier

Tokenizer

将源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]

Parser

经过Tokenizer之后,需要Parser将结果初始化为AST

this.root = {    type: 'root',    source: { input: {css: ".className { color: #FFF; }", hasBOM: false, id: ""},                   start: { line: 1, column: 1 } ,                  end: { line: 1, column: 27 }    },   raws:{after: "", semicolon: false}   nodes // 子元素}

Processor

经过AST之后,PostCSS提供了大量给插件用

Stringifier

插件处理后,比如加浏览器前缀,会被重新Stringifier.stringify为一般CSS。

结语

PostCSS更多的是提供平台能力,赋能js的处理。

转载地址:http://ruboa.baihongyu.com/

你可能感兴趣的文章
ThinkPHP 3.2.x 集成极光推送指北
查看>>
MYSQL 表情评论存储(emoji)
查看>>
js作用域链
查看>>
java中如何选择Collection Class--java线程(第3版)
查看>>
为运维人员插上腾飞更远的翅膀!
查看>>
Word 2003中编辑标记与格式标记大讨论
查看>>
从国内向海外转移域名经验谈
查看>>
浅谈apache与tomact的整合
查看>>
SQL Server vNext CTP1 on Linux
查看>>
1-为 Lync Server 2010 准备 Active Directory 域服务
查看>>
SELinux安全
查看>>
NetBackup下ORACLE恢复测试方案实例解析
查看>>
【有奖征文】“失业”程序员的苦辣酸甜
查看>>
IE9是如何被FireFox4超越全球市场份额的?
查看>>
linux bunzip2命令
查看>>
敏捷个人:通过实践TOGAF来思考如何学习并应用新的方法?
查看>>
Android系统的开机画面显示过程分析(6)
查看>>
vivo Hi-Fi+QQ音乐 数字音乐市场的一剂良方
查看>>
Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结
查看>>
聚焦触宝反侵权事件:中国创业者用什么护航海外市场大门
查看>>