上传者:戈兰·科拉克(Goran Kolak)于 2017年3月7日翻译:CHENJIAMIAN
原文:https://inchoo.net/magento/magento-frontend/using-postcss-sass/
在本文中,我们将从开发人员的角度着眼于PostCSS的基本概述,假设该开发人员当前的开发过程中使用了CSS预处理器 Sass。
如果您是Sass用户,并且准备使用PostCSS,有两种方法。
您既可以进行完整的切换(使用PostCSS重新创建基本的预处理环境),也可以使用它作为补充。
你们中的许多人会说,您喜欢自己当前使用的预处理器。但是,很可能您还正在使用Autoprefixer做浏览器供应商前缀自动补全,您猜怎么着?在这种情况下,您已经将PostCSS包含在工作流程中。
我们到底要讨论什么?
PostCSS是一个工具,或者基本上只是一个API,它的插件是用JavaScript写的。
与Sass相比,它具有许多现成的功能,PostCSS只是一个空白板,可以随时填充所需的配料(插件)。
基本设定
将PostCSS包含到您的项目中并不复杂,特别是如果您具有使用某些任务运行程序的基本经验时(例如 Gulp或Grunt或WebPack)。
作为一个简单的示例,让我们看一下下面的gulpfile.js。
var gulp = require('gulp'),
postcss = require('gulp-postcss'),
autoprefixer = require('autoprefixer');
gulp.task('css', function() {
return gulp.src('src/style.css')
.pipe(postcss(
autoprefixer()
))
.pipe(gulp.dest('dest/style.css'));
});我们在这里看到一个分为两个步骤的过程:
- 首先,我们导入主要的PostCSS模块。
- 接下来,我们添加我们要使用的PostCSS插件(在这个简短示例中,我们只用了Autoprefixer)。
当然,与导入在gulpfile.js中的任何新gulp插件一样,需要首先安装PostCSS模块和任何其他PostCSS插件。这可以在终端中使用所有Gulp用户都熟悉的简单命令完成:
npm install gulp-postcss autoprefixer --save-dev
选择插件
那么,我们需要哪些插件?好吧,这取决于您的个人选择。如果只是为您的预处理工作流添加一些额外的功能,下面这两个插件会很有用:
- Autoprefixer – 可能是最受欢迎的PostCSS插件,用于添加所需的浏览器供应商前缀。正如开始时已经提到的那样,您很有可能已经在使用此PostCSS插件。
.box {
display: flex;
}
// 处理后的结果
.box {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}Stylelint – 一种 lint插件,可用于维护一致的格式约定并避免样式表中的错误。
如果您想更深入地了解并重新创建基本的Sass环境,很可能还需要使用以下插件:
$blue: #056ef0;
$column: 200px;
.menu_link {
background: $blue;
width: $column;
}
// 处理后的结果
.menu_link {
background: #056ef0;
width: 200px;
}.phone {
&_title {
width: 500px;
@media (max-width: 500px) {
width: auto;
}
}
}
// 处理后的结果
.phone_title {
width: 500px;
}
@media (max-width: 500px) {
.phone_title {
width: auto;
}
}- Postcss-mixins 用于mixins的PostCSS插件。
@define-mixin icon $network, $color: blue {
.icon.is-$(network) {
color: $color;
@mixin-content;
}
.icon.is-$(network):hover {
color: white;
background: $color;
}
}
@mixin icon twitter {
background: url(twt.png);
}
@mixin icon youtube, red {
background: url(youtube.png);
}
// 处理后的结果
.icon.is-twitter {
color: blue;
background: url(twt.png);
}
.icon.is-twitter:hover {
color: white;
background: blue;
}
.icon.is-youtube {
color: red;
background: url(youtube.png);
}
.icon.is-youtube:hover {
color: white;
background: red;
}我们最后提到的最有趣的插件之一是CSSNext。这实际上是一个插件集合,这些插件一起使我们可以使用当今的最新CSS语法。它将新的CSS规范转换为更兼容的CSS,而无需等待浏览器支持。CSSNext具有很多功能,其中一些是:
- 自定义属性设置: @apply
- 自定义属性: var()
- 自定义选择器
- color() 函数
- :any-link伪类等
在CSS文件中,您可以执行以下操作:
// 自定义属性设置:@apply
:root {
--danger-theme: {
color: white;
background-color: red;
};
}
.danger {
@apply --danger-theme;
}为什么要使用PostCSS?
如果您已经有一个有效的工作流程,并且对现在使用您喜欢的预处理器感到满意,那么您可能在问自己,为什么我需要学习另一种工具?(或从Sass进行切换到PostCSS有什么好处?)
为了回答这些问题,让我们总结一些PostCSS的优点:
- 速度– 尽管Sass的速度已经显著提高(例如LibSass),但PostCSS仍然是赢家
- 模块化– 减少臃肿;您只包括所需的功能
- 轻巧– 相比Sass
- 即刻实现– 如果您想要新功能,则不必等待Sass更新;您可以更新自己的Sass
当然,没有什么东西是完美的,存在某些PostCSS的缺点如下:
- 复杂性增加– 需要更多规划(例如,必须按特定顺序调用插件)
- 要学习一种不同的语法(与Sass相比)
- PostCSS处理需要没有错误的CSS
下一步该学什么
显然,PostCSS完全是关于插件的。在撰写本文时,有超过200个可用的插件(而且这个数目还在不断增加)。因此,要超越入门级别,您将需要去学习插件的使用。
当然,如果您发现缺少一些方便的功能,请自己写一个PostCSS插件来解决问题。