详解scss的继承、占位符和混合宏
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的继承、占位符和混合宏相关推荐
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- java中parent结构_详解java中继承关系类加载顺序问题
详解java中继承关系类加载顺序问题 实例代码: /** * Created by fei on 2017/5/31. */ public class SonClass extends ParentC ...
- 6月13日王者体验服服务器未响应,王者荣耀6月13号体验服更新情况详解及段位继承新规则...
原标题:王者荣耀6月13号体验服更新情况详解及段位继承新规则 一.王者峡谷调整 (一)兵线调整 近战小兵基础金币回调:40->42 中程小兵基础金币回调:33->42 远程小兵基础金币回调 ...
- Java学习第十二天<封装详解><继承><super详解><方法重写><多态>
封装详解 //类 public class Student {//名字 学号 性别 属性私有(new 以后不能赋值)private String name;private int id;private ...
- php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念
js里常用的如下 - phpStudy...
JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...
- Js Call方法详解(js 的继承)
call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...
- C++继承详解三 ----菱形继承、虚继承
转载:http://blog.csdn.net/pg_dog/article/details/70175488 今天呢,我们来讲讲菱形继承与虚继承.这两者的讲解是分不开的,要想深入了解菱形继承,你是绕 ...
- 详解C#防访问修饰符:public,private,protected,internal
访问修饰符大家都很熟悉吧,今天我们来学习一下C#里面的访问修饰符. 修饰符 含义 public 访问不受限制. protected 访问仅限于包含类或从包含类派生的类型. internal 访问仅限于 ...
- 【C++】继承详解,菱形继承问题
继承体系 概念 继承方式 赋值兼容规则 同名隐藏 子类对象的构造过程 菱形继承 概念 是面向对象程序设计是代码可以复用的最重要的手段,它允许程序员在保持原有的类的特性的基础下进行拓展,增加功能. 这样 ...
最新文章
- java系统高并发解决方案
- 计算机网络系统中hn是,中南大学计算机网络作业1.pdf
- 这年头,老赖没得混了!大数据式追债,你见过吗?
- radware Alten系列的HA配置
- C++ chrono 库中的 steady_clock 、 system_clock、high_resolution_clock区别
- AspNetCore 中使用 InentityServer4(2)
- mysql 热块_MySQL分布式集群之MyCAT(三)rule的分析【转】
- PHP 5.4 on CentOS/RHEL 7.0, 6.5 and 5.10 via Yum
- [AssertionError: nput tensor input format are different]
- 化妆品包装新趋势|视觉模型样机包装模板,让你茅塞顿开
- java 服务注册中心_服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建...
- Microsoft向高性能计算市场推出了新的Azure产品
- 21天Jmeter打卡合集之从入门到精通
- unity3d实现序列帧动画
- java 爬虫爬取糗事百科热图图片
- 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
- Euler公式求解微分方程
- 高通android充电常用问题,高通平台android9.0充电电量,充电指示灯以及充电图标读取分析...
- 【论文写作】有了这些网站,可以解决论文写作中99.9%的问题!
- 动漫人物手绘线稿图,非常适合初学者临摹