sass中@mixin,%,@function区别

@mixin       使用@include引用,可传参,返回一段css样式,不用会生成一个class,生成结果是直接拷贝,这样多处引用,会造成代码重复

%              使用@extend引用,不可传参,返回一段css样式。%开头的class只是用来extend,不会生成在代码里。
                 生成后,多个class用逗号连接,提取成一个样式,减少重复代码

@function   与@mixin的最大不同,返回的是一个值,不是一段css样式

1. mixin

就是定义了一个函数,可以传参,并且设定默认值,css选择器可以通过@include来引用,mixin混入的代码,就是原样复制,不会合并,会造成冗余

例如:

@mixin br6($br6: 6px){ /* 传一个带值的参数 */
border-radius: $br6;
}
div{
@include br6(); /* 如果不传值就是6px,传值会覆盖原始值 */
}

再如:

@mixin icon {
transition: background-color ease .2s;
margin: 0 .5em;
} .error-icon {
@include icon;
/*错误图标指定的样式... */
} .info-icon {
@include icon;
/* 信息图标指定的样式... */
}

会生成:

.error-icon {
transition: background-color ease .2s;
margin: 0 .5em;
/*错误图标指定的样式... */
} .info-icon {
transition: background-color ease .2s;
margin: 0 .5em;
/* 信息图标指定的样式... */
}

其中的.icon的代码是重复的。

2. @extend

是继承一个class,其会复制父class的内容,但是会合并,即父子用逗号隔开,写在一起,无多余的冗余代码

例如:

.icon {
transition: background-color ease .2s;
margin: 0 .5em;
} .error-icon {
@extend .icon;
/*错误图标指定的样式... */
} .info-icon {
@extend .icon;
/* 信息图标指定的样式... */
}

会生成:

.icon, .error-icon, .info-icon {
transition: background-color ease .2s;
margin: 0 .5em;
} .error-icon {
/*错误图标指定的样式... */
} .info-icon {
/* 信息图标指定的样式... */
}

3. %placeholder

相当于一个虚拟的class,是为了解决@extend直接继承class,父class会被生成的问题。
因为一个父class有可能只是用来被继承的,本身不会被使用,生成出来占用空间。占位符可以解决这个问题

例如:

%icon {
transition: background-color ease .2s;
margin: 0 .5em;
} .error-icon {
@extend %icon;
/*错误图标指定的样式... */
} .info-icon {
@extend %icon;
/* 信息图标指定的样式... */
}

生成为:

.error-icon, .info-icon {
transition: background-color ease .2s;
margin: 0 .5em;
} .error-icon {
/*错误图标指定的样式... */
} .info-icon {
/* 信息图标指定的样式... */
}

没有生成被继承的.icon这个class。%placeholder和@extend是配合使用的,没有替代之说。
%placeholder在@media中使用需要注意,不能在@media中直接写extend。

例如下面的会报错:

%icon {
transition: background-color ease .2s;
margin: 0 .5em;
} @media screen {
.error-icon {
@extend %icon;
} .info-icon {
@extend %icon;
}
}

正确的是(只将placeholder写在@media中,extend写在@media外面):

@media screen {
%icon {
transition: background-color ease .2s;
margin: 0 .5em;
}
} .error-icon {
@extend %icon;
} .info-icon {
@extend %icon;
}

4. 自定义函数

@function可以自定义函数,可以在css选择器中直接引用,和mixin十分类似

例如:

@function double($n) {
  @return $n * 2;
} #sidebar {
  width: double(5px);
}

参考:https://blog.csdn.net/kaosini/article/details/40615123

最新文章

  1. 4款最具影响力的自助式BI工具
  2. 解决Java接口内部类的main()方法无法打印输出的问题
  3. input框只允许输入数字 --------20160705
  4. IOS数组NSArray与NSMutableArray知识点
  5. shell中的循环
  6. Python之创建tuple和“可变”的tuple
  7. QUEEN_BLADE_2D-非常屌-113P
  8. 基于zmap 的应用层扫描器 zgrab (一)
  9. Oracle 9 - redo和undo
  10. 《Programming WPF》翻译 第5章 4.元素类型样式
  11. Legal or Not(拓扑排序判环)
  12. Linux iptables原理和使用
  13. Win32汇编学习(8):菜单
  14. javascript函数闭包(closure)
  15. andorid 进度条和图片的透明度
  16. 叉积(POJ - 2318 )
  17. mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么
  18. 下载liteide
  19. Python之反射练习
  20. 风雪之隅(Laruence PHP开发组成员, Zend兼职顾问, Yaf, Yar, Yac, Opcache等项目作者、维护者.)

热门文章

  1. mybati缓存机制之二级缓存配置
  2. Linux命令应用大词典-第19章 文件系统管理
  3. 爬虫2.2-scrapy框架-文件写入
  4. 【QT】宏
  5. 开关灯问题(C++)
  6. kaldi HMM-GMM全部训练脚本分解
  7. C struct中的位域 bitfield
  8. avalonJS入门
  9. var,let,const,三种申明变量的整理
  10. Python—字典(当索引不好用时)