扩展/继承
    继承对于了解css 的同学来说一点都不陌生,先来看一张图
    在Sass 中也具有继承一说,也就是继承类中的样式代码块,在Sass中时通过关键词“@extend”来
    继承已经存在的类样式块,从而实现代码的继承。
  //SCSS
      .btn{
          border:1px solid #ccc;
          padding:6px 10px;
          font-size:14px;
      }
    .btn-primarg{
        background-color:#f36;
        color:#fff;
        @extend .btn;
      }
    .btn-second{
        background-color:organge;
        color:#fff;
        @extend .btn;
      }
  编译出来之后:
    //css
      .btn, .btn-primary, .btn-second {
                  border:1px solid #ccc;
                  padding:6px 10px;
                  font-size:14px;
              }
      .btn-primary{
            background-color:#f36;
            color:#fff;
          }
      .btn-second{
          background-color:orange;
          color:#fff;
        }
 在 Sass 中的继承,可以继承类样式块中所有样式代码,而且编译出来的 CSS 会将选择器合并在一起,形成组合选择器:
        .btn, .btn-primary, .btn-second {
                      border: 1px solid #ccc;
                      padding: 6px 10px;
                      font-size: 14px;
        }
占位符%placeholder
     Sass中的占位符%placeholder 功能是一个很强大,很实用的一个功能,可以取代以前的css中的基类造成的
     代码冗余的情形,因为%placeholder 声明的代码,如果不被@extend 调用的话,不会产生任何代码。
        %mt5{
            margin-top:5px;
          }
        %pt5{
            padding-top:5px;
          }
        .btn{
            @extend %mt5;
            @extend %pt5;
        }
        .block{
            @extend %mt5;
          span{
            @extend %pt5;
              }
        }
      编译出来的css
         //css
        .btn, .block{
              margin-top:5px;
          }
        .btn, .block span{
              padding-top:5px;
        }
    通过 @extend 调用的占位符,编译出来的代码会将相同的代码合并在一起。这也是我们希望看到的效果,也让你的代码变得更为干净。
混合

    混合宏vs继承vs占位符
     a Sass中的混合宏使用
      //SCSS中混合宏使用
      @mixin mt($var){
              margin-top:$var;
            }
      .block{
          @include mt(5px);
          span{
            display:block;
            @include mt(5px);
          }
        }
      .header{
          color:orange;
          @include mt(5px);
          span{
            dispay:block;
            @include mt(5px);
            }
        }
      编译结果:
        .block span {
            display: block;

            }
        .header {
            color: orange;

            }
        .header span {
            display: block;

          }
        .block, .block span, .header, .header span {
              margin-top: 5px;

          }
    建议:如果你的代码块中涉及到变量,建议使用混合宏来创建相同的代码块。
  b)Sass中继承
    同样的,将上面代码中的混合宏,使用类名来表示,然后通过继承来调用。
          .mt{
              margin-top:5px;
            }
          .block {
              @extend .mt;
            span{
                display:block;
                @extend .mt;
              }
            }
          .header{
              color:orange;
              @extend .mt;
          }
     编译结果:
        .block span {
            display: block;

          }
      .header {
          color: orange;

          }
      .header span {
          display: block;

          }
      .block, .block span, .header, .header span {
        margin-top: 5px;

          }

    建议:如果你的代码块不需要专任何变量参数,而且有一个基类已在文件中存在,那么建议使用Sass的继承。
  c)占位符
      最后来看占位符,将上面的代码中的基类.mt 换成Sass的占位符格式
    //SCSS中占位符的使用
      %mt{
        margin-top:5px;
      }
      .block{
        @extend %mt;
        span{
          display:block;
          @extend %mt;
          }
        }
      .header{
        color:orange;
        @extend %mt;
        span{
          display:block;
          @extend %mt;
        }
        }
    编译结果:
      .block span {
        display: block;

        }
      .header {
        color: orange;

         }
      .header span {
        display: block;

        }
    编译出来的 CSS 代码和使用继承基本上是相同,只是不会在代码中生成占位符 mt 的选择器。那么占位符和继承的主要区别的,“占位符是独立定义,
    不调用的时候是不会在 CSS 中产生任何代码;继承是首先有一个基类存在,不管调用与不调用,基类的样式都将会出现在编译出来的 CSS 代码中。”

 差值#{}
    使用css 预处理器语言的一个主要原因是想使用Sass 获得一个更好的结构体系,比如说你想写更干净的,搞笑的和面向对象的
    css. Sass 中的差值(Interpolation)就是重要的一部分,让我们看一下下面的例子。
      $properties:(margin ,padding);
      @mixin set-value($side,$value){
      @each $prop in $properties{
        #{$prop}-#{$side}:$value;
          }
        }
      .login-box{
        @include set-value(top,14px);
        }
      代码编译成css
      .login-box{
          margin-top:14px;
          padding-top:14px;
      }
    当你想设置属性值的时候你可以使用字符串插入进来,另一个使用的用法是构建一个选择器。
    @mixin generate-sizes($class,$small,$medium,$big)

Sass 基础(三)的更多相关文章

  1. [转]前端利器:SASS基础与Compass入门

    [转]前端利器:SASS基础与Compass入门 SASS是Syntactically Awesome Stylesheete Sass的缩写,它是css的一个开发工具,提供了很多便利和简单的语法,让 ...

  2. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  3. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  4. Bootstrap <基础三十一>插件概览

    在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...

  5. Bootstrap <基础三十>Well

    Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...

  6. Bootstrap<基础三> 排版

    Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans-serif 作为其默认的字体栈. 使用 Bootstrap 的排版特性,您可以创建标题.段落. ...

  7. jdbc基础 (三) 大文本、二进制数据处理

    LOB (Large Objects)   分为:CLOB和BLOB,即大文本和大二进制数据 CLOB:用于存储大文本 BLOB:用于存储二进制数据,例如图像.声音.二进制文件 在mysql中,只有B ...

  8. Ruby语法基础(三)

    Ruby语法基础(三) ​ 在前面快速入之后,这次加深对基本概念的理解. 字符串 ​ Ruby字符串可以分为单引号字符串和双引号字符串,单引号字符串效率更高,但双引号的支持转义和运行 puts '单引 ...

  9. C#_02.13_基础三_.NET类基础

    C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...

随机推荐

  1. Zookeeper之集群搭建(Linux)

    Zookeeper集群搭建(Linux环境) 条件准备:准备三台Linux服务器 vt-serv1.vt-serv2.vt-serv3(虚拟机/物理机均可,服务器数量一定要是单数,不要问我为什么,据说 ...

  2. 继承Application管理生命周期

    继承Application实现Android数据共享 http://www.jianshu.com/p/75a5c24174b2 jessyan提出一个思路,用Application + 接口来管理扩 ...

  3. ViewPager+handler实现轮播

    先说下功能吧,随便设置一个网络图片链接的集合,作为图片的资源.我用ImageLoader来加载图片,在图片未加载完成时会ProgressBar加载状态 在Handler发送一个空消息来实现页面的轮播 ...

  4. wxpython wx.windows的API

    wx.Window is the base class for all windows and represents any visible object on screen. All control ...

  5. windows常用命令集锦

    开始→运行→输入的命令集锦 gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 lo ...

  6. helm回滚应用

    helm状态显示为部署,但容器可能不是running 以下是helm的解释 大概意思是helm只要在k8s上执行完成就当做成功,容器部署到创建状态已经不在Helm的角色设定里了 执行回滚前先模拟下过程 ...

  7. YUV数据详解

    http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed.对于planar的YUV ...

  8. php 四种基本排序算法

    冒泡排序 思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来. 第一轮:从第一个到最后一个冒泡比较,运行结果:最后一个最大 第二轮:从第一个到倒数第二个冒泡比较, 运行结果:最后一 ...

  9. Perl实用中文处理步骤(修改版)

    发信人: FenRagwort (泽), 信区: Perl标  题: Perl实用中文处理步骤(修改版)发信站: 水木社区 (Mon Feb 14 12:52:14 2011), 转信 (修改版 感谢 ...

  10. html5 5个重要特性

    HTML5已经火了一段时间了,相信作为web相关开发project师,肯定或多或少的了解和尝试过一些HTML5的特性和编程.还记得曾经我们介绍过的HTML5新标签. 作为未来前端开发技术的潮流和风向标 ...