本文参考了 阮一峰 老师对 SASS 用法的讲解。

  学过 CSS 的人都知道,它不是一种编程语言,在日常的开发中,经常要写大量的 css 代码,有很多的重复代码,效率很低。Sass 是一个 CSS 的扩展,它在 CSS 语法的基础上,允许您使用变量 (variables), 嵌套规则 (nested rules), 混合 (mixins), 导入 (inline imports)等功能,令 CSS 更加强大与优雅。使用 Sass 以及 Compass 样式库 有助于更好地组织管理样式文件,以及更高效地开发项目。

  下面是我整理的用法总结,供自己开发时参考,相信对一些初学者也有用。

一、安装和使用 Sass

  1.1 安装

  SASS是Ruby语言写的,但是两者的语法没有关系。不懂Ruby,照样使用。只是必须先安装Ruby,然后再安装SASS。

  假定你已经安装好了Ruby,接着在命令行输入下面的命令:

gem install sass

  然后就可以使用了。

  如果你想查看 sass 的版本,在命令行使用 sass -v 就可以看到。

  2.1 使用

  SASS文件就是普通的文本文件,里面可以直接使用CSS语法。文件后缀名是.scss,意思为Sassy CSS。

  首先创建一个名为 demo.html 的文件代码如下: 

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="test.css">
</head> <body>
<div id="box">
<h1>Hello world!</h1>
<p class="p1">
死亡如风,常伴吾身!
</p>
<p class="p2">
德玛西亚万岁!
</p>
</div>
</body> </html>

  然后创建一个名为 test.scss 的文件,这里用来我们书写测试的 scss 代码。使用下面的代码我们可以把 scss 文件转为为我们页面引入的 css 文件。  

sass test.scss test.css

  我们可以看到此时的项目目录,多了一个 test.css 文件。

  SASS提供四个编译风格的选项:  

  * nested:嵌套缩进的css代码,它是默认值。

  * expanded:没有缩进的、扩展的css代码。

  * compact:简洁格式的css代码。

  * compressed:压缩后的css代码。

  生产环境当中,一般使用最后一个选项。 

sass --style compressed test.sass test.css

  你也可以让SASS监听某个文件或目录,一旦源文件有变动,就自动生成编译后的版本。

 // watch a file
 sass --watch test.scss:test.css
  
 // watch a directory
 sass --watch app/sass:public/stylesheets

二、基本用法

  2.1 变量

  SASS 允许使用变量,所有变量以  $  开头。 

$blue: blue;
#box {
width: 500px;
height: 500px;
border: 1px solid $blue;

  在监听的基础上,可以看到 test.css 文件中同时生产了样式代码。在浏览器运行 demo.html 可以看到相应的样式改变。

  如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中。

$side: left;
#box {
margin-#{$side}: 200px;
}

  2.2 计算功能

  SASS 允许在代码中使用算式:

$side: left;
$var: 500;
#box {
margin-#{$side}: 200px;
padding-top: 20px + 30px;
margin-top: $var * 0.1px;
}

  2.3 嵌套

  SASS 允许选择器嵌套。比如,下面的 CSS 代码: 

#box h1{
color: red;

  可以写成:

#box {
h1 {
color: red;
}
}

  属性也可以嵌套,比如 border-color 属性,可以写成:

  p {
   border: {
     color: red;
   }
 }

  注意,border 后面必须加上冒号。

  在嵌套的代码块内,可以使用 & 引用父元素。比如 a:hover 伪类,可以写成:

a {
&:hover {
color: yellow;
}
}

  2.4 注释 

  SASS共有两种注释风格。

  标准的CSS注释 /* comment */ ,会保留到编译后的文件。

  单行注释 // comment,只保留在SASS源文件中,编译后被省略。

  在/*后面加一个感叹号,表示这是"重要注释"。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。

/*!
   重要注释!
*/

三、代码的重用

  3.1 继承

  SASS 允许一个选择器继承另一个选择器。比如,现有 p1: 

.p1 {
color: green;
}

  p2 要继承 p1 ,就要使用 @extend 命令: 

.p2 {
@extend .p1;
font-size: 20px;
}

  3.2 Mixin

  Mixin 有点像 C 语言的宏(macro),是可以重用的代码块。

  使用 @mixin 命令,定一个代码块:

@mixin right {
float: right;
width: 80px;
height: 80px;
}

  使用 @include 命令,调用这个 mixin。

a {
@include right;

  mixin的强大之处,在于可以指定参数和缺省值。 

@mixin border($value: 1px) {
border: $value solid #000;
}

  使用的时候,根据需要加入参数。

a {
@include border(2px);
}

  下面是一 个 mixin 的实例,用来生成浏览器前缀:

  @mixin rounded($vert, $horz, $radius: 10px) {
    border-#{$vert}-#{$horz}-radius: $radius;
    -moz-border-radius-#{$vert}-#{$horz}: $radius;
    -webkit-border-#{$vert}-#{$horz}-radius: $radius;
  }

  使用的时候,可以像下面这样调用:

#box {
@include rounded(top, right);
} a {
@include rounded(bottom, left, 50px);
}

  3.3 颜色函数

  SASS提供了一些内置的颜色函数,以便生成系列颜色。

lighten(#cc3, 10%)  // #d6d65c
darken(#cc3, 10%) // #a3a329
grayscale(#cc3) // #808080
complement(#cc3) // #33c

  3.4 插入文件

  @import 命令,用来插入外部文件。 

@import "path/filename.scss";

  如果插入的是.css文件,则等同于css的import命令。

@import "path/filename.css";

四、高级用法

  4.1 条件语句

  @if 可以用来判断:

 p {
    @if 1 + 1 == 2 { border: 1px solid; }
    @if 5 < 3 { border: 2px dotted; }
  }

  配套的还有 @else 命令:

 @if lightness($color) > 30% {
    background-color: #000;
 } @else {
    background-color: #fff;
 }

  4.2 循环语句

  SASS支持 for 循环:

@for $i from 1 to 10 {
  .border-#{$i} {
      border: #{$i}px solid blue;
   }
 }

  也支持 while 循环:

 $i: 6;
 @while $i > 0 {
   .item-#{$i} { width: 2em * $i; }
   $i: $i - 2;
  }

  each 命令,作用与 for 类似:

  @each $member in a, b, c, d {
    .#{$member} {
      background-image: url("/image/#{$member}.jpg");
    }
  }

  4.3 自定义函数

  SASS允许用户编写自己的函数。

  @function double($n) {
    @return $n * 2;
  }
  #sidebar {
    width: double(5px);
  }

SASS用法入门的更多相关文章

  1. sass 使用入门教程

    我们都知道,css没有变量,也没有条件语句,在开发过程中,难免有些麻烦,因此有了CSS预处理器(css preprocessor),Sass便是其中之一. 一.什么是Sass Sass (Syntac ...

  2. LESS 用法入门

    本文旨在加深对 LESS 的理解和记忆,供自己开发时参考.相信对没有接触过 LESS 的程序员还是有用的,大佬绕路. 一. 安装和使用 LESS 1.1 安装 使用命令行安装 LESS npm ins ...

  3. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  4. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  5. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  6. SASS 初学者入门

    SASS 初学者入门 Sass 是什么? Sass 是Syntactically Awesome Stylesheete Sass的缩写,是由Hampton Catlin开发的. Sass可以简化你的 ...

  7. SASS用法指南-转

    作者: 阮一峰  日期: 2012年6月19日  原文地址:http://www.ruanyifeng.com/blog/2012/06/sass.html 艹,没想到sass 2012年就有了.现在 ...

  8. CSS预处理器之SASS用法指南

    CSS预处理器之SASS用法指南 一.什么是SASS Sass是是一种基于ruby编写的CSS预处理器,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 诞生于200 ...

  9. laravel 中CSS 预编译语言 Sass 快速入门教程

    CSS 预编译语言概述 CSS 作为一门样式语言,语法简单,易于上手,但是由于不具备常规编程语言提供的变量.函数.继承等机制,因此很容易写出大量没有逻辑.难以复用和扩展的代码,在日常开发使用中,如果没 ...

随机推荐

  1. Unity3D小游戏开发之两个我踩过的坑

    最近在开发一个植物大战僵尸小游戏,今天写了一早上的代码,踩了两个坑,这两个坑的位置分别位于触发器和数据转换,写这篇博文以此来让其他程序员不要再去踩这两个坑. 1.我在做简易僵尸模型的时候,这个僵尸模型 ...

  2. Java锁对象和条件对象的使用

    锁对象 临界区:临界区是一个特殊的代码段,该代码段访问某种特殊的公共资源,该资源同一时间只允许一个线程使用. Java中可以使用锁对象创造一个临界区: myLock.lock(); try { 关键代 ...

  3. python+selenium+Chrome options参数

    python+selenium+Chrome options参数 Chrome Options常用的行为一般有以下几种: 禁止图片和视频的加载:提升网页加载速度. 添加代理:用于翻墙访问某些页面,或者 ...

  4. Python基础复习函数篇

    目录 1.猴子补丁2. global和nonlocal关键字3.迭代器和生成器4.递归函数5.高阶函数和lamdba函数6.闭包7.装饰器 1.   猴子补丁 猴子补丁主要用于在不修改已有代码情况下修 ...

  5. Echarts大数据可视化物流航向省份流向迁徙动态图,开发全解+完美参数注释

    最近在研究Echarts的相关案例,毕竟现在大数据比较流行,比较了D3.js.superset等相关的图表插件,还是觉得echarts更简单上手些. 本文是以原生JS为基础,如果使用Vue.js的话, ...

  6. 单用户登陆demo-后者挤到前者,类似QQ

    单用户登陆demo ,采用的是Tp5. 流程是,当用户首次登陆是验证用户帐号密码,成功的,用当前时间戳加上用户id和ip 拼接成一个标识,暂且sign ,然后存入cookie ,时间戳存入缓存redi ...

  7. Java面向对象之异常详解

    目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往 ...

  8. Java之String类用法总结

    String类概述: 1.String类代表字符串.Java 程序中的所有字符串字面值(如"abc")都作为此类的实例实现. 2.String是一个final类,代表不可变的字符序 ...

  9. python之嵌套函数调用

    #定义嵌套函数 def func1(): print('this is func1') def func2(): print('this is func2')#调用1func1()输出:this is ...

  10. Scala实践3

    一.函数式对象 1.1  rational类的规格和创建 Rational类来源于有理数(rational number),来表示n(分子)/d(分母)的数字,同时对有理数的运算(加减乘除)建模,还具 ...