1、继承和占位符

两者都是通过@extend来引用。

1.1 继承

一个已经存在的css样式类,可以被其他样式类继承。

例如,实现以下css样式:

.btn, .btn--primary, .btn--info {border: 1px solid blue; }.btn--primary {color: black; }.btn--info {color: gray; }

scss中可以这样写,显然,这种写法便于维护和阅读!

.btn {border: 1px solid blue;
}.btn--primary {color: black;@extend .btn;
}.btn--info {color: gray;@extend .btn;
}

1.2 占位符

顾名思义,如果不被extend引用,它是不会被编译,也就是:不会占用css文件大小。这是和继承最大区别。

scss代码如下:

%btn {border: 1px solid blue;
}// 没有被extend
// 不会出现在css文件中
%test-btn {border: 1px solid black;
}.btn--primary {color: black;@extend %btn;
}.btn--info {color: gray;@extend %btn;
}

编译后的css代码:

.btn--primary, .btn--info {border: 1px solid blue; }.btn--primary {color: black; }.btn--info {color: gray; }

2. 混合宏

scss中的函数,通过关键字@mixin声明,@include引用。

2.1 参数设置和调用方式

无参调用
scss:

@mixin btn {border-radius : 3px;
}.box {color: white;@include btn;
}

css:

.box {color: white;border-radius: 3px; }

参数调用
scss:

$radius:3px !default;@mixin btn($radius:5px) { // 默认是 5pxborder-radius : $radius;
}.box {color: white;@include btn($radius); // 传入参数
}

css:

.box {color: white;border-radius: 3px; }

参数过多的情况

当参数2、3个时候,可以通过@mixin size($width,$height)这样来调用。当参数过多,使用...符号。

scss:

$height: 15px !default;
$width: 18px !default;@mixin size($list...) {@if length($list) == 0 {height: $height;width: $width;   }@else if length($list) == 1 {height: $list;width: $list;}@else if length($list) == 2 {height: nth($list , 1);width: nth($list , 2);}@else {@debug "Too many parameters";}
}.btn--primary {@include size();
}.btn--big {@include size(20px , 25px);
}.btn--square {@include size( 18px );
}.btn--test {@include size(1px,2px,3px,4px); // just a test. console output "Too many parameters" what we have defined.
}

输出的css结果:

.btn--primary {height: 15px;width: 18px; }.btn--big {height: 20px;width: 25px; }.btn--square {height: 18px;width: 18px; }

2.2 好处和不足

混合宏最大的不足:会复用代码,造成css冗赘(可以尝试一下下方的测试代码)。
当然,符合宏可以传递参数这点很nice。

可以编译下方代码,观察下结果:

@mixin border-radius{-webkit-border-radius: 3px;border-radius: 3px;
}.box {@include border-radius;margin-bottom: 5px;
}.btn {@include border-radius;
}

3. 版本

  • scss:3.5.6
  • ruby:2.4.4p296

欢迎技术交流,引用请注明出处。
个人网站:godbmw.com
Github:godbmw

转载于:https://www.cnblogs.com/geyouneihan/p/9127328.html

详解scss的继承、占位符和混合宏相关推荐

  1. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  2. java中parent结构_详解java中继承关系类加载顺序问题

    详解java中继承关系类加载顺序问题 实例代码: /** * Created by fei on 2017/5/31. */ public class SonClass extends ParentC ...

  3. 6月13日王者体验服服务器未响应,王者荣耀6月13号体验服更新情况详解及段位继承新规则...

    原标题:王者荣耀6月13号体验服更新情况详解及段位继承新规则 一.王者峡谷调整 (一)兵线调整 近战小兵基础金币回调:40->42 中程小兵基础金币回调:33->42 远程小兵基础金币回调 ...

  4. Java学习第十二天<封装详解><继承><super详解><方法重写><多态>

    封装详解 //类 public class Student {//名字 学号 性别 属性私有(new 以后不能赋值)private String name;private int id;private ...

  5. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  6. Js Call方法详解(js 的继承)

    call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...

  7. C++继承详解三 ----菱形继承、虚继承

    转载:http://blog.csdn.net/pg_dog/article/details/70175488 今天呢,我们来讲讲菱形继承与虚继承.这两者的讲解是分不开的,要想深入了解菱形继承,你是绕 ...

  8. 详解C#防访问修饰符:public,private,protected,internal

    访问修饰符大家都很熟悉吧,今天我们来学习一下C#里面的访问修饰符. 修饰符 含义 public 访问不受限制. protected 访问仅限于包含类或从包含类派生的类型. internal 访问仅限于 ...

  9. 【C++】继承详解,菱形继承问题

    继承体系 概念 继承方式 赋值兼容规则 同名隐藏 子类对象的构造过程 菱形继承 概念 是面向对象程序设计是代码可以复用的最重要的手段,它允许程序员在保持原有的类的特性的基础下进行拓展,增加功能. 这样 ...

最新文章

  1. java系统高并发解决方案
  2. 计算机网络系统中hn是,中南大学计算机网络作业1.pdf
  3. 这年头,老赖没得混了!大数据式追债,你见过吗?
  4. radware Alten系列的HA配置
  5. C++ chrono 库中的 steady_clock 、 system_clock、high_resolution_clock区别
  6. AspNetCore 中使用 InentityServer4(2)
  7. mysql 热块_MySQL分布式集群之MyCAT(三)rule的分析【转】
  8. PHP 5.4 on CentOS/RHEL 7.0, 6.5 and 5.10 via Yum
  9. [AssertionError: nput tensor input format are different]
  10. 化妆品包装新趋势|视觉模型样机包装模板,让你茅塞顿开
  11. java 服务注册中心_服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建...
  12. Microsoft向高性能计算市场推出了新的Azure产品
  13. 21天Jmeter打卡合集之从入门到精通
  14. unity3d实现序列帧动画
  15. java 爬虫爬取糗事百科热图图片
  16. 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
  17. Euler公式求解微分方程
  18. 高通android充电常用问题,高通平台android9.0充电电量,充电指示灯以及充电图标读取分析...
  19. 【论文写作】有了这些网站,可以解决论文写作中99.9%的问题!
  20. 动漫人物手绘线稿图,非常适合初学者临摹

热门文章

  1. Java 性能优化之 String 篇
  2. hiernate的锁机制
  3. java虚拟机启动参数分类详解
  4. Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
  5. jQuery 快速入门教程
  6. 多元分布和狄利克雷分布
  7. TLD(Tracking-Learning-Detection)学习与源码理解之(四)
  8. 自定义DataSet
  9. [实战]HM-Router configuration for TP ROOM
  10. hash_hmac函数使用不当造成的安全问题