Sass 入门篇 —— 学习笔记(二)

一、Sass 的基本特性 - 基础

  1. 变量
  • 声明变量
    Sass 的变量包括三个部分:

    • 声明变量的符号 “$”
    • 变量名称(如:width)
    • 赋予变量的值(如:200px)

    如:

    $width: 200px;  
    
  • 普通变量与默认变量

    • 普通变量

      $fontWeight: bold;  
      
      body {  
         font-weight: $fontWeight;  
      }
      
    • 默认变量
      sass 的默认变量仅需要在值后面加上 !default 即可

      $fontWeight: bold !default;  
      
      body {  
         font-weight: $fontWeight;  
      }
      

      覆盖默认变量只需要在默认变量之前重新声明下变量即可

      $fontWeight: normal; // 在默认变量之前重新声明变量
      $fontWeight: bold !default;  
      
      body {  
         font-weight: $fontWeight;  
      }
      
  • 变量的调用

    $fontWeight: bold;  
    
    body {  
       font-weight: $fontWeight; // 调用变量
    }
    
  • 局部变量和全局变量
    局部变量局部变量是拥有局部作用域的变量。只能由声明它的函数或块中访问。

      $color: orange; // 定义全局变量
    
      span {
        color: $color; // 调用全局变量
      }
    

    全局变量全局变量是在所有作用域都可访问的变量。

      .global {
        $color: orange; // 定义局部变量
    
        p {
          color: $color; // 调用局部变量
        }
      }
    
  1. 嵌套
  • 选择器嵌套

    比如有这样一段 HTML 结构代码:

      <header>
        <nav>
          <a href="#">Home</a>
          <a href="#">About</a>
        </nav>
      </header>
    

    想选中 header 中的 a 标签,在 CSS 会这样写:

      nav a {
        color: red;
      }
    
      header nav a {
        color: green;
      }
    

    在 Sass 中使用选择器嵌套:

      nav {
        a {
          color: red;
    
          header & {
            color: green;
          }
        }
      }
    
  • 属性嵌套
    CSS 有一些属性是前缀相同,后缀不同的,比如:
    border-top/border-bottom

  .boder {
    border-top: 1px solid red;
    border-bottom: 1px solid green;
  }

而 Sass 可以这样写:

  .border {
    border: { // 注意此处有 ":"
      top: 1px solid red;
      bottom: 1px solid green;
    }
  }
  • 伪类嵌套
    伪类嵌套需要借助 "&" 符号一起配合使用,比如我们编译下面的 CSS:
  clearfix:before, .clearfix:after {
    content: "";
    display: table;
  }
  .clearfix:after {
    clear: both;
    overflow: hidden;
  }

Sass 可以这样写:

  .clearfix {
    &:before,
    &:after {
      content: "";
      display: table;
    }
    &:after {
      clear: bold;
      overflow: hidden;
    }
  }
  1. 混合宏
  • 声明混合宏

    • 不带参数的混合宏:
      在 Sass 中,使用 @mixin 声明混合宏。如:
        @mixin border-radius {
          -webkit-border-radius: 5px;
          border-radius: 5px;
        }
      
    • 带参数的混合宏:
      @mixin border-radius($redius: 5px) {
        -webkit-border-radius: $redius;
        border-radius: $redius;
      }
    
  • 调用混合宏
    在实际调用中,使用 @include 调用混合宏。以上面声明的混合宏为例子:

    button {
      @include border-radius;
    }
    

    编译好的 CSS:

    button {
      -webkit-border-radius: 5px;
      border-radius: 5px;
    }
    
  • 混合宏的参数

    • 不带值的参数:
        @mixin border-radius($redius) {
          -webkit-border-radius: $redius;
          border-radius: $redius;
        }
      
      调用时传入参数值
      .box {
        @include border-radius(3px);
      }
      
    • 带值的参数:
        @mixin border-radius($redius:3px) {
          -webkit-border-radius: $redius;
          border-radius: $redius;
        }
      
    • 多个参数
      @mixin center($width,$height){
        width: $width;
        height: $height;
        position: absolute;
        top: 50%;
        left: 50%;
        margin-top: -($height) / 2;
        margin-left: -($width) / 2;
      }
      
      当传入参数过多时,可以使用参数"..."来替代。
  • 继承
    在 Sass 中通过 @extend 来继承已存在的类样式块,如:

    .btn {
      border: 1px solid #ccc;
      padding: 6px 10px;
      font-size: 14px;
    }
    
    .btn-primary {
      background-color: #f36;
      color: #fff;
      @extend .btn;
    }
    
    .btn-second {
      background-color: orange;
      color: #fff;
      @extend .btn;
    }
    

    编译好的 CSS :

    .btn, .btn-primary, .btn-second { /* 编译出来的 CSS 会将选择器合并在一起,形成组合选择器 */
      border: 1px solid #ccc;
      padding: 6px 10px;
      font-size: 14px;
    }
    
    .btn-primary {
      background-color: #f36;
      color: #fff;
    }
    
    .btn-second {
      background-clor: orange;
      color: #fff;
    }
    
  • 占位符 %placeholder
    %placeholder 声明的代码,如果不被 @extend 调用的话,不会产生任何代码,如:

    %mt5 {
      margin-top: 5px;
    }
    %pt5{
      padding-top: 5px;
    }
    

    以下才会产生代码:

    %mt5 {
      margin-top: 5px;
    }
    %pt5{
      padding-top: 5px;
    }
    
    .btn {
      @extend %mt5;
      @extend %pt5;
    }
    
    .block {
      @extend %mt5;
    
      span {
        @extend %pt5;
      }
    }
    

    编译好的 CSS :

    .btn, .block {
      margin-top: 5px;
    }
    
    .btn, .block span {
      padding-top: 5px;
    }
    
  1. Sass 运算
  • 加法
    变量属性中都可以做加法运算。如:
    .box {
      height: 20px + 8in;
    }
    
    编译好的 CSS :
    .box {
      height: 788px;
    }
    

注:携带不同类型的单位时,在 Sass 中计算会报错

  • 减法

    $full-width: 960px;
    $sidebar-width: 200px;
    
    .content {
      width: $full-width -  $sidebar-width;
    }
    

    编译好的 CSS :

    .content {
      width: 760px;
    }
    
  • 乘法
    乘法运算能够支持多种单位(em, px, %),但两个值单位相同时,只需要为一个数值提供单位即可:

    .box {
      width: 10px / 2;
    }
    

    编译好的 CSS :

    .box {
      width: 5px;
    }
    
  • 变量计算

    $content-width: 720px;
    $sidebar-width: 220px;
    $gutter: 20px;
    
    .container {
      width: $content-width + $sidebar-width + $gutter;
      margin: 0 auto;
    }
    

    编译好的 CSS :

    .container {
      width: 960px;
      margin: 0 auto;
    }
    
  • 颜色运算
    颜色运算是分段运算的,也就是红、绿、蓝各颜色分段单独运算。如:

    p {
      color: #010203 + #040506;
    }
    

    计算公式为: 01 + 04 = 05、02 + 05 = 07 和 03 + 06 = 09
    编译好的 CSS :

    .container {
      width: 960px;
      margin: 0 auto;
    }
    
  • 字符运算
    字符运算通过加法符号 "+"对字符串进行连接。如:

    $content: "Hello" + "" + "Sass!";
    .box:before {
      content: " #{$content} ";
    }
    

    编译好的 CSS :

    .box:before {
      content: " Hello Sass! ";
    }
    

    只有强者才懂得斗争;弱者甚至失败都不够资格,而是生来就是被征服的。
    希望此文章能够帮助你。

    欢迎关注我的博客网站。

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

推荐阅读更多精彩内容

  • 前言 什么是CSS预处理器 定义:CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增...
    SA_Arthur阅读 3,117评论 0 18
  • 基础 声明变量 普通变量 默认变量 变量覆盖:只需要在默认变量之前重新声明下变量即可 变量的调用 局部变量和全局变...
    Jill1231阅读 1,270评论 0 1
  • 1、SCSS 是 Sass 的新语法格式,从外形上来判断他和 CSS 长得几乎是一模一样,代码都包裹在一对大括号里...
    夜幕小草阅读 1,707评论 2 10
  • 1、LESS的官网:http://lesscss.org 2、Sass官网地址:http://sass-lang....
    Howie223阅读 3,671评论 0 5
  • 因为自己手持火把穿越了整个炸药仓库,也一直被自己沦为韭菜在股市里被收割,决心好改变,所以要学习,感恩林明樟老师的书...
    大熊律师阅读 290评论 0 2