css编译工具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{
    display:block;
    @include mt(5px);
  }
}
1、上面是sass混合宏方法编写的sass代码,下面是编译出来的css代码
.block {
  margin-top: 5px;
}
.block span {
  display: block;
  margin-top: 5px;
}
.header {
  color: orange;
  margin-top: 5px;
}
.header span {
  display: block;
  margin-top: 5px;
}
上面代码中可以看出,sass混合宏编写不会自动合并相同的样式代码,如果在样式文件中调用同一个混合宏,会产生多个对应的样式代码,造成代码的冗余,这也是无法忍受的一件事情。不过他并不是一无事处,他可以传参数;比如
@mixin br($rad){
    border-radius:$rad;
    -webkit-border-radius:$rad;
    -moz-border-radius:$rad;
    -ms-border-radius:$rad;
}
.md{
    @include br(20px);
}
2、下面是Sass中的继承
//SCSS 继承的运用
.mt{
  margin-top: 5px;
}
.block {
  @extend .mt;
  span {
    display:block;
    @extend .mt;
  }
}
.header {
  color: orange;
  @extend .mt;
  span{
    display:block;
    @extend .mt;
  }
}
下面是编译出来的css代码
.mt, .block, .block span, .header, .header span {
  margin-top: 5px;
}
.block span {
  display: block;
}
.header {
  color: orange;
}
.header span {
  display: block;
}
使用继承后,编译出来的 CSS 会将使用继承的代码块合并到一起,通过组合选择器的方式向大家展现,比如 .mt, .block, .block span, .header, .header span。这样编译出来的代码相对于混合宏来说要干净的多,也是我们期望看到。但是他不能传变量参数。所以如果你的代码块不需要专任何变量参数,而且有一个基类已在文件中存在,那么建议使用 Sass 的继承。
3、占位符
%mt{
  margin-top: 5px;
}
.block {
  @extend %mt;
  span {
    display:block;
    @extend %mt;
  }
}
.header {
  color: orange;
  @extend %mt;
  span{
    display:block;
    @extend %mt;
  }
}
占位符编译出来的 CSS 代码和使用继承基本上是相同,只是不会在代码中生成占位符 mt 的选择器。那么占位符和继承的主要区别的,“占位符是独立定义,不调用的时候是不会在 CSS 中产生任何代码;继承是首先有一个基类存在,不管调用与不调用,基类的样式都将会出现在编译出来的 CSS 代码中。”

css编译工具Sass中混合宏,继承,占位符分别在什么时候使用的更多相关文章
- sass中 混合宏 VS 继承 VS 占位符  各自的使用时机和特点
		
初学者都常常纠结于这个问题“什么时候用混合宏,什么时候用继承,什么时候使用占位符?”其实他们各有各的优点与缺点,先来看看他们使用效果: a) Sass 中的混合宏使用 举例代码见 2-24 行 编译出 ...
 - 最好用的css辅助工具——SASS&LESS
		
前言 首先,小编给大家解释一下什么是SCSS和LESS,Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables).嵌套 (nested rules).混合 ...
 - Sass之混合宏、继承、占位符
		
1.混合宏. 当样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无法达到我们目的了.这个时候混合宏就派上用场了. 而使用混合宏时,首先要声明混合宏,而声明混合宏时有两种,不带参数混合宏和带参数 ...
 - sass 继承 占位符 %placeholder
		
@extend //SCSS .btn { border: 1px solid #ccc; padding: 6px 10px; font-size: 14px; } .btn-primary { b ...
 - MyBatis中使用#和$书写占位符有什么区别?
		
#将传入的数据都当成一个字符串,会对传入的数据自动加上引号:$将传入的数据直接显示生成在SQL中.注意:使用$占位符可能会导致SQL注射攻击,能用#的地方就不要使用$,写order by子句的时候应该 ...
 - Mybatis 中 sql 语句的占位符 #{} 和 ${}
		
#{} 表示一个占位符号,通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换.#{} 可以有效防止 sql注入. #{} ...
 - slf4j中的Logger 使用占位符{} 来传入参数记录日志信息
		
首先要导入 slf4j包中的2个类 import org.slf4j.Logger;import org.slf4j.LoggerFactory; 再定义如下 private final static ...
 - 聊聊 SpringBoot 中的两种占位符:@*@ 和 ${*}
		
前言 在 SpringBoot 项目中,我们经常会使用两种占位符(有时候还会混用),它们分别是: @*@ ${*} 如果我们上网搜索「SpringBoot 的占位符 @」,大部分答案会告诉你,Spri ...
 - 使用gettext提取c#中的多语言占位符(nopCommerce示例篇)
		
i18n国际化通常的作法是使用gettext,即在源码中使用特殊的关键字来标识这个字符串将可能被翻译,如 @if (Model.IsCustomerForumModerator) { <li c ...
 
随机推荐
- U3D物理碰撞总结
			
OnCollisionEnter的触发条件: 1.都有boxcollider组件并且IsTrigger为false 2.主动碰撞的物体要有非运动学刚体组件,被动碰撞的物体有木有都行 3.如果主动碰撞的 ...
 - Sysrq 诊断系统故障 与 gdb 调试core dump
			
1. 典型应用场景如: 1)系统进入了挂死状态(如调度出现异常.或系统负荷过重),但仍能响应中断,此时可以通过Sysrq魔术键(c)手工触发panic,结合kdump,就能收集到vmcore信息 ...
 - codeforces 421d bug in code
			
题目链接:http://codeforces.com/problemset/problem/421/D 题目大意:每个人说出自己认为的背锅的两个人,最后大BOSS找两个人来背锅,要求至少符合p个人的想 ...
 - Segments - POJ 3304 (判断直线与线段是否相交)
			
题目大意:给出一些线段,然后判断这些线段的投影是否有可能存在一个公共点. 分析:如果这些线段的投影存在一个公共点,那么过这个公共点作垂线一定与所有的直线都想交,于是题目转化成是否存在一个直线可以经 ...
 - c#基础语言编程-Path和Directory
			
引言 在程序常会对文件操作,在对文件操作中需要对文件路径的进行定位,在.Net中针对寻找文件提供两个静态类以供调用,Path和Directory. Path类 来自命名空间SYstem.IO,Path ...
 - 怎样安装两个tomcat,怎样配置
			
装两个tomcat 各自是6.0和7.0 可想执行tomcat6.0 可是实际上却执行tomcat7.0 两个版本号都是用解压缩包 事实上就是不能执行tomcat6.0 仅仅能执行7.0 两个环境变量 ...
 - 个人收藏的flex特效网址【经典中的极品】
			
http://www.noupe.com/adobe/flex-developers-toolbox-free-components-themes-and-tutorials.html经典中的经典 h ...
 - 嵌入式Linux系统Bootloader启动调试技术(回想)
			
嵌入式系统搭建过程中,对于系统平台搭建project师最初的一步一般是移植Bootloader ,当然移植有几个级别,通常最常见的是參考的EVM 的硬件有了改动(如更改了FLASH ,更改了SDRAM ...
 - iOS Sqlite3 Demo 及 FMDB Demo
			
本文是主要实现了三个函数: testSQLite3 是测试系统自带的sqlite3的demo testFMDB是测试FMDB存取简单的数据类型的 的demo testFMDB2是将任意对象作为一个整体 ...
 - Unity3D 游戏的碰撞
			
首先创建两个精灵,然后都绑定上碰撞方法(这个是在上一篇文章的基本上): 不过 要注意一点就是碰撞器需要挂一个重力组件,不然无效 所以添加了差不多就能够实现物体碰撞了: 接下来技术写代码,让碰撞的时候进 ...