本篇是 Sass 教程的入门篇,主要讲述 Sass 的诞生背景以及它如何提高我们的开发效率
学习 Sass 需要有一定的 CSS 知识,对 CSS 不熟悉的同学可参考我之前写的系列教程:

  • CSS入门篇
  • CSS进阶篇
  • CSS高级篇

Sass 是什么

简单来说,Sass 是一种 CSS 的扩展语言,也是一个预处理器,它让 CSS 变得更加容易维护和编写。

Sass 还是一个脚本语言,经过转译(tranpilation),生成浏览器可识别的 CSS 代码。

除了 Sass,类似的脚本语言还有 Less 和 Stylus,它们都是为了解决 CSS 的缺陷而生的。

Sass 最早可以追溯到 2006 年,全称是 Syntactically Awesome Stylesheets,作者是 Hampton Lintorn-Catlin,他把变量、循环等脚本语言的特性带进了 CSS 世界,有效提高了 CSS 的编码效率。

Sass 有哪些优势

虽然最新的 CSS3 已经更新了很多特性,但在许多方面仍然落后于 Sass。

而 Sass 犹如一把瑞士军刀,多年来经久不衰,它的优势到底有哪些呢?

  • Sass 可以把一个大的样式文件(style sheet file)拆解成更小、更容易维护的小文件,然后再通过工具聚合成大文件,在不改变最终结果的情况下,让 CSS 拥有了模块化能力
  • 同时,Sass 的 @import 指令可以有效减少网页的 HTTP 请求量,提高页面性能,因为传统开发模式下,为了兼容不同浏览器,一个页面内往往会加载多个 CSS 文件,每一个文件都会带来一次额外的请求开销,而Sass 的 @import 指令可以将多个小文件整合成一个大文件,有效减少了 HTTP 请求
  • 更重要的是,Sass 为我们打破了编写重复性代码的枷锁,它可以直接扩展已有样式,也可以通过继承基础样式来创建新的样式
  • 而且,Sass 完全兼容 CSS,也就是说,Sass 预处理时会完全忽略掉 CSS 规则,这就使得老 CSS 代码可以直接拿来用,根本没必要进行大的重构
  • 除此之外,Sass 还可以定义变量,彻底让我们告别了魔法数字(magic number),那些会在多个地方会用到的值,可以只用一个变量来表示,当变量值发生变化时,用到变量的地方就会更新为变量的最新值

下面通过一个例子来看一下它的具体用法:

$purple: #6A67CE;
$orange: #FF9100;.purple-btn {text-align: center;background-color: $purple;
}
.purple-text {color: $purple;
}

代码前两行定义的 $purple$orange 就是我们上面提到的变量,这两个变量分别用在了 purple-btnpurple-text 两个类选择器中。

如果我们直接用 CSS 来定义上述样式,代码就会变成这样:

.purple-btn { text-align: center; background-color: #6A67CE;
}.purple-btn:hover { background-color: #5653BD;
}

很显然,这种方式难以维护,因为如果将来要改变色值,那么很多地方都要随之改动。

其实,Sass 不止一种写法,上例代码用了目前比较流行的那种。

Sass 的两种语法

Sass 有两种常见语法:

  • 第一种类似 Haml 脚本语言,利用缩进来区分代码区块(block),利用换行来区分样式规则,文件后缀名为 .sass
  • 第二种和 CSS 语法差不多,叫 SCSS (Sassy CSS),利用大括号定义代码区块(bloc),用分号定义代码行(line),文件后缀是 .scss

Sass 的作者是 Hampton Lintorn-Catlin,也是 Haml 的作者
Scss 由 Henry Thornton 设计,由 Henry Thornton 开发

下面我们通过一个例子展示一下两者的不同之处。

首先,一段用 Sass 语法写成的代码如下所示:

navulmargin: 0padding: 0list-style: nonelidisplay: inline-blockadisplay: blockpadding: 6px 12pxtext-decoration: none

对应的 scss 版本如下:

nav {ul {margin: 0;padding: 0;list-style: none;}li {display: inline-block;}a {display: block;padding: 6px 12px;text-decoration: none;}
}

无论是 Sass 还是 SCSS,经过转译,都会产出如下 CSS 代码:

nav ul {margin: 0;padding: 0;list-style: none;
}
nav li {display: inline-block;
}
nav a {display: block;padding: 6px 12px;text-decoration: none;
}

除此之外,Sass 还有其他语言版本的语法,比如 C、PHP 和 Java 等,但是它们并不常用,了解即可。后续教程我们将使用第二种来讲解 Sass 用法。

一开始我们提到过,Sass 作为 CSS 的超集,不能直接被浏览器识别,必须要转译成 CSS,这个转译(transpilation)的过程最早用 Ruby 实现,后来因为性能问题已经停止维护,现在最常用的是 Dart 重写的版本——Dart Sass

Dart Sass

Dart 这门语言比较小众,我 2015 年刚接触时,写过一篇介绍性的博客 Dart是一个怎样的语言?,后来便没有跟进,直到前年 Flutter 大火,Dart 又重新回到了人们的视野。

Dart 的优势在于它的 VM 性能极佳,Google 当年意在用它取代 JavaScript,只不过 ES6 过于优秀,显得 Dart 只是昙花一现,其实 Dart 一直默默无闻地向前发展着。

Dart 版本的 Sass,无论从性能还是易用性上都高出一筹,下一篇我们将介绍 Dart Sass 的安装以及它的基础用法。

Sass 基础教程——基本介绍相关推荐

  1. OpenLayers3基础教程——OL3 介绍control

    概述: 本文讲述的是Ol3中的control的介绍和应用. OL2和OL3 control比较: 相比较Ol2的control,OL3显得特别少,下图分别为Ol2和Ol3的control: Ol2的c ...

  2. (转) OpenLayers3基础教程——OL3 介绍control

    http://blog.csdn.net/gisshixisheng/article/details/46761535 概述: 本文讲述的是Ol3中的control的介绍和应用. OL2和OL3 co ...

  3. (转)OpenLayers3基础教程——OL3 介绍interaction

    http://blog.csdn.net/gisshixisheng/article/details/46808647 概述: 本节主要讲述OL3的交互操作interaction,重点介绍draw,s ...

  4. Easy-x的基础教程使用介绍

    文章目录 前言 一.绘制   边框绘制   图形绘制   批量绘图 二.输出 三.输入 四.事件响应    鼠标事件响应    键盘事件响应 五.多媒体    图片    音频 六.其他   读写应用 ...

  5. OpenLayers3基础教程——OL3之Popup

    概述: 本节重点讲述OpenLayers3中Popup的调用时实现,OL3改用Overlay取代OL2的Popup功能. 接口简单介绍: overlay跟ol.control.Control一样,是一 ...

  6. ppt python 爬虫_python基础教程 PPT-python为什么叫爬虫

    看过了Python基础教程,接下来应该怎么做 看完基础教程代表你已经入门了,接下来就需要你做一下项目,把书本上的知识转化为自己的,活学活用,之后再进行中高级的学习! Python基础教程的介绍 本书包 ...

  7. Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

    Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示.它是对应用程序介绍的页面. 该页面源自Views文 ...

  8. Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍

    Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...

  9. LTspice基础教程-003.LTspice工具栏使用介绍

    直接上图,如下是我们必须学会的工具栏按钮,下面会详细介绍. 首先我们从放置被动器件开始,搭建一个RLC低通滤波电路,如下: 放置完器件后,我们开始连线以及放置地,当鼠标变成大十字说明进入了画线状态: ...

  10. 【MySQL基础教程】事务详细介绍

    前言 本文为 [MySQL基础教程]事务 相关知识,下边将对事务简介,事务操作(包括:未控制事务,控制事务),事务四大特性,并发事务问题,事务隔离级别等进行详尽介绍~

最新文章

  1. Android网络课程笔记-----定制通知系统
  2. python中的函数def和函数的参数
  3. 统计学习方法第十八章作业:PLSA 概率潜在语义分析算法 代码实现
  4. flask 视图函数的使用
  5. mysql快速批量入库_MySQL-批量入库优化
  6. linux 添加编程环境变量配置
  7. 如何调用一个windows上的应用程序呢?
  8. 谨防欺诈,Facebook 禁止加密货币和 ICO 广告
  9. 300万像素导航机 喏羁押2268跌破1500
  10. 深度学习超参数简单理解:learning rate,weight decay和momentum
  11. 开源组件分析工具OpenSCA教程
  12. django中查询的select_related方法和prefetch_related方法
  13. 解决Windows 11 NumLock键盘数字灯不亮的问题
  14. 有效管理“刺头”员工的方法
  15. 高中学计算机都是学什么,学计算机高中选什么科目
  16. 抖音SEO优化详教程
  17. python超简单趣味编程100例_python趣味编程100例
  18. saber软件安装后怎么打开_Saber2016安装包和安装详细安装步骤
  19. [翻译] Dremel made simple with Parquet
  20. 基于matlab 非局部均值(NLM)滤波图像去噪

热门文章

  1. el-table实现动态表格插入行(开发小记)
  2. bili弹幕姬_bilibili弹幕姬怎么用 - 卡饭网
  3. 小象学院 零基础Python入门 案例四 52周存钱挑战v_4.0
  4. 计算机兼容性测试怎么做,如何进行兼容性测试
  5. 十个程序员必备的网站推荐和较出名的国外程序员论坛
  6. 远程唤醒电脑WOL(Wake On LAN - 局域网唤醒)
  7. Win10笔记本电脑设置插入鼠标时自动禁用触摸板
  8. Java开发者必备十大学习网站
  9. Linux本地信息收集
  10. 5000的台式计算机,预算5000的台式组装机配置清单_预算5000的台式组装机配置