SASS入门1

2015年10月19日
1.SASS和SCSS的区别
1)文件扩展名不同,Sass 是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名
2)语法书写方式不同,Sass 是以严格的缩进式语法规则来书写,不带大括号"{}"和分号";",而 SCSS 的语法书写和我们的 CSS 语法书写方式非常类似
示例:
SASS语法:

      $font-stack:  Helvetica, sans-serif  //定义变量
      $primary-color:  #333    //定义变量

        body
                font: 100%  $font-stack
                color: $primary-color

SCSS语法:

      $font-stack:  Helvetica, sans-serif;  //定义变量
      $primary-color:  #333;    //定义变量

        body {
                font: 100%  $font-stack;
                color: $primary-color;
}

2.SASS/SCSS与CSS写法的差别
1)SASS无大括号和分号
2)SCSS与CSS写法无差别

3.SASS的编译
SASS的编译方法:命令编译、GUI工具编译、自动化编译
1)命令编译
命令编译是指使用电脑中的命令终端,通过输入Sass指令来编译Sass。这种编译方式是最直接也是最简单的一种方式。因为只需要在命令终端输入
单文件编译(对一个单文件进行编译)
sass<要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css

 多文件编译(对整个项目所有Sass文件编译成CSS文件)

sass sass/:css/
上面的命令表示将项目中"sass"文件夹中所有".scss"(".sass")文件编译成".css"文件,并且将这些CSS文件都放在项目"css"文件夹中。

  缺点及解决办法

在实际编译过程中,你会发现上面的命令,只能一次性编译。每次个性保存".scss"文件之后,都得重新执行一次这样的命令。如此操作太麻烦,其实还有一种方法,就是在编译 Sass 时,开启"watch"功能,这样只要你的代码进行任何修改,都能自动监测到代码的变化,并且给你直接编译出来:
sass --watch<要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css

 watch举例:

假设我本地有一个项目,我要把项目中"bootstrap.scss"编译成"bootstrap.css"文件,并且把编译出来的文件放在"css"文件夹中,我可以在命令端执行:
sass --watch
sass/bootstrap.scss:css/bootstrap.css
一旦bootstrap.scss文件有任何修改,只要重新保存了修改的文件,命令终端就能监测,并能重新编译出文件

2)GUI界面工具编译

4.输出方式
1)嵌套输出方式nested
Sass提供了一种嵌套显示CSS文件的方式。例如:

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

在编译的时候带上参数"--style nested";
编译出来的 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; }

2)展开输出方式expanded

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

在编译的时候带上参数"--style expanded":
sass --watch test.scss:test.css --style expanded

这个输出的 CSS 样式风格和 nested 类似,只是大括号在另起一行,同样上面的代码,编译出来:

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

3)紧凑输出方式compact

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

在编译的时候带上参数"--style compact":
sass --watch test.scss:test.css --style compact

该方式适合那些喜欢单行 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; }

4)压缩输出方式 compressed

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

在编译的时候带上参数"--style compressed":
sass --watch test.scss:test.css --style compressed

压缩输出方式会去掉标准的 Sass 和 CSS 注释及空格。也就是压缩好的 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}

一段时间之后,你实际上就不再需要写 CSS 代码了,只用写 Sass 代码。在这种情况下,你只需要设定输出格式为压缩格式,知道输出的 CSS 代码可以直接使用即可。

5.Sass的调试
只要浏览器支持"sourcemap"功能即可在浏览器中调试。早一点的版本,需要在编译的时候添加"--sourcemap"参数:
sass --watch --scss --sourcemap
style.scss:style.css

在Sass3.3版本之上,不需要添加这个参数也可以:
sass --watch style.scss:style.css

在命令终端,你将看到一个信息:

Change detected to: style.scss
write style.css
write style.css.map
这时你就可以调试你的代码

6.声明变量
定义变量的语法:
以"$"开头: $width: 300px;
Sass变量包括三个部分:
1.声明变量的符号"$"
2.变量名称
3.赋予变量的值

来看一个简单的示例,假设你的按钮颜色可以给其声明几个变量:

$brand-primary: darken(#428bca,  6.5%)  !default;
$btn-primary-color:  #fff  !default;
$btn-primary-bg:  $brand-primary  !default;
$btn-primary-border:  darken($btn-primary-bg,  5%)  !default;

如果值后面加上!default则表示默认值

7.普通变量与默认变量
1)普通变量
定义之后可以在全局范围内使用。

$fontSize: 12px;
body{
    font-size:$fontSize;
}

编译后的css代码:

body{
    font-size: 12px;
}

2)默认变量
sass的默认变量仅需要在值后面加上!default即可。

$baseLineHeight:1.5 !default;
body{ line-height: $baseLineHeight; }

编译后的css代码:

body{
    line-height:1.5;
}

sass的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可。

$baseLineHeight: 2;
$baseLineHeight: 1.5 !default;
body{ line-height: $baseLineHeight; }

编译后的css代码:

body{ line-height: 2;}

可以看出现在编译后的 line-height 为 2,而不是我们默认的 1.5。默认变量的价值在进行组件化开发的时候会非常有用。

8.变量的调用
在Sass中声明了变量之后,就可以在需要的地方调用变量。调用变量的方法也非常的简单。
比如在定义了变量

$brand-primary : darken(#428bca, 6.5%) !default; // #337ab7
$btn-primary-color: #fff !default;
$btn-primary-bg : $brand-primary !default;
$btn-primary-border : darken($btn-primary-bg, 5%) !default;

在按钮button中调用,可以按下面的方式调用

.btn-primary{
    background-color: $btn-primary-bg;
    color: $btn-primary-color;
    border: 1px solid $btn-primary-border;
}

编译出来的CSS:

.btn-primary{
    background-color: #337ab7;
    color: #fff;
    border: 1px solid #2e6da4;
}

9.局部变量和全局变量
示例:

//scss
$color: orange  !default;//定义全局变量(在选择器、函数、混合宏....的外面定义的变量为全局变量)
.block{
  color: $color;//调用全局变量
}
em{
        $color:  red;//定义局部变量
          a{
              color: $color;//调用局部变量
            }
}
span{
      color: $color;//调用全局变量
}

css的结果:

//CSS
.block {
  color: orange;
}
em a {
  color: red;
}
span {
  color: orange;
}

上面的示例演示可以得知,在元素内部定义的变量不会影响其他元素。如此可以简单的理解成,全局变量就是定义在元素外面的变量,如下代码:
$color: orange !default;

$color就是一个全局变量,而定义在元素内部的变量,比如$color:red;是一个局部变量。

除此之外,Sass现在还提供一个!global参数。!global和 !default 对于定义变量都是很有帮助的。我们之后将会详细介绍这两个参数的使用以及其功能。

1)全局变量的影子
当在局部范围(选择器内、函数内、混合宏内...)声明一个已经存在于全局范围内的变量时,局部变量就成为了全局变量的影子。基本上,局部变量只会在局部范围内覆盖全局变量。
示例:

$color:  orange  !default;//定义全局变量
.block{
    color: $color;//调用全局变量
}
em{
    $color: red;//定义局部变量(全局变量$color的影子)
      a{
          color: $color;//调用局部变量
        }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • [toc] 前言 本文所有的演示都是基于Win10操作系统。 关于Sass 1.定义 Sass的学名叫“CSS预处...
    崔小叨阅读 18,238评论 0 78
  • 1、SCSS 是 Sass 的新语法格式,从外形上来判断他和 CSS 长得几乎是一模一样,代码都包裹在一对大括号里...
    夜幕小草阅读 1,707评论 2 10
  • Sass入门与实战 **Sass is the most mature, stable, and powerful...
    2f3abe35f5ac阅读 704评论 0 2
  • 1. CSS预处理器 定义了一种新的专门的编程语言,编译后成正常的CSS文件。为CSS增加一些编程的特性,无需考虑...
    恰皮阅读 106,113评论 20 105
  • Sass(Syntactically Awesome StyleSheets) 是对 CSS 的扩展,让 CSS ...
    於風聽語阅读 5,305评论 6 10