1、引言

众所周知css并不能算是一们真正意义上的“编程”语言,它本身无法未完成像其它编程语言一样的嵌套、继承、设置变量等工作。为了解决css的不足,开发者们想到了编写一种对css进行预处理的“中间语言”,可以实现一些“编程”语言才有的功能,然后自动编译成css供浏览识别,这样既一定程度上弥补了css的不足,也无需一种新的语言来代替css以供浏览器识别。于是css预处理语言SASS就应运而生了

2、安装

sass基于Ruby语言开发而成,因此安装sass前需要安装Ruby。去官网下载Ruby并安装,安装过程中请注意勾选Add Ruby executables to your PATH添加到系统环境变量

使用淘宝RubyGems镜像安装 sass

  1. $ gem sources --remove https://rubygems.org/
  2. $ gem sources -a https://ruby.taobao.org/
  3. $ gem sources -l
  4. gem install compass

3、编译

  1. sass test.scss test.css

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

  1. * nested:嵌套缩进的css代码,它是默认值。
  2. * expanded:没有缩进的、扩展的css代码。
  3. * compact:简洁格式的css代码。
  4. * compressed:压缩后的css代码。

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

  1. sass --style compressed test.sass test.css

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

  1. // watch a file
  2. sass --watch input.scss:output.css
  3. // watch a directory
  4. sass --watch app/sass:public/stylesheets

4、嵌套

选择器嵌套

  1. div {
  2.   h1 {
  3.     color:red;
  4.   }
  5. }

属性嵌套

  1. div {
  2.   h1 {
  3.     background:{
  4. color:red;
  5. url(xxx.jpg);
  6. position:0 0;
  7. }
  8.   }
  9. }

引用父元素

  1. a {
  2.   &:hover {
  3. color: #ffb3ff;
  4. }
  5. }

5、变量

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

  1. $blue : #1875e7; 
  2. div {
  3.   color : $blue;
  4. }

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

  1. $side : left;
  2. .rounded {
  3.   border-#{$side}-radius: 5px;
  4. }

6、mixin

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

  1. @mixin center($w:1180px){
  2. width:$w;
  3. margin:0 auto;
  4. }

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

  1. div {
  2.   @include center;
  3. }

传参

  1. div {
  2.   @include center(980px);
  3. }

7、继承

现有一个class1类

  1. .class1 {
  2.   border: 1px solid #ddd;
  3. }

class2要继承class1,就要使用@extend命令

  1. .class2 {
  2.   @extend .class1;
  3.   font-size:120%;
  4. }
  5. 我们可以用占位符来写一些继承的样式(如“%one”),然后再通过@extend继承,这样就可以防止被渲染到CSS的规则集中
  1. %test{
  2. color:red;
  3. }
  4.  
  5. .test1{
  6. @extend %test;
  7. background:orange;
  8. }
  9.  
  10. .test2{
  11. @extend %test;
  12. background:red;
  13. }
  14.  
  15. /* 编译后 */
  16.  
  17. /* line 120, sass/_order.scss */
  18. .test1, .test2 {
  19. color: red;
  20. }
  21.  
  22. /* line 124, sass/_order.scss */
  23. .test1 {
  24. background: orange;
  25. }
  26.  
  27. /* line 129, sass/_order.scss */
  28. .test2 {
  29. background: red;
  30. }

8、插入文件

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

  1. @import "path/filename.scss";

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

  1. @import "foo.css";

9、条件语句

使用@if……@else……定义一个三角形箭头函数

  1. /* 箭头
  2. arrow(direction,size,color);
  3. */
  4. @mixin arrow($direction,$size,$color) {
  5. width: 0;
  6. height: 0;
  7. line-height: 0;
  8. font-size: 0;
  9. overflow: hidden;
  10. border-width: $size;
  11. cursor: pointer;
  12. @if $direction == top {
  13. border-style: dashed dashed solid dashed;
  14. border-color: transparent transparent $color transparent;
  15. border-top: none;
  16. }
  17. @else if $direction == bottom {
  18. border-style: solid dashed dashed dashed;
  19. border-color: $color transparent transparent transparent;
  20. border-bottom: none;
  21. }
  22. @else if $direction == right {
  23. border-style: dashed dashed dashed solid;
  24. border-color: transparent transparent transparent $color;
  25. border-right: none;
  26. }
  27. @else if $direction == left {
  28. border-style: dashed solid dashed dashed;
  29. border-color: transparent $color transparent transparent;
  30. border-left: none;
  31. }
  32. }

10、循环

SASS支持for循环

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

也支持while循环

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

each命令,作用与for类似

  1. @each $member in a, b, c, d {
  2.     .#{$member} {
  3.       background-image: url("/image/#{$member}.jpg");
  4.     }
  5.   }
代码若有中文编译Sass 文件出现Syntax error: Invalid GBK character报错解决办法

找到ruby的安装目录,里面也有sass模块,如这个路径:C:\Ruby\lib\ruby\gems\1.9.1\gems\sass-3.3.14\lib\sass

在这个文件里面engine.rb,添加一行代码:

  1. Encoding.default_external = Encoding.find('utf-8')

放在所有的require XXXX 之后即可。

最后在scss文件头部启用编码声明:

  1. @charset "utf-8";//必须设置了这个才能编译有中文的注释

既然.scss能通过sass命令转译成.css样式,那么我们是否可以将.css转译成.scss呢?

事实是可以的,我们可以通过sass-convert命令:

$ sass-convert css/style.css style.scss

sass-convert除了可以将.css样式转译成.scss文件之外,还可以通过这个命令对.sass.scss之间样式转译。

  1.  

安装compass-sourcemaps

  1. $ gem install compass-sourcemaps --pre

在Compass项目配置文件config.rb中增加enable_sourcemaps配置

  1. # enable sourcemaps
  2. enable_sourcemaps = true
  3. sass_options = {:sourcemap => true}

sass 入门教程的更多相关文章

  1. sass入门教程

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 二.安装和使用 2.1 安装 SASS是Ruby语言写的,必须先 ...

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

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

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

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

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

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

  5. Sass介绍及入门教程

    Sass是什么? Sass是"Syntactically Awesome StyleSheets"的简称.那么他是什么?其实没有必要太过于纠结,只要知道他是“CSS预处理器”中的一 ...

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

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

  7. webpack+sass+vue 入门教程(三)

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

  8. webpack+sass+vue 入门教程(二)

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

  9. webpack+sass+vue 入门教程(一)

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

随机推荐

  1. github上值得关注的前端项目

    https://segmentfault.com/a/1190000002804472

  2. Mysql常见问题及优化

    本文将就以下三个问题进行展开: 1.库表设计 2.慢 SQL 问题 3.误操作.程序 bug 时怎么办 一.库表设计 1.1 引擎选择 在 mysql 5.1 中,引入了新的插件式存储引擎体系结构,允 ...

  3. UNITY 打包安卓APK

    1,安装JDK.这个直接下就行了. 2,安装android sdk相关.这个比较蛋疼,官网是被墙的.有些网站的包还是需要访问墙外下载的.关键是找对那个能用的包(对我来说就是不FQ). http://p ...

  4. ASP.Net Core简介

    定义:一个经过精简的.模块化的.NET Framework子集,目的是为了跨平台..NET Core的类库叫做“CoreFX”,更精简的版本叫做“CoreCLR”. ASP.NET Core 是微软的 ...

  5. 淘宝HSF服务的原理以及简单的实现

    淘宝HSF服务具体来说分三个应用:api接口,service服务,本地应用. 最基本的Api服务应该是十分干净的,不含方法,只有接口.它是要被打包(jar包的形式)到中央仓库去的. service服务 ...

  6. 【推荐】JAVA基础◆浅谈3DES加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. ThinkPHP3.1新特性: 多层MVC支持

    ThinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,不过均支持多层(multi-Layer)设计. 模型(Model)层:默认的模型层由Model类构成, ...

  8. HDU - 5187 - zhx's contest (高速幂+高速乘)

    zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  9. C# - 转换

    无论什么类型 它们存储的其实都是一系列的位 在将A类型转换为B类型时 如果能完整转换 那么系统会将两个操作数自动进行隐式转换 但也有可能因为A类型的存储位数比B类型的存储位数大 那么B类型可能就没有足 ...

  10. Java 实现折半查找

    package search; import java.util.*; /*折半查找要求线性表是有序的,假设递增 * 基本思路:R[low...high]是当前的查找区间,首先确定中间位置mid=(l ...