美文网首页vue
PostCSS + PreCSS 拯救前端样式

PostCSS + PreCSS 拯救前端样式

作者: 寂寞的原子 | 来源:发表于2018-12-01 01:34 被阅读49次

    CSS作为我大前端必不可少的一部分,在前端发展如此迅速的今天,实在是拖了很大的后腿,所以我们几乎已经离不开CSS处理器了。

    回顾 Sass 和 LESS

    首先,这俩货都是兼容CSS的,所有的开发都是在CSS的基础上进行扩展,从我个人角度来看,开发体验是不错的。
    大部分情况下,Sass和LESS其实并没有什么区别,这篇文章列举了一些差异,这里就不多说了。
    总的来说,这俩货其实都不错,但是:

    • Sass安装太慢,需要编译。
    • 他们都需要额外的插件来支持autoprefixer等常见处理。
    • 不能直接使用最新的CSS特性,如变量、calc

    遇见 PostCSS + PreCSS

    说到 PreCSS,就不得不先说说 PostCSS
    PostCSS其实也是一个CSS预处理器,它的独特之处在于强大的插件机制和丰富的插件,几乎是我在CSS开发中的标配。换言之,即使我用了Sass或者LESS,还是免不了要加上PostCSS来做前缀处理(autoprefixer)、压缩(cssnano)等后续操作。

    那么问题来了:能不能减少一些依赖,只用PostCSS+插件就得到不错的CSS开发体验呢?

    于是我发现了PreCSS。下面看看它的特别之处:

    • 基于 PostCSS Preset Env ,支持各种强大的新语法,可以按需编译成指定浏览器版本支持的CSS。

    • 支持大部分Sass语法。前提是要指定 parser: require('postcss-scss')
      很棒有没有?安装无需编译,Sass代码几乎可以无缝迁移。

    • 得益于PostCSS,可以轻松地结合其他功能,比如:

      • 结合 postcss-import 实现alias,让 @import 更加简洁。
      • 使用 postcss-calc 在编译阶段进行计算,减少不必要的 calc ,而开发时用 calc 更清晰。
      • 使用 postcss-plugin-px2rem 将px转成rem,适配各种屏幕。

    于是,只需安装 PostCSS,加上一份这样的配置(.postcssrc.js),一个强大的CSS预处理工具就出来了:

    module.exports = {
      // Transform inline comments
      parser: require('postcss-scss'),
      plugins: [
        require('autoprefixer'),
        // Transform SCSS into CSS
        require('precss'),
        // Calculate at compile time
        require('postcss-calc'),
        // px to rem
        require('postcss-plugin-px2rem')({ rootValue: 100, minPixelValue: 2}),
      ],
    };
    

    以码服人

    自定义 media query

    @custom-media --iphonex (only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3));
    
    main {
      @media (--iphonex) {
        margin-top: 50px;
      }
    }
    

    CSS变量

    :root {
      --mainColor: #12345678;
    }
    body {
      color: var(--mainColor);
    }
    

    Sass语法

    $blue: #056ef0;
    
    .menu_link {
      background: $blue;
    }
    

    calc计算

    $column: 200px;
    
    .menu {
      width: calc(4 * $column);
    }
    

    MixIn

    // src/common/mixin.css
    @mixin iphonex {
      @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) { @content; }
    }
    
    // src/pages/index/style.css
    @import '#/common/mixin.css';
    
    @include iphonex {
      main {
        margin-left: 50px;
      }
    }
    

    好了,还等什么,快来用 PostCSS + PreCSS 吧。

    相关文章

      网友评论

        本文标题:PostCSS + PreCSS 拯救前端样式

        本文链接:https://www.haomeiwen.com/subject/dfzkcqtx.html