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) { // 默认是 5px
border-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

详解scss的继承、占位符和混合宏的更多相关文章

  1. 详解Javascript的继承实现(二)

    上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构 ...

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

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

  3. sass 继承 占位符 %placeholder

    @extend //SCSS .btn { border: 1px solid #ccc; padding: 6px 10px; font-size: 14px; } .btn-primary { b ...

  4. JS 详解对象的继承

    在学习这篇博文前,请先移步我的另外一篇博文:JS 一张图理解prototype.proto和constructor的关系,先弄清楚“原型链”,这样对于理解继承会非常有效. 注意:博文中提到的“属性”, ...

  5. 详解Javascript的继承实现

    我最早掌握的在js中实现继承的方法是在w3school学到的混合原型链和对象冒充的方法,在工作中,只要用到继承的时候,我都是用这个方法实现.它的实现简单,思路清晰:用对象冒充继承父类构造函数的属性,用 ...

  6. 详解JavaScript对象继承方式

    一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Parent 构造函数成为 Children 的方法,然 ...

  7. 详解python中的描述符

    描述符介绍 总所周知,python声明变量的时候,不需要指定类型.虽然现在有了注解,但这只是一个规范,在语法层面是无效的.比如: 这里我们定义了一个hello函数,我们要求name参数传入str类型的 ...

  8. Scala面向对象—类详解2(继承相关)

    1.单例类 package com.zzzy class AAA {//单例 /*//java 思路--私有化构造方法,提供公开的getAAA 行不通 private def this(){ this ...

  9. 详解C++中继承的基本内容

    有些类与类之间存在特殊的关系,有共性也有特性,比如动物类可以细分为猫,狗等.下级别的成员除了拥有上一级的共性,还有自己的特性,这个时候就可以考虑继承的技术,减少重复代码. 一.继承中的对象模型 1.1 ...

随机推荐

  1. Forward团队-爬虫豆瓣top250项目-项目进度

    项目地址:https://github.com/xyhcq/top250 我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们 ...

  2. Linux(以RHEL7为例)下添加工作区的方法|| The Way To Add Workspace On Linux

    Linux(以RHEL7为例)下添加工作区的方法 The Way To Add Workspace On Linux 作者:钟凤山(子敬叔叔) 编写时间:2017年5月11日星期四 需求:有时候在使用 ...

  3. 桌面管理工具 RedisDesktopManager 0.8.8

    RedisDesktopManager 0.8.8  发布,此版本更新内容如下: 改进: Show key bytes length and value bytes length #3677 修复: ...

  4. vs2008快捷键一览表

    Ctrl+E,D ----             格式化全部代码 Ctrl+K,F ----             格式化选中的代码 CTRL + SHIFT + B          生成解决方 ...

  5. WPF 开机注册自启动及设置确保以管理员运行

    最近用到开机自启动设置,在此记录下设置自启动的步骤,如果对各位有需要可以借阅,之前设置管理权限解释在创建解决方案是将VS以管理员方式打开,这种方法可以实现,但是个人还是偏向与本文的方式,不多说啥了,下 ...

  6. three.js 一幅图片多个精灵

    https://blog.csdn.net/zhulx_sz/article/details/79105359 核心代码 // 把一幅外部图片中包含的5种精灵存入一个精灵材质数组 var sprite ...

  7. 16.IO之其他流

    第一  打印流 一.概述: 该流提供了打印方法,可以将各种数据类型的数据都原样打印 原理; x<=3; x++){ al.add(new FileInputStream(x+".txt ...

  8. Shell-16--函数

    函数的定义和调用放在一起(同一个shell)的好处是不会存在路径的问题:如果功能复杂,则应分开

  9. 开源性能测试工具Locust使用篇(一)

    1. 环境准备 安装python3.6 ,安装步骤略 pip install locust 安装完成后使用locust -V检查 2.locust使用,先编辑一个简单的load_test.py的脚本 ...

  10. Testing - 软件测试知识梳理 - 测试方法

    选择和使用测试方法和工具 按照测试需求用途(或测试技巧)选择 在软件开发生命周期和软件测试流程中适当地选择 按照测试人员实际技能选择 选择可提供的和可执行的 测试方法 类别及技巧 目标 使用方法 举例 ...