扩展/继承
    继承对于了解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. 2017 年 9 月 27 日 js(文本框内容添加到select)

    写法 <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">   ...

  2. python学习(五)--打印错误信息

    from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...

  3. Python进阶篇四:Python文件和流

    摘要: Python对于文件和流的操作与其他编程语言基本差不多,甚至语句上比其他语言更为简洁.文件和流函数针对的对象除了这两者之外还有,类文件(file-like),即python中只支持读却不支持写 ...

  4. Win10系统安装iis的方法【图文教程】

    1.在win10系统中的开始按钮点击右键,选择控制面板: 2.从控制面板选择“程序”: 然后选择“启用或关闭windows功能” 3.从列表中选择Internet Infomation Service ...

  5. CKRule业务规则管理系统部署说明

    1.   程序包说明 软件是使用WinForm开发的,包含服务端和客户端,服务端部署在IIS上面,客户端可以在已经安装.Net4.0的windows上面运行. 1.1.  服务端程序包 CKBrmsS ...

  6. blog test

    try my first blog by cnblog. i will record my learn experence in the future.

  7. 使用文档碎片(DocumentFragments)追加DOM元素

    标签(空格分隔): JavaScript DocumentFragment接口表示一个没有父级文件的最小文档对象.它被当做一个轻量版的Document使用,用于存储已排好版的或尚未打理好格式XML片段 ...

  8. dede如何调用一级栏目和子集栏目及其文章

    {dede:channelartlist row=6} <a href='{dede:field name='typeurl'/}'>{dede:field name='typename' ...

  9. Linux--LAMP平台搭建

    LAMP平台搭建 准备工作 rpm -e php php-cli php-ldap php-commn php-mysql --nodeps 删除php相关依赖软件 rpm -ivh zlib-dev ...

  10. 设计模式——装饰模式(Decorator Pattern)

    装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. UML图: 模型类: Component类: package com.cnblog.clarck; /** ...