[翻译]纠正PostCSS的4大认识误区
市面上已经有很多的前端工具,再来引入新的前端工具,价值大不大?这主要取决于,它是否给开发人员提供了新的功能,是否值得花时间和精力去学习和使用?
PostCSS出现时有一个很有趣的现象。像sass和less这些主要做css预处理的工具,已经有了它们的类别和使用方法的区别。
让我们先解决一些PostCSS常见的认识误区,这样可以看出它是如何提高你的工作效率,改善你的css编码工作的。
提示:如果你想了解PostCSS是什么及如何安装使用它,请看《PostCSS简介》,然后再回来看这篇文章。
误区1-把PostCSS看成是前处理器或后处理器
先从PostCSS里最容易误解的点说起。
PostCSS发布时,它被定义和划分为一个“后处理器”。PostCSS插件开始就是使用有效的CSS,并通过各种插件对其进行扩展和处理,不像其它一些预处理器那样,需要特定语法和编译,才可以得到有效的CSS。
说PostCSS是一个后处理器,也是一种误导的。准确的说应该称它为CSS处理器,PostCSS使用插件,在CSS生成过程中,执行了多个任务对CSS代码进行处理。
PostCSS的一些插件,也和SASS这些预处理器一样定制了自己的语法,并通过编译把代码转化成有效的CSS。像PostCSS Nested插件,定义了选择器嵌套的语法,其作用和SASS和LESS实现的嵌套相同。其它一些PostCSS插件都是处理有效的CSS,并通过扩展它,去完成样式工作的。其中比较有名的插件Autoprefixer,它会在传入的CSS中,自动为一些样式添加浏览器前缀,然后生成最终的CSS。
还有一些PostCSS插件,并不处理CSS代码,它只会查看CSS代码。如:Stylelint会去检测CSS,还有像Colorguard会保持CSS中所有颜色值格式一致。
除了上面说的,PostCSS还可以编译SASS和LESS的源文件,输出标准的CSS。可以通过PostCSS插件,来处理和扩展名为.scss的SASS文件。更详细的下面第2条会说。
纠正第1个认识误区:PostCSS,即不是预处理也不是后处理。它是一个CSS处理器,可以在工作中,扩展和测试CSS样式代码。
误区2-PostCSS是另一个像SASS和LESS的预处理器
开发者一个常见的误解是,PostCSS是另一个像SASS和LESS的预处理器。
相信很多人使用PostCSS插件,会把注意力放到模仿其它预处理特性上,如变量,条件语句,循环和混入。随着PostCSS的发展,许多其他功能的插件被开发出来,有许多完全和传统的预处理器不同的新特性被引入。
你可以把PostCSS,当成像SASS和LESS这样的预处理器使用,你也可以用一些像SASS,LESS的扩展,来升级你的工具集。
PostCSS能够解析CSS和SCSS语法,这样你可以使用PostCSS插件来,保持你原来的编码风格。例如,在当前项目中,我可以使用PostCSS的Stylelint插件,在编译之前就去检测你的SCSS代码。产生的CSS代码,通过Autoprefixer和postcss-assets去添加浏览器前缀和行内图片的dataurl。
工作流程如下图:
当然最后,你是否选择使用PostCSS决定权在你。如果你只把它当成预处理器使用,也可以。但想让SASS和LESS这样的预处理工具,具备上面那样新的特性,它们是做不到的。
误区3-PostCSS会使构建工具更复杂
前端的工具已经够多的,为什么还要添加一个进来,使工具更复杂呢?这样思考是对的,但你要看你的项目是否需要。
你可能在不知道的情况下,已经使用了PostCSS。如果你使用过Autoprefixer为CSS添加浏览器前缀,可能你已经使用它了。Autoprefixer是一个PostCSS插件,可以在构建工具的任务中使用,如grunt和gulp工具对应的grunt-postcss和gulp-postcss插件。也可以在其它一些构建工具中使用,如Webpack,更多使用方法,请查询PostCSS文档。
当在你的项目中,用没有使用postcss插件的方式,使用了Autoprefixer,我建议你使用它。这样可以让你,在使用其它PostCSS插件时,更容易,结构也更清晰。
举个例子,如果你在Gulp构建工具中使用Autoprefixer,你的gulpfile.js里的代码应该像下面这样:
return gulp.src( ['/**/*.css'] )
// PostCSS tasks to be run on our CSS files
.pipe( postcss([
autoprefixer({
browsers: [
'> 5%',
'last 2 versions',
'ie > 7'
]
}) // Autoprefixes CSS properties for various browsers
… // any other PostCSS plugins to be run can be added in here]) )
.pipe( gulp.dest( CSS_DEST_PATH ) );
如果要添加插件,可以像Autoprefixer一样,放到这个数组里。
如果你的项目用不上Autoprefixer插件,那么可以到postcss.parts上,看看有没有什么可用的插件。
每个项目和团队需要的插件都是不同的,可以根据自己的情况进行选择。
把PostCSS集成到你的程序中,不比添加grunt和gulp插件难。PostCSS是一个独立的构建过程,如果可以改善你的CSS工作,那么就不要省略这个构建过程。
误区4-PostCSS没有比其它预处理器有更多的功能
这个误区的直接原因是,PostCSS插件模仿了SASS的功能,直接拿PostCSS和SASS,LESS相比。
在过去的12个月,PostCSS已经添加了许多新的工具。为你提供丰富的插件可供选择。
如果你觉得PostCSS只有提供了简单的预处理功能,并且坚持使用现在用着的预处理器,我觉得你可以多了解一下。像Stylelint,PostCSS Stats和doiuse,还有其它许多插件,如:可以为你提供自动化的CSS报告的插件。你之前用的工具是做不到。
PostCSS还提供了一些优化功能,如SVG和CSS minificationg,还提供了比混入更好的解决方案--为样式添加回调函数。
更重要的一点,PostCSS才刚刚起步。随着不断发展,会有更多的插件,用来解决CSS相关的问题。查看有哪些用得上的插件,可以在postcss.parts上找一找。
总之,PostCSS提供了许多预处理器无法完成的功能。可以花点时间想想,怎样做可以更容易扩展你的工具集。
总结
PostCSS是一款功能强大的CSS处理工具,可以提高前端开发人员的工作效率。它会变成越来越完善的工具,并能高效地解决常见的CSS样式,预处理和书写问题。
如果你之前已经知道PostCSS,但出于一些原因没有使用它,那么建议你再详细了解一下,这个可以大大提高前端工作效率的工具。
原文:PostCSS Mythbusting: Four PostCSS Myths Busted
原文链接:http://www.sitepoint.com/postcss-mythbusting/
[翻译]纠正PostCSS的4大认识误区的更多相关文章
- SEO人员应该突破的5大思想误区
1.外链误区 很多人在做网站优化的时候容易陷入外链怪圈,认为外链就是网站优化的一切,只要做好外链排名就会上去,让他不做外链了他将不知道做什么.特别是外链专员和一些初级SEO人员,优化网站只知道到哪里发 ...
- [翻译]用PostCSS改善你的CSS代码质量
“代码质量”这个术语对于程序员来说并不陌生.毕竟,每个开发人员都知道,代码只是能工作是不够的.它还应该具备其他要素:它应该是可读的,良好的格式和一致性.它也应该符合一些标准的量化指标.不过这些在写CS ...
- PHP-PHP-FPM的max_children一些误区
现在nginx + fpm 基本成为主流的配置,其中我们比较关注的是pm.max_chindren的配置 首先,我们关注一个前提设置: pm = static/dynamic, 这个选项是标识fpm子 ...
- 谷歌/微软/必应web页面免费翻译插件
随着网络时代的日益壮大,现在我们经常需要浏览一些各种外语的网页,或者是查阅资料帮助我们解决问题.更多的时候还是头疼在语言障碍上,正所谓"它认识你,你不认识它啊."谷歌和微软两个企业 ...
- 大IT公司笔试
都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑话我们这些未出校门的孩纸们,但 ...
- 腾讯云开放云压测“黑科技“,产品上线从此不再“压力山大"
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 能否解决"高并发"问题一直是检验一个产品后台是否稳定,架构是否合理,性能是否强大的核心标准.对于产品而言,多高的并发 ...
- 【20190415】JavaScript-事件流与stopPropagation()、stopImmediatePropagation()的误区解析
这两天仔细看了一下MDN上关于事件流机制和相关方法的文档,发现有个很大的误区.过去我一直以为stopPropagation()就是用来阻止事件冒泡的,甚至很多博客和菜鸟教程上都是这样写的.但实际上文档 ...
- 关于Gradle2.0的翻译说明
Gradle1.12的翻译情况 Gradle实际上在4月16日就已经在对应的OmegaT项目上完成了翻译,后因项目繁忙,直到7月20日才完成了Github上Gradledoc项目及七牛站点的更新. 总 ...
- DDD学习笔录——领域驱动设计的常见误区(即错误的理解)
可以将DDD看成一种开发思想体系:它促成了一种新的以领域为中心的思维方式. 它是一种学习过程,而非最终目标,这就是DDD的最大优势. 任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力 ...
随机推荐
- react-native 学习(三)
上一次讲到了react-native 的配置环境 和 如何去进行调试,这一次我们说一说,关于react-native的 样式兼容问题. 由于iphonex的发售,在兼容的时候,我门也需要去考虑ipho ...
- 网络编程 - UDP协议
UDP协议 服务端 ''' UDP 协议 又称 数据报协议 SOCK_DGRAM ''' from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 ...
- post 传递参数中包含 html 代码解决办法,js加密,.net解密
今天遇到一个问题,就是用post方式传递参数,程序在vs中完美调试,但是在iis中,就无法运行了,显示传递的参数获取不到,报错了,查看浏览器请求情况,错误500,服务器内部错误,当时第一想法是接收方式 ...
- Storm-wordcount实时统计单词次数
一.本地模式 1.WordCountSpout类 package com.demo.wc; import java.util.Map; import org.apache.storm.spout.Sp ...
- 使用Custom Draw优雅的实现ListCtrl的重绘
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...
- 怎样在QML应用中创建一个Context Menu
我们在非常多的系统中看见能够在屏幕的一个地方长按,然后就能够依据当前显示的上下文弹出一个菜单. 菜单中能够有一些选项,比方删除,改动该项.这样的一般在ListView或GridView中常见.今天,我 ...
- Runtime Permission.
http://blog.csdn.net/lmj623565791/article/details/50709663: 本文出自:[张鸿洋的博客] 一.概述 随着Android 6.0发布以及普及,我 ...
- PHP 基础篇 - PHP 正则官方文档汇总
一.PCRE 正则语法 下面是 PHP 的 PCRE 正则语法(模式语法)相关文档,详情请查阅相关链接: 简介 分隔符 元字符 转义序列(反斜线) Unicode字符属性 锚 句点 字符类(方括号) ...
- PAT 1115 Counting Nodes in a BST[构建BST]
1115 Counting Nodes in a BST(30 分) A Binary Search Tree (BST) is recursively defined as a binary tre ...
- Python(线程进程3)
四 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切 ...