iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >CSS的预编译器PostCSS是怎样的
  • 866
分享到

CSS的预编译器PostCSS是怎样的

2024-04-02 19:04:59 866人浏览 独家记忆
摘要

这篇文章给大家介绍CSS的预编译器PostCSS是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。提到css预编译器(css preprocessor),你可能想到Sass、Les

这篇文章给大家介绍CSS的预编译器PostCSS是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

提到css预编译器(css preprocessor),你可能想到Sass、Less以及Stylus。而本文要介绍的PostCSS,正是一个这样的工具:css预编译器可以做到的事,它同样可以做到。

“你说的我都懂,那为什么要用它?”


套装与单件

如果Sass等预编译器是新定义了一种模板语言,然后将其转化为css的话,PostCSS则是更纯粹地对css本身做转换。

回想一下你是如何学习使用css预编译器的:了解到有这样一种可以转化为css的语言,它有很多特性,变量、嵌套、继承等等,每一种特性都通过一定语法实现。大概就像是递给你一个已经封装好的工具箱(量产型?),你可以在里面找有用的东西。

那PostCSS是怎样呢?PostCSS就像只递给你一个盒子,但告诉你你可以从旁边的陈列柜取走自己想要的工具放进盒子打包带走。如果你觉得陈列柜里的不够好,PostCSS还可以帮你打造你自己的工具。所以,使用PostCSS,你可以仅取所需。
CSS的预编译器PostCSS是怎样的

这就是PostCSS的模块化(modular)风格。它作为一个css转换工具,自身很小,其所有的转换功能都是插件,因此可以个性化配置。


PostCSS的简要原理

PostCSS自身只包括css分析器,css节点树api,source map生成器以及css节点树拼接器。

css的组成单元是一条一条的样式规则(rule),每一条样式规则又包含一个或多个属性&值的定义。所以,PostCSS的执行过程是,先css分析器读取css字符内容,得到一个完整的节点树,接下来,对该节点树进行一系列转换操作(基于节点树API的插件),最后,由css节点树拼接器将转换后的节点树重新组成css字符。期间可生成source map表明转换前后的字符对应关系:
CSS的预编译器PostCSS是怎样的

比较有意思的是,PostCSS的插件其实都是javascript函数,它们使用PostCSS的节点树API,对css节点树进行不同的转换。

插件预览

所有插件都可以在PostCSS的主页中查询到,这里只选取一小部分示意一下。
Autoprefixer

PostCSS最有名的插件是Autoprefixer。如名所示,可以自动为你添加浏览器私有前缀。它的添加值会参考Can I Use及你设定的浏览器支持范围,因此相当可靠。下面是一个示例(以我设定的浏览器支持范围):

CSS Code复制内容到剪贴板

  1. .container{   

  2.     display: flex;   

  3. }  

编译后:

CSS 

  1. .container{   

  2.     display: -WEBkit-box;   

  3.     display: -webkit-flex;   

  4.     display: -ms-flexbox;   

  5.     display: flex;   

  6. }  

postcss-nested&postcss-mixins

在刚开始使用PostCSS时,我就想到要用PostCSS实现我在Sass中最常用的特性。所以,我找到了postcss-nested和postcss-mixins。将它们结合起来后,就可以做到这样:

CSS Code复制内容到剪贴板

  1. @define-mixin clearfix{   

  2.     &:after{   

  3.         display: table;   

  4.         clear: both;   

  5.         content: " ";   

  6.     }   

  7. }   

  8.   

  9. .column-container{   

  10.     color: #333;   

  11.     @mixin clearfix;   

  12. }  

编译后:

CSS Code复制内容到剪贴板

  1. .column-container{   

  2.     color: #333;   

  3. }   

  4.   

  5. .column-container:after{   

  6.     display: table;   

  7.     clear: both;   

  8.     content: " ";   

  9. }  

到这里,你是否已经有了“预编译器可以做到的它也可以做到”的感觉呢?
如何使用PostCSS

我个人推荐结合Gulp使用,本文在此只介绍gulp-postcss的用法。

gulp-postcss及插件都是npm,首先,使用npm install将它们分别安装到项目目录中(会位于node_modules)。然后,编辑glupfile.js,将PostCSS注册为Gulp的一个任务。以下是一个结合使用了Autoprefixer、postcss-simple-vars、postcss-mixins、postcss-nested4个插件,且生成source map文件的例子:

CSS 

  1. var gulp = require("gulp");   

  2. var postcss = require("gulp-postcss");   

  3. var autoprefixer = require('autoprefixer-core');   

  4. var postcssSimpleVars = require("postcss-simple-vars");   

  5. var postcSSMixins = require("postcss-mixins");   

  6. var postcssNested = require("postcss-nested");   

  7. var sourcemaps = require("gulp-sourcemaps");   

  8.   

  9. // Css process.   

  10. gulp.task("postcss", function(){   

  11.     var processors = [   

  12.         postcssMixins,   

  13.         postcssSimpleVars,   

  14.         postcssNested,   

  15.         autoprefixer({   

  16.             browsers: ["Android 4.1", "iOS 7.1", "Chrome > 31", "ff > 31", "ie >= 10"]   

  17.         })];   

  18.   

  19.     return gulp.src(["./stylesheets/src/*.css"])   

  20.         .pipe(sourcemaps.init())   

  21.         .pipe(postcss(processors))   

  22.         .pipe(sourcemaps.write("."))   

  23.         .pipe(gulp.dest("./stylesheets/dest"));   

  24. });  

在上面这段代码中,processors是一个数组,定义了用到的PostCSS插件。PostCSS会按照定义顺序依次执行插件,因此,在结合多个插件使用时,请注意它们的位置。
自定义转换

此外,你可以很容易地创建你自己的转换(还记得前面说过PostCSS的插件都是JavaScript函数吧?)。例如,下面是一个自定义的转换方法,它将css代码中的带有rem单位的值,更改为px的值。

CSS 

  1. var custom = function(css, opts){   

  2.     css.eachDecl(function(decl){   

  3.         decl.value = decl.value.replace(/\d+rem/, function(str){   

  4.             return 16 * parseFloat(str) + "px";   

  5.         });   

  6.     });   

  7. };  

然后,你将这个方法直接添加到processors中(就像postcssMixins那些那样)就可以使用。如果原来有值是3rem,将变成48px。

以上只是一个简单的转换,如果要正式做一个插件,请参考PostCSS插件指南。
性能

PostCSS宣称,由JavaScript编写的PostCSS比c++编写的libsass(Sass原本是Ruby编写的,但后来出了C++的引擎,也就是libsass,它更快)还要快3倍。这里的具体数字我觉得不用多关心,可以感受到“PostCSS的运行速度很快”就足够了。

实际运行起来大概这样:
CSS的预编译器PostCSS是怎样的

做到更多

基于PostCSS,可以做到许多现有的css预编译器做不到的事。例如,插件系列cssnext可以让你使用CSS4+的语法(增加了变量等许多特性),它会帮你转化为目前可用的css3
一点问题

PostCSS有一个问题,那就是它是零散的,所以我无法找到一个编辑器能正确地解析并高亮准备使用PostCSS的css代码。例如在WebStORM中我把它当做普通的css文件,结果就会收到很多红色的错误提示。
所以,css预编译器过时了吗?

当然不会。就像其他流行的框架和工具那样,css预编译器是已经验证过的可用工具,我们完全可以根据需要选用。

Sass等css预编译器的特点是成熟可靠。一方面,它们已经是流行的模板语言,有完善的文档和周边支持,相对稳定,新加入团队的人也能比较容易地理解。另一方面,集成的风格有它的方便之处,就像你可能会懒得去组装一个模型,但能找到专业的人替你完成。

PostCSS的特点则是模块化。从长远来看,PostCSS可以做到更多类型的css转换。而可定制的风格非常适合追求个性的人(更快捷,而且可以自己做出很有趣的插件)。

此外,css预编译器和PostCSS可以协同使用。有一个流行的用法就是Sass编译后再接PostCSS的Autoprefixer(毕竟这是PostCSS的招牌插件)。
结语

PostCSS的风格可以说是在打造一个改变css开发方式的生态系统。所以如果说到未来,还是挺期待的。

关于CSS的预编译器PostCSS是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: CSS的预编译器PostCSS是怎样的

本文链接: https://www.lsjlt.com/news/81801.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSS的预编译器PostCSS是怎样的
    这篇文章给大家介绍CSS的预编译器PostCSS是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。提到css预编译器(css preprocessor),你可能想到Sass、Les...
    99+
    2024-04-02
  • CentOS Mysql用户建立设置编译器的编译参数是怎样的
    CentOS Mysql用户建立设置编译器的编译参数是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。建立CentOS Mysql用户组是CentOS用户必须学习使用的,由...
    99+
    2023-06-16
  • javascript预编译的功能是什么
    本篇内容主要讲解“javascript预编译的功能是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript预编译的功能是什么”吧! ...
    99+
    2024-04-02
  • CentOS 5编译编译基本类系统软件是怎样的
    这篇文章将为大家详细讲解有关CentOS 5编译编译基本类系统软件是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CentOS社区不断与其他的同类社区合并,使CentOS Linux逐...
    99+
    2023-06-16
  • CSS的预处理框架stylus是怎样的
    CSS的预处理框架stylus是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。stylus介绍是个什么鬼?对于开发来说,CSS的弱点在于...
    99+
    2024-04-02
  • CentOS Apache编译和安装是怎样的
    CentOS Apache编译和安装是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下载:CentOS Apache[root@localhost src]# chmod...
    99+
    2023-06-16
  • J2ME中KVM编译过程是怎样的
    今天就跟大家聊聊有关J2ME中KVM编译过程是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这里向大家简单介绍一下Windows下编译KVM的...
    99+
    2024-04-02
  • Linux系统是怎样编译boost
    本篇文章为大家展示了Linux系统是怎样编译boost,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。boost库是一个可移植、提供源代码的c++库,作为标准库的后备,是c++标准化进程的开发引擎之一...
    99+
    2023-06-28
  • 一文说透什么是MySQL的预编译
    目录一、什么是mysql的预编译?二、 如何使用预编译?2.1 MySQL预编译的语法三、使用PreparedStatement进行预编译3.1 开启查询日志3.2 开启预编译功能3.3 cachePrepStmts参数...
    99+
    2024-04-02
  • javascript中预编译指的是什么意思
    这篇文章将为大家详细讲解有关javascript中预编译指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在JavaScript中...
    99+
    2024-04-02
  • CSS的DRY编程方式是怎样的
    这篇文章将为大家详细讲解有关CSS的DRY编程方式是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。DRY就是Donot repeat youself ...
    99+
    2024-04-02
  • 怎样理解IronPython 编译器
    这篇文章将为大家详细讲解有关怎样理解IronPython 编译器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。自 IronPython 正式发布以来,由于对 Python 语言的喜爱所驱使,...
    99+
    2023-06-17
  • GD编译出错解决方法是怎样的
    这期内容当中小编将会给大家带来有关GD编译出错解决方法是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。编译最新的2.0.35版本,用默认的 ./configure编译 当make的时候,出现以下错误...
    99+
    2023-06-13
  • CSS中的OOCSS编程方式是怎样的
    CSS中的OOCSS编程方式是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。OOCSS即面向对象的CSS,这里对象指的是页面中的元素...
    99+
    2024-04-02
  • 57个让C编译器崩溃的代码分别是怎样的
    本篇文章给大家分享的是有关57个让C编译器崩溃的代码分别是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我不清楚你是否很高兴看到你的程序会让编译器崩溃的情况,反正我很喜欢...
    99+
    2023-06-17
  • C语言预编译的方法
    本篇内容介绍了“C语言预编译的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、预定义符号预定义符号是系统本身定义的:FILE ...
    99+
    2023-06-30
  • C++编译器是怎样实现异常处理
    本篇文章为大家展示了C++编译器是怎样实现异常处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。由于C++编译器装程序太多,此处无法上传,所以大家有communitysever的可以从里面获得然后反...
    99+
    2023-06-17
  • mysql linux环境编译存储过程是怎样的
    mysql linux环境编译存储过程是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。   &...
    99+
    2024-04-02
  • JavaScript中的预编译如何进行
    本篇内容介绍了“JavaScript中的预编译如何进行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&nb...
    99+
    2024-04-02
  • JavaScript中预编译的示例分析
    小编给大家分享一下JavaScript中预编译的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript 预编...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作