与CSS预处理器结合使用

20年前的《程序员修炼之道》这本书,就提到了程序员的一个职业习惯: DIY。 (Don’t Repeat Yourself), 不要做重复的事儿。

目前的编程语言,几乎都具备了消灭重复代码的能力。

除了CSS

CSS 是唯一不具备 支持变量的 编程语言。 因为CSS 本身只是一个DSL(Domain Specific Language领域特定的语言), 它不是一个“编程语言”。

这样就决定了它的特点 : 上手极快, 可以很好的表现HTML中某个元素的外观。 缺点就是: 无法通过常见的重构手法(Extract Method, Extract Variable.. ) 来精简代码。

所以, SCSS, SASS, LESS 等一系列的 “CSS 预处理器” (precompiler) 应运而生。

SCSS

全名叫 Sassy CSS, (时髦的CSS) 是 SASS 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 SASS 的强大功能。

也就是说,任何标准的 CSS3 样式表都是具有相同语义的有效的 SCSS 文件。

官方网站同 SASS。

由于 SCSS 是 CSS 的扩展,因此,所有在 CSS 中正常工作的代码也能在 SCSS 中正常工作。 也就是说,对于一个 SASS 用户,只需要理解 SASS 扩展部分如何工作的,就能完全理解 SCSS。

大部分的用法都跟SASS相同。 唯一不同的是,SCSS 需要使用分号和花括号而不是换行和缩进。

SCSS可以说是全面取代了 SASS。

我们看下面的例子:

  1. $font-stack: Helvetica, sans-serif;
  2. $primary-color: #333;
  3. body {
  4. font: 100% $font-stack;
  5. color: $primary-color;
  6. }

在上面的代码中, 定义了两个变量: $font-stack$primary-color . 编译后的CSS如下:

  1. body {
  2. font: 100% Helvetica, sans-serif;
  3. color: #333;
  4. }

更多内容,可以到官方网站来学习: https://sass-lang.com/guide 非常简单,有一点儿CSS功底的人,往往可以瞬间上手。

LESS

LESS 也是一种 CSS 预处理器,它的自我介绍是: 只是多了”一丢丢”内容的CSS. ( It’s CSS, with just a little more).

官方网址: http://lesscss.org/ , Github: https://github.com/less/less.js , 截止到 2018-6-25 , github关注数是 15591

它的作用跟SCSS一样,也是为了让代码更加精简,去掉无意义的重复。 我们看下面的例子:

  1. // Variables
  2. @link-color: #428bca; // sea blue
  3. @link-color-hover: darken(@link-color, 10%);
  4. // Usage
  5. a,
  6. .link {
  7. color: @link-color;
  8. }
  9. a:hover {
  10. color: @link-color-hover;
  11. }
  12. .widget {
  13. color: #fff;
  14. background: @link-color;
  15. }

可以看到,上面的例子定义了 两个变量: @link-color@link-color-hover. 并且在下方进行了引用。 同时, 还有使用了换算功能 darken(@link-color, 10%)

上面的代码会被编译成下面的CSS:

  1. a,
  2. .link {
  3. color: #428bca;
  4. }
  5. a:hover {
  6. color: #3071a9;
  7. }
  8. .widget {
  9. color: #fff;
  10. background: #428bca;
  11. }

可以看到, less的功能非常强大。

SASS

提到了SCSS, LESS, 就不得不提及SASS

官方网站: https://sass-lang.com/ , github: https://github.com/sass/sass , 截止到 2016-6-25, github关注数是 11376

特点是去掉了 花括号,分号,看起来特别简单。 使用空格来标记不同的段落层次。 跟HAML基本是一样的。

我们看下面的例子:

  1. $font-stack: Helvetica, sans-serif
  2. $primary-color: #333
  3. body
  4. font: 100% $font-stack
  5. color: $primary-color

在上面的代码中, 定义了两个变量: $font-stack$primary-color . 并且在下面对它们进行了引用。

我们看编译后的结果:

  1. body {
  2. font: 100% Helvetica, sans-serif;
  3. color: #333;
  4. }

不过在实际应用当中,却很少使用这个语言。 因为实际应用中,程序员最喜欢的事情,就是把“UI” 或者“美工” , 或者“前端工程师”给过来的CSS文件直接使用。 如果使用SASS的话就很尴尬,还要再动作做一遍转换。 浪费时间。 而且“美工”同学可以看得懂CSS,却无法看懂SASS。

所以这个技术比较落没。 慢慢的被SCSS (SASS 3.0) 所取代。

所以,同学在这个技术的故事上要学习到一个道理: 程序员认为好的技术,在团队配合的过程和实践中是不一定适用的。 SASS 团队也做的非常不做,立刻就在SASS 3.0的时候推出了SCSS。

在 Vuejs 中使用CSS预编译器

使用的前提,是我们以 Webpack的形式使用Vuejs.

使用方法非常简单。 我们以SASS为例:

1.安装依赖: “sass-loader” 和 “node-sass”, 运行下面命令:

  1. $ npm i sass-loader node-sass -D

2.在”webpack.base.conf.js”中添加相关配置:

  1. {
  2. test: /\.s[a|c]ss$/,
  3. loader: 'style!css!sass'
  4. }

3.在对应的 “.vue” 文件中,我们就可以这样的定义某个样式:

  1. <style lang='sass'>
  2. td {
  3. border-bottom: 1px solid grey;
  4. }
  5. </style>

上面的代码,会在运行的时候,被webpack编译成对应的CSS文件。