本文参考了 阮一峰 老师对 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. 使用EF操作Docker中的Mysql实例

    为啥我会选择mysql呢?因为我的服务器配置较低,而SqlServer在docker中的实例,服务器的运行内存应当保持在2G+,我没有这个条件,它会爆出这样的错误 sqlservr: This pro ...

  2. 「洛谷P1196」「NOI2002」银河英雄传说 解题报告

    P1196 [NOI2002]银河英雄传说 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的 ...

  3. 为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?

    看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章 ...

  4. kubernetes-dashboard部署

    参考资料: kubernetes官方文档 官方GitHub 创建访问用户 解决chrome无法访问dashboard 官方部署方法如下: kubectl apply -f https://raw.gi ...

  5. nginx介绍及相关实验

    一.nginx介绍 1.nginx简介 Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP 服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 R ...

  6. spring boot学习笔记(1)

    一.构建springboot项目 可以通过idea的springboot initialization来创建, idea的功能很强大,可以自己选择需要集成的插件. 完整的项目结构是这样的: DemoA ...

  7. 如何对N个接口按比例压测

    随着微服务盛行,公司的服务端项目也越来越多.单一的接口性能测试并不能准确反映某个服务的总体处理能力,在服务功能划分比较清晰的架构下,对于某一服务的总体性能测试也相对变得简单.下面分享一个对于某个模块对 ...

  8. Spring Cloud Alibaba Nacos

    1. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 为分布式应用程序开发提供了一站式解决方案.它包含了开发分布式应用程序所需的所有组件,使得你可以轻松地使用 ...

  9. SQL Server2012高可用之日志传送测试

    (一)日志传送架构 (1.1)相关服务器 主服务器   :用于生产的服务器,上面运行这生产SQL Server数据库: 辅助服务器:用于存放主服务器上数据库的一个“镜像”数据库: 监控服务器:用来监控 ...

  10. 全流程开发 TP6.0实战高并发电商服务系统*完

    在TP6框架中我们可以学到TP整体知识,如下图一所示: 图一:TP6整体知识点 这些内容都会在实战课程中一一涵盖,并且在课程中我们会用到五层架构思想(如图二),和传统的MVC架构有所不一样,这样做可以 ...