Sass入门

学习Sass(官网:Sass)之前需要了解什么是Sass,Sass全称:Syntactically Awesome StyleSheets,中文的大概意思是“语法样式表”。从字面意思来讲,就是把css样式增加了一些语法。其实其功能也是差不多的。css本身是有自身的语法,但是并没有变量、条件判断、循环、函数等编程语言的基本语法,Sass就是提供了css缺失的功能。一般将Sass等称为“Css预处理器”。

“Css预处理器”:
    CSS 预处理器是一种语言用来为 CSS 增加一些编程的的特性,无需考虑浏览器的兼容
性问题,例如你可以在 CSS 中使用变量、简单的程序逻辑、函数等等在编程语言中的一些
基本技巧,可以让你的 CSS 更见简洁,适应性更强,代码更直观等诸多好处

作为css预处理器,不仅仅只有Sass一种,还包括LESS(官网:LESS)、Stylus(官网:Stylus),它们之间的异同这里不再赘述,如果感兴趣的朋友可以查看这篇文章,本文主要介绍Sass。如果你对为什么选择Sass有疑问,请查看视频《How I use SASS》(自备梯子

环境安装

  • Sass是使用Ruby开发的,在使用之前需要电脑安装Ruby环境(本文基于mac,其他系统请自行Google,Google请自备梯子)。
    详细查看:教程0--教程3。地址:https://ruby-china.org/wiki/install_ruby_guide

  • 安装Sass gem

    gem install sass

    查看安装是否成功:
    sass -v 能够输出版本号,表示安装成功。

预处理

  • 通过命令行运行sass

    sass input.scss output.css

    将input.scss 转换为css文件

  • 监控Sass文件的变化,自动转换为css文件

    1. 监控单个文件 sass input.scss output.css
    2. 监控目录 sass --watch app/sass:public/stylesheets
  • 编译风格:详细查看编译风格文档

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

    ex: sass --style compressed test.sass test.css

语法

  • 展现方式,有sass和scss两种。其不同点在下面代码中可以非常清晰的看到。

    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;
    }
    

    sass的样式是Sass刚刚问世的时候的样式,后来随着发展增加了scss的样式,目前两种样式Scss都是支持的。sass没有花括号,与原生的css样式相差较大,scss基本上是和css的代码样式是一样的,更符合之前写css代码习惯。我个人建议使用第二种scss的方式。

  • 注释

    Sass注释包括三中注释风格://注释/* 注释 *//*! 注释 */。下面分别介绍不同的注释方式。

    1. //注释:单行注释,预处理后消失,只存在sass文件中。
    2. /* 注释 */:标准css注释,会保留到编译后的文件中。
    3. /*! 注释 */:常用于版权声明,使用压缩模式预处理后,依旧会保留此注释。
  • 变量

    Scss中的变量定义使用$开头,例如:$my-color: #333 需要调用的地方直接:body { color: $my-color }

    下面查看完整例子:

    $font-stack:    Helvetica, sans-serif;
    $primary-color: #333;
    
    body {
      font: 100% $font-stack;
      color: $primary-color;
    }
    
    

    预处理后生成的代码:

    body {
        font: 100% Helvetica, sans-serif;
        color: #333;
    }
    

    变量调用还有另外一种方式:

    $left: left;
    
    body{
        margin-#{$left}:10px;
    }
    

    这种方式是将变量嵌套在字符串中,使用#{}

  • 嵌套

    Sass 支持标签属性等嵌套。

    标签嵌套,Sass代码如下:

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

    预处理后的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代码(切记不要讲属性color后面的:漏掉):

p {
   border: {
     color: red;
   }
  }
```
预处理后css代码:

```css
p {
    border-color: red;
}
```
引用父类元素。使用符号`&`

    Sass代码:

```scss
a {

&:hover { color: blue; }
}
```
预处理后的css代码:

```css
a : hover {
    color: blue;
}
```

高级用法

  • 局部模板

    在Sass中,可以创建一个局部文件,然后在其他的文件中引入局部文件。局部文件的命名一般以_开头,如_partial.scss。在另一文件中可以同过@import引入,这样在浏览器看到css文件只有一个。

  • 导入局部文件

    导入局部文件的关键字是@import。其不仅仅可以import.scss文件,还可以import.css文件,当导入.css功能时,同css中@import "file.css"的功能一致。

    局部Sass文件:

    // _reset.scss
    
    html,
    body,
    ul,
    ol {
       margin: 0;
      padding: 0;
    }
    

    导入局部文件:

    // base.scss
    
    @import 'reset';
    
    body {
      font: 100% Helvetica, sans-serif;
      background-color: #efefef;
    }
    

    最终生成的css文件:

    html, body, ul, ol {
      margin: 0;
      padding: 0;
    }
    
    body {
      font: 100% Helvetica, sans-serif;
      background-color: #efefef;
    }
    
  • Mixins(混合)

    Mixins定义方式:

    @mixin Mixins名称(参数:参数值){
    /*公用样式*/
    }
    

    定义成为模块后,需要通过@include进行调用mixin,调用代码如下:

    selector {
        @includ Mixins名称(参数值);
    }
    

    下面来看一个例子:

    Sass 文件:

    @mixin border-radius($radius) {
      -webkit-border-radius: $radius;
         -moz-border-radius: $radius;
          -ms-border-radius: $radius;
              border-radius: $radius;
    }
    
    .box { @include border-radius(10px); }
    

    预处理后的css文件:

    .box {
      -webkit-border-radius: 10px;
      -moz-border-radius: 10px;
      -ms-border-radius: 10px;
      border-radius: 10px;
    }
    
  • Extend/Inheritance(扩展或继承)

    Sass中可以从一个选择器,继承另一个选择器。其关键字是:@extend

    下面看一个例子,可以直观的展现继承关系:

    Sass代码:

    .message {
      border: 1px solid #ccc;
      padding: 10px;
      color: #333;
    }
    
    .success {
      @extend .message;
      border-color: green;
    }
    
    .error {
      @extend .message;
      border-color: red;
    }
    
    .warning {
      @extend .message;
      border-color: yellow;
    }
    

    上面例子中,.success.error.warning都通过@extend关键字继承了.message选择器。下面看一下生成的css代码:

    .message, .success, .error, .warning {
      border: 1px solid #cccccc;
      padding: 10px;
      color: #333;
    }
    
    .success {
      border-color: green;
    }
    
    .error {
      border-color: red;
    }
    
    .warning {
      border-color: yellow;
    }
    
  • 操作符

    在学习一门新的编程语言中基本上都会有介绍操作符的章节,但是css这门独特的编程语言确没有这种方式,但是通过Sass,可以让我们编写css程序的时候也能有操作符、条件循环语句、自定义函数等。下面将介绍操作符。

    在Sass中的操作符包括 +-*/。具体不用介绍,大家应该都明白。下面我们直接来看一个例子:

    Sass代码

    .container { width: 100%; }
    
    
    article[role="main"] {
      float: left;
      width: 600px / 960px * 100%;
    }
    
    aside[role="complimentary"] {
      float: right;
      width: 300px / 960px * 100%;
    }
    

    预处理后的css代码:

    .container {
      width: 100%;
    }
    
    article[role="main"] {
      float: left;
      width: 62.5%;
    }
    
    aside[role="complimentary"] {
      float: right;
      width: 31.25%;
    }
    

    不仅仅上述的宽度可以通过操作符进行技术,css的颜色也可以通过技术得到一个新的颜色,例如 #777 + #888其最后的结果是white

  • 数据类型

    Sass支持7中主要的数据类型:

    1. numbers:数字类型 (e.g. 1.2, 13, 10px)

    2. strings:字符串类型,既可以是""号,也可以是'',还可以直接省略 (e.g. "foo", 'bar', baz)

    3. colors: 颜色类型 (e.g. blue, #04a3f9, rgba(255, 0, 0, 0.5))

    4. booleans: 布尔类型 (e.g. true, false)

    5. nulls: 空类型 (e.g. null)

    6. lists:集合,可以通过空格或者逗号进行lists值得分隔 (e.g. 1.5em 1em 0 2em, Helvetica, Arial, sans-serif)

    7. maps :键值对 (e.g. (key1: value1, key2: value2))

  • 条件语句

    条件语句无非就是if-else格式,下面介绍一下格式。

    定义方式:

    if方式,关键字:@if

    @if true {
        /* 样式 */
    }
    

    if-else,关键字:@if @else

    @if true {
        /* 样式 */
    } @esle{
        /* 样式 */
    }
    
  • 循环语句

    SASS支持for循环:

@for $i from 1 to 10 {
    .border-#{$i} {
      border: #{$i}px solid blue;
    }
  }
```
  
也支持while循环:

```scss
    $i: 6;
  @while $i > 0 {
    .item-#{$i} { width: 2em * $i; }
    $i: $i - 2;
  }
```
each命令,作用与for类似:

```scss
@each $member in a, b, c, d {

.#{$member} {
      background-image: url("/image/#{$member}.jpg");
    }
  }
```

  • 自定义函数

    Sass支持自定义函数。函数的定义和调用如下所示:

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

总结

Sass的基本用法,上文中都有介绍到,如果还有其它问题,或本文没有介绍到的地方,请查看官方文档

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

推荐阅读更多精彩内容

  • 声明变量 定义变量的语法: 在有些编程语言中(如,JavaScript)声明变量都是使用关键词“var”开头,但是...
    Junting阅读 1,429评论 0 6
  • 2015年10月20日 1.嵌套 Sass 中还提供了选择器嵌套功能,但这也并不意味着你在 Sass 中的嵌套是无...
    a0d560da7818阅读 593评论 0 1
  • 一,CSS 预处理器 CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一...
    冯傻大粗阅读 411评论 0 0
  • 很详细的sass入门指南,学习一下。原文sass入门指南css预处理器已经算不上一个新鲜的词了,当前比较有代表性的...
    hzrWeber阅读 979评论 0 18
  • 长歌九霄气盖世,烽烟尽处岂无痕。 将军锦衣人未还,浊酒一樽饮春秋。 迎风刺骨万马行,泣血沉沙万骨枯。 末敬君臣孝为...
    海贝阅读 676评论 0 4