[翻译]PostCSS简介
许多开发人员花时间在使用CSS的预处理器上如less,sass和stylus。这些工具已经成为Web开发的重要组成部分。写一个网站的样式,不使用嵌套,变量或混入等功能很少见。它们每个都是非常实用的,让我们退后一步看,考虑以这种方式使用预处理器是不是最好的办法。
传统的预处理器的问题:
- 不能扩展。无论您选择哪种预处理,都被限制到设定的,它提供的功能。如果您需要在其上构建功能,在构建过程中,你需要添加一个单独的步骤。如果你想写一个扩展,只能针对你自己的。
- 不能剔除任何功能。有些预处理器提供诸如sass的@extend 功能,可以彻底不使用它们。当你不使用它们,却无法删除该工具的这个功能,减少代码的体积。
- 不兼容的CSS标准。每个预处理器已经有了自己的标准。但并不是W3C标准,这意味着它们不会被新的W3C标准兼容。
下面要介绍的PostCSS,就是解决以上问题的工具。
什么是PostCSS?
PostCSS不是预处理器; 它不改变CSS。它本身并不完成css工作。它的作用是提供一个CSS解析器和创建可以分析,测试,处理资源,优化,回调,和传输给其它解析CSS插件的框架。PostCSS把CSS解析成抽象语法树(AST),通过一系列的插件,然后重新编译成一个字符串。如果你熟悉JavaScript工具,那么可以把PostCSS类比为CSS的Babel。目前有超过200个PostCSS插件,其中有许多在的PostCSS GitHub的页上列出,而另一些可以在PostCSS 的postcss.parts目录中找到。PostCSS可以集成在大多数构建工具,包括gulp,grunt,WebPack或NPM。那么,如何用PostCSS解决我们前面列出的问题?
- 每个插件单独安装。选择需要插件以及顺序应用。通常情况下,插件可以使用另外一些设置选项进行配置。
- 您可以编写自己的插件。每个插件PostCSS接收解析CSS作为输入参数,分析或修改它,并以同样的方式返回。这意味着,插件不需要处理解析CSS和转换回成一个字符串。因此很容易构建自己的插件。
- PostCSS可以用来写出符合W3C的CSS。有很多插件,旨在实现新的W3C规范功能。这将使你写一个标准的对未来版本兼容的css代码。
怎样使用PostCSS
安装PostCSS,我们不会进入太多有关设置的细节。我们会在命令行直接运行PostCSS。你可以在在Github的页面上找到各构建工具中如何使用PostCSS工具的详细信息。
安装PostCSS
PostCSS通过node与npm安装,请确保已经在开始前的已经安装了node。把PostCSS安装在全局,代码如下:
npm install -g postcss-cli
运行下面代码,查看是否安装上:
postcss --help
在屏幕会给你打出postcss接受的参数列表。也可以参照postcss-CLI documenation。
运行PostCSS
PostCSS安装成功,下面做一个小DEMO。创建styles.css文件,并添加一些CSS样式。例如,定义一个Flexbox的容器:
.container {
display: flex
}
Flexbox需要浏览器前缀才能在对应的浏览器上运行。如果不想手动维护,Autoprefixer是PostCSS插件,完成自动维护的工作。它会基于can i use所提供的信息,自动添加供应商前缀。下面将先放你如何使用Autoprefixer维护浏览器前缀。
安装Autoprefixer,运行下面命令:
npm install -g autoprefixer
接下来,切换到项目文件夹,创建一个DIST文件夹,并把处理好的css放到里面:
mkdir dist
然后运行PostCSS:
postcss -u autoprefixer styles.css -d dist
上面命令的意思是:运行Autoprefixer 处理styles.css并输出到DIST / styles.css。现在,打开DIST / Styles.css中会看到所有需要的浏览器前缀的css都已经加上:
.container {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;}
运行PostCSS -w标识,会启动一个watcher监听进程,当styles.css的文件被修改,则会自动处理。
插件配置我们可以根据需要来配置Autoprefixer的浏览器前缀。通过设置browsers选项来完成。当通过命令行运行PostCSS,插件配置需要在.json文件中定义,例如,postcss.json。让我们在当前文件夹中创建文件,并配置Autoprefixer支持的浏览器的最新的2个版本。
{
"autoprefixer": {
"browsers": ["last 2 versions"]
}}
现在可以重新运行PostCSS并根据新的配置文件监听:
postcss styles.css -u autoprefixer -c postcss.json -d dist -w
启用source map
source map是用于调试编译CSS必不可少的。PostCSS可以生成输出文件内联source map,通过设置--map选项(或-m标识)。
更多postcss插件
PostCSS有一个惊人的插件库,包括测试,质量检查,回退,老的浏览器支持,内联资源,雪碧图生成,优化,新的语法支持,以及未来的CSS特性。正如前面提到的,你可以在插件的结构目录postcss.parts中找到。
做一个demo,使用几个插件,展示一下PostCSS的作用。
postcss-custom-properties插件
postcss-custom-properties插件的作用,实现对支持W3C自定义属性规范(又名本地变量)。在选择器的自定义属性为任意值,并在样式表其他地方引用。
这和less,sass中变量的功能相同:存放值和消除代码重复。主要的区别是,作用域是有点不同; 类似于常规属性,CSS自定义属性沿元素级联传播,而不是块级范围。
下面是这个插件如何工作的一个例子。代码:
:root {
--container-width: 800px;}.container {
width: var(--container-width);}
将编译为:
.container {
width: 800px;}
postcss-custom-selectors插件
postcss-custom-selectors插件实现了自定义选择器规范。可以预先定义选择器,并在后面引用它们。例如,我们可以保存所有标题的一个选择器,并重新使用它作为一个变量:
@custom-selector :--headings h1, h2, h3, h4, h5, h6;
:--headings {
color: mediumblue;}
这将编译如下:
h1,
h2,
h3,
h4,
h5,
h6 {
color: mediumblue;}
俄罗斯样式表插件
曾经想学习俄语,但写CSS太忙?不用担心,现在可以用俄罗斯语写CSS啦!只需使用俄语样式插件。如下:
h1 {
размер-шрифта : 20 пикселей ;
цвет : красный ;
цвет-фона : белый ;
вес-шрифта : жирный ; }
它被翻译成:
h1 {
font-size: 20px;
color: red;
background-color: white;
font-weight: bold;}
嗯......我从来没有说过所有的插件都是有用的!
结束语
less和sass预处理器是伟大的。很大程度改善了我们的开发过程。但现在停下来重新思考开发过程,这些工具是否还是最好的选择。
我们不只是需要新的功能来写样式,我们还需要模块化,支持更多的新标准,以及灵活的构建进程。PostCSS可以完成这些工作,它可能会使CSS世界的游戏规则改变。
原文:An Introduction to PostCSS
原文链接:http://www.sitepoint.com/an-introduction-to-postcss/?utm_source=sitepoint&utm_medium=relatedinline&utm_term=html-css&utm_campaign=relatedauthor
[翻译]PostCSS简介的更多相关文章
- [译] QUIC Wire Layout Specification - Introduction & Overview | QUIC协议标准中文翻译(1) 简介和概述
本文同步发布于: https://www.pengrl.com/p/33330/ ,转载请注明出处,谢谢. 目录 Introduction | 简介 Conventions and Definitio ...
- [翻译]纠正PostCSS的4大认识误区
市面上已经有很多的前端工具,再来引入新的前端工具,价值大不大?这主要取决于,它是否给开发人员提供了新的功能,是否值得花时间和精力去学习和使用? PostCSS出现时有一个很有趣的现象.像sass和le ...
- [翻译]在gulp构建工具中使用PostCSS
前言 PostCSS已经在一段时间内迅速普及,如果你还不知道PostCSS或还没有使用它,我建议你看一下之前的一篇介绍文章<PostCSS简介>,其中介绍了使用PostCSS的基本方法,包 ...
- 基于百度翻译API开发属于自己的翻译工具
你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...
- Zabbix简介(第一章第一节)
Alexei Vladishev创建了Zabbix项目,当前处于活跃开发状态,Zabbix SIA提供支持. Zabbix是一个企业级的.开源的.分布式的监控套件 Zabbix可以监控网络和服务的监控 ...
- 翻译一篇SpiderMonkey GC的文章
前言 这篇文章包含了对SpiderMonkey中Rooted<T>, Handle<T>的解释. 翻译自 https://developer.mozilla.org/en-US ...
- postcss那些事儿
一.sass和postcsssass.less.stylus,三者是css预处理器,使用预编码来处理css,然后编译成线上需要的css.postcss是处理你写好的css,让你的css更健康,对浏览器 ...
- C# 有道API翻译 查询单词详细信息
原文:C# 有道API翻译 查询单词详细信息 有道云官方文档 有道云翻译API简介:http://ai.youdao.com/docs/doc-trans-api.s#p01 有道云C#Demo : ...
- cookie规范(RFC6265)翻译
来源:https://github.com/renaesop/blog/issues/4 RFC 6265 要点翻译 1.简介 本文档定义了HTTP Cookie以及HTTP头的Set-Cookie字 ...
随机推荐
- IO文件读写
*b表示二进制模式访问,但是对于Linux或者Unix系统来说这个模式没有任何意义,因为他们把所有文件都看做二进制文件,包括文本文件 一.三种方法读取文件 方法1:open f=open(" ...
- 在Windows端安装kafka 提示错误: 找不到或无法加载主类 的解决方案
在配置好kafka的server.properties文件后,cmd进入命令窗口输入命令:.\bin\windows\kafka-server-start.bat config\server.prop ...
- python 之 re模块(正则表达式)
一.起源(历史) 正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究.美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方 ...
- 一个有意思的 Java HashSet 问题
昨天,在百度的 java吧 看到有人问关于 HashSet 的问题.下面是他贴出的代码: import java.util.HashSet; public class JavaTest { publi ...
- angualar入门学习-- 自定义指令 指令编译执行过程
3个阶段: 一.加载阶段 加载angular.js的源码,找到ng-app确定应用边界范围. 二.编译阶段 compile 查找所有指令,保存在一个列表中 对所有指令按优先级(property属性值) ...
- PAT 甲级 1019 General Palindromic Number(简单题)
1019. General Palindromic Number (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
- Fluent Ribbon 第八步 其他控件
前七节将Ribbon的功能大致介绍了一番,本节来介绍一些特殊控件的使用 DropDownButton控件 当前控件是显示下拉功能的基本组件,其配合Gallery能实现诸多特殊功能,代码如下所示 < ...
- C# WinForm 中进行UrlEncode
public static string ToUrlEncode(string strCode) { StringBuilder sb = new StringBuilder(); byte[] by ...
- CentOS安装Apache-2.4.25+安全配置
注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Nginx之前,请确保已经使用yum安装了各基础组件,并且配置了www用户和用户组,具体见<CentOS ...
- Tomcat 服务器介绍
Tomcat 目录介绍 Tomcat 主目录有 bin, conf, lib, logs, temp, webapps, work 7个文件夹 bin 目录 主要用来存放 tomcat 命令 .sh ...