使用PostCSS和Sass

1,961 阅读4分钟
上传者:戈兰·科拉克(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'));
});

我们在这里看到一个分为两个步骤的过程:

  1. 首先,我们导入主要的PostCSS模块。
  2. 接下来,我们添加我们要使用的PostCSS插件(在这个简短示例中,我们只用了Autoprefixer)。

当然,与导入在gulpfile.js中的任何新gulp插件一样,需要首先安装PostCSS模块和任何其他PostCSS插件。这可以在终端中使用所有Gulp用户都熟悉的简单命令完成:

npm install gulp-postcss autoprefixer --save-dev

选择插件

那么,我们需要哪些插件?好吧,这取决于您的个人选择。如果只是为您的预处理工作流添加一些额外的功能,下面这两个插件会很有用:

如果您想更深入地了解并重新创建基本的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插件来解决问题。