sass基础语法-Mixin混合器,%placeholder占位符继承之间的区别

1.背景

如果你的网站中有几处样式相同的话,比如一些颜色和字体,那么可以使用变量来处理这个问题.但是当你的样式越来越多,需要复用大段的样式,独立变量就显得有点吃力了,这时候你可以通过sass中的混合器来进行复用(当然也可以用占位符或者继承,下面会讨论这三者之间的区别).

2.混合器@mixin

特点:可传参
缺点:如果在样式文件中调用同一个混合宏,会产生多个对应的样式代码,造成代码的冗余.

不传参数使用方法:

@mixin cont{
    color: red;
    font-size: 14px;
}
调用:

body{
    @include cont;
}
这个看上去好像跟占位符的用法一样,是的,两者几乎没有很大区别,唯一不同的是当一个页面中多次调用的话,@mixin不会将样式相同的代码进行合并,而使用占位符多次调用的话则会处理这个问题.下面先进行代码演示这个问题的存在,再来接着讨论@mixin混合器.


scss:

@mixin my-color{
    color: red;
}
.div1{
    @include my-color;
}

.div2{
    @include my-color;
}
生成之后的css:

/* line 5, ../sass/mixin2.scss */
.div1 {
  color: red;
}

/* line 9, ../sass/mixin2.scss */
.div2 {
  color: red;
}
但是我想要的结果是这样的:

/* line 13, ../sass/mixin2.scss */
.div1, .div2 {
  color: green;
}
而使用占位符后:

%my-color{
    color: green;
}

.div3{
    @extend %my-color;
}

.div4{
    @extend %my-color;
}
生成代码:

/* line 13, ../sass/mixin2.scss */
.div3, .div4 {
  color: green;
}
相比之下显然是这个代码比较友好一点.
混合器@mixin好处在于它能够传参数进行操作...

多值参数:

调用时可不传参数,则使用默认值,也可直接传入值,如@include传入参数的个数小于@mixin定义参数的个数,则按照顺序表示,后面不足的使用默认值,如不足的没有默认值则报错。除此之外还可以选择性的传入参数,使用参数名与值同时传入。

@mixin cont($color:red,$fontSize:14px){
    color: $color;
    font-size: $fontSize;
}

body{
    @include cont();
}
生成代码:

/* line 8, ../sass/mixin.scss */
body {
  color: red;
  font-size: 14px;
}


多组参数:
如果一个参数可以有多组值,如box-shadow、transition等,那么参数则需要在变量后加三个点表示,如$variables...。
scss:

@mixin box-shadow($shadow...) {
  -webkit-box-shadow:$shadow;
  box-shadow:$shadow;
}
.box{
  border:1px solid #ccc;
  @include box-shadow(0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3));
}
css:

.box {
  border: 1px solid #ccc;
  -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3), 0 3px 3px rgba(0, 0, 0, 0.3), 0 4px 4px rgba(0, 0, 0, 0.3);
  box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3), 0 3px 3px rgba(0, 0, 0, 0.3), 0 4px 4px rgba(0, 0, 0, 0.3);
}

如果不写这三个点,就会报错:混合器只带一个参数,却传入了3个参数

以上小结:当大量复用样式中需要使用到变量的时候可以使用混合器@mixin进行重写,例如圆角的兼容性,处理浏览器前缀等问题,否则使用继承@extend进行重写.如有不足,希望大神可以留言指点一丢丢,有问题也可以一起讨论.


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值