资讯专栏INFORMATION COLUMN

PostCSS原理解析

changfeng1050 / 3253人阅读

摘要:写在前面的话前端工程化日益成熟今天,我们对于工具越来越深的封装。结语更多的是提供平台能力,赋能的处理。

写在前面的话

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

简介

PostCSS是一个通过JS插件转换样式表的工具,它本身并不是一门新的CSS语言,而是一个平台或者是生态心态,提供插件扩展服务即JS API,开发者可以根据这些接口,定制开发插件,目前比较流行的插件工具如: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提供了大量JS API给插件用

Stringifier

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

结语

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101018.html

相关文章

  • 从0到1:PostCSS 插件开发最佳实践

    摘要:单元测试秉承测试驱动开发的开发理念,单元测试的任务是必不可少的。维护一份按照建议,也将更新历史等数据放在了一个名为文件上,并采用语义化的版本号。 本文原始来源:http://devework.com/postcss-p...。转载请提供原始来源,谢谢! showImg(https://segmentfault.com/img/bVHtqu?w=2028&h=612); 前阵子为了满足工...

    nidaye 评论0 收藏0
  • VSCode下让CSS文件完美支持SCSS或SASS语法方法

    摘要:下让文件完美支持或语法方法习惯后通常都是直接对文件进行处理但是大部分习惯的朋友也许不适应了我专门研究了一下在编辑器下如果配置相关代码和设置达到文件完美编写的办法其他语法类型原理相似这里以为例开始配置编辑器设置的配置首先配置编辑器的设置按快捷 VSCode下让CSS文件完美支持SCSS或SASS语法方法 习惯Webpack + PostCSS后, 通常PostCSS都是直接对CSS文件进...

    superPershing 评论0 收藏0
  • 更便捷的css处理方式-PostCSS

    摘要:本身并不直接用于处理样式,只有配合它的插件,才能完成相关的编译工作。是很容易引入当前的工作流中的。无论是还是,都有比较方便的方式。 一般来说介绍一个东西都是要从是什么,怎么用的顺序来讲。我感觉这样很容易让大家失去兴趣,先看一下postcss能做点什么,有兴趣的话再往下看,否则可能没有耐心看下去。让我们开始吧 postcss能做什么 补全css属性浏览器前缀 手写的代码可以是这样的: ....

    AlexTuan 评论0 收藏0
  • 在 CSS 预编译器之后:PostCSS

    摘要:提到预编译器,你可能想到以及。而本文要介绍的,正是一个这样的工具预编译器可以做到的事,它同样可以做到。所以,预编译器过时了吗当然不会。等预编译器的特点是成熟可靠。此外,预编译器和可以协同使用。 提到css预编译器(css preprocessor),你可能想到Sass[]以及[Stylus][]。而本文要介绍的PostCSS,正是一个这样的工具:css预编译器可以做到的事,它同样可以做...

    NeverSayNever 评论0 收藏0
  • 前端面试之路一(HTML+CSS面试整理)

    摘要:或表示红色,表示绿色,表示蓝色,也可取其他数值来指定颜色。针对多字节文字,中文句子也是单词允许在单词内换行。 一、HTML基础 html常见元素和理解 html常见元素分类 head区元素:(不会在页面上留下直接内容) meta title style link script base body区: div/selection/article/aside/header/f...

    hqman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<