一个SCSS里mixin的使用例子

举报
汪子熙 发表于 2021/09/27 11:29:08 2021/09/27
【摘要】 Mixins are the Sass equivalent of macros in other programming languages. If you’ve programmed before you could think of them as functions, procedures, or methods, but they aren’t technically any of...

Mixins are the Sass equivalent of macros in other programming languages. If you’ve programmed before you could think of them as functions, procedures, or methods, but they aren’t technically any of these concepts because their function is to generate code at compile time not execute code at run time.

可以把mixins当成编程语言里的宏,但是技术上说,scss mixins用于在编译器生成代码,而不是在运行时执行代码。

一个例子:

a.button {
  background: black;
  color: white;
  padding: 10px 20px;
  @include border-radius(5px);
}

编译之后:

a.button {
  background: black;
  color: white;
  padding: 10px 20px;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  -khtml-border-radius: 5px;
  border-radius: 5px;
}

I used the @include directive to tell Sass that I wanted to call out to a mixin.
使用@include指令,告诉sass,需要在css里call out mixin. 通过括号传递参数。

看下border-radius的实现代码:

@mixin border-radius($radius) {
  -moz-border-radius: $radius;
  -webkit-border-radius: $radius;
  -ms-border-radius: $radius;
  border-radius: $radius;
}

一个mixin传递默认参数的做法:

@mixin border-radius($radius: 5px) {
  ...
}

或者定义一个全局变量:

$default-border-radius: 5px !default;
@mixin border-radius($radius: $default-border-radius) {
 ...
}

scss mixin里还支持条件指令@if:

@mixin border-radius($radius: 5px, $moz: true, $webkit: true, $ms: true) {
  @if $moz    { -moz-border-radius:    $radius; }
  @if $webkit { -webkit-border-radius: $radius; }
  @if $ms     { -ms-border-radius:     $radius; }
  border-radius: $radius;
}

上面的用法叫做keyword argument.

这样,如果项目里我们不考虑对IE的支持,只需要下面这样写就行了:

@include border-radius($ms: false);

而不用这种繁琐的写法:

@include border-radius(5px, true, true, true);

也不需要按照顺序传递参数:

@include border-radius($ms: false, $radius: 10px);
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。