美文网首页
SCSS笔记5 - 混合器(混合宏)

SCSS笔记5 - 混合器(混合宏)

作者: microkof | 来源:发表于2016-10-14 14:55 被阅读170次

混合器@mixin和@include用于规则的复用

两者搭配使用,用于规则的复用。@mixin horizontal-list定义一个混合器,类似定义变量,只不过它对应的不是属性值,而是任意代码段,可以是一个(或多个!)规则,也可以只是一条、几条声明,还可以是声明跟规则的混合体,非常灵活。@include horizontal-list命令就是引用这个代码段,等于把@mixin horizontal-list内的全部代码复制到了这里。

@mixin horizontal-list {
  li {
    float: left;
    margin-right: 10px;
  }
}
#header ul.nav {
  @include horizontal-list;
  float: right;
}
#footer ul.nav {
  @include horizontal-list;
  margin-top: 1em;
}

何时使用混合器?

利用混合器,可以很容易地在样式表的不同地方共享样式。如果你发现自己在不停地重复一段样式,那就应该把这段样式构造成优良的混合器,尤其是这段样式本身就是一个逻辑单元,比如说是一组放在一起有意义的属性。判断一组属性是否应该组合成一个混合器,一条经验法则就是你能否为这个混合器想出一个好的名字。如果你能找到一个很好的短名字来描述这些属性修饰的样式,比如rounded-corners、fancy-font或者no-bullets,那么往往能够构造一个合适的混合器。如果你找不到,这时候构造一个混合器可能并不合适。

混合器在某些方面跟CSS的类(class)很像,都是让你给一大段样式命名,所以在选择使用哪个的时候可能会产生疑惑。最重要的区别就是类名是在HTML文件中应用的,而混合器是在scss中应用的。这就意味着类名具有语义化含义,而不仅仅是一种展示性的描述:类用来描述HTML元素的含义而不是HTML元素的外观。而另一方面,混合器是展示性的描述,用来描述一条CSS规则应用之后会产生怎样的效果。类名可以用诸如danger、warning这种有语义的名称,混合器可以用外观描述性的词,比如rounded-corners是圆角的意思,line-height-1.5表示1.5倍的行高。

进阶:预设了参数的@mixin

@mixin horizontal-list($spacing: 10px, $dangercolor) {
  li {
    float: left;
    margin-right: $spacing;
    color: $dangercolor;
  }
}
#header ul.nav {
  @include horizontal-list(15px, #ff0000);
  float: right;
}
#footer ul.nav {
  @include horizontal-list(20px, $dangercolor: red);
  margin-top: 1em;
}

在代码块的名字horizontal-list的后面加上($spacing: 10px),$spacing是参数变量名,10px是初始值,然后在代码块使用$spacing,这样,当有@include horizontal-list,复制来的margin-right: $spacing就是margin-right: 10px,如果更改了变量的值,比如@include horizontal-list(20px),那么等同于margin-right: 20px

如果你觉得@include horizontal-list(15px, #ff0000);中的15px, #ff0000不够直观,总要去找20px对应的是什么变量,那么你还可以用更直观的方式:@include horizontal-list(20px, $dangercolor: red);

可以给混合器(还有参数)传入变量、列表(即数组)、映射(即对象),混合器(和函数)会自动将这些转换为参数列表。

问题一,@mixin+@include跟变量$有什么区别?

相同点:
都要起个名字,这个名字都是只在scss环境有效,HTML中无效。

不同点:
变量$只指代一个属性值,或者属性值的一部分,比如20px、100%、red、1px solid yellow等。
@mixin指代任意代码段,比变量厉害得多。

问题二,@mixin+@include跟变量@import有什么区别?

相同点:
都是忠实的把代码段贴入命令所在位置。

不同点:
@import只能引入文件,后面只能跟文件名,需要你先有一个文件;
@include只能引入代码段,需要你先用@mixin定义一个代码段。

相关文章

  • SCSS笔记5 - 混合器(混合宏)

    混合器@mixin和@include用于规则的复用 两者搭配使用,用于规则的复用。@mixin horizonta...

  • Scss

    尝试使用Scss,会让你工作效率更高,代码更易管理Scss 有三大特性:嵌套 混合器 变量 变量 规范变量命名 ...

  • sass

    sass笔记 1.对于sass中的&符号,指的就是解开sass嵌套规则,使&代替父元素 例如 2.混合器; 混合器...

  • Sass混合器

    混合器的一个很好的用法是用于供应商前缀创建混合器:@mixin someName {}使用混合器:@include...

  • sass学习6——混合器

    sass混合器用来实现大段样式的重用,用@mixin标识符定义。 通过@include来使用混合器。@includ...

  • 管式静态混合器

    管式静态混合器一般为三节组成(也可根据混合介质的性能增加节数)。每节混合器有一个180°扭曲的固定螺旋叶片,分左旋...

  • Biped学习记录5(混合器模式)

    这一节学习混合器模式,混合器模式 和 “动作流模式”一样,只有当这个模式启用的时候,所做的动作才会有效,一单关闭,...

  • Android:显示系统总结

    显示系统 Hardware Composer是什么? 硬件图层混合器,把不同的view layer混合起来。参考:...

  • 泥浆混合器

    泥浆混合器是与石油钻井固控设备配套使用的一种设备,主要用于配置和加重钻井液,改变钻井液的密度、粘度、失水等,与剪切...

  • Artistic艺术效果

    官方文档 Artistic艺术效果 Adjustments——调节 Channel Mixer——通道混合器 Co...

网友评论

      本文标题:SCSS笔记5 - 混合器(混合宏)

      本文链接:https://www.haomeiwen.com/subject/thogyttx.html