Sass 带参混合

Stella981
• 阅读 735

本节我们来学习带参混合,Sass 中混合可以接受参数,我们可以通过使用 @include 调用混合时给混合传参,来定义混合生成的精确样式。

给混合传参

混合可以用 SassScript 值作为参数,给定的参数被包括在混合中并且作为为变量提供给混合,既然是作为变量,那么定义参数时,参数名前面需要加一个 $ 符号。

当我们定义一个带参混合时,混合的参数被作为变量名,写到混合名后面的小括号中,如果带有多个参数则通过逗号将参数分隔。下面我们来看一下如何给一个混合传参。

示例:

例如在混合中定义两个参数 $num$color

@mixin my-text($num, $color) {
    font-size: $num;
    color: $color;
    font-weight: bold;
}

.other{
    @include my_text(14px, #fdef92);
}

编译成 CSS 代码:

.other {
  font-size: 14px;
  color: #fdef92;
  font-weight: bold;
}

我们在通过 @include 指令调用混合时,需要给混合所带的参数赋值,例如上述代码中,给参数 $num 赋值为 14px,给参数 $color 赋值为 #fdef92

默认值参数

像上面这个例子中,定义混合时带有两个参数,那么调用混合时必须给这个两个参数赋值,如果不给参数赋值或者只给一个参数赋值则会报错。例如下面是不给 $num 参数赋值的报错信息:

Error: Mixin my-text is missing argument $num.
        on line 8 of style.scss, in `my_text'
        from line 8 of style.scss
  Use --trace for backtrace.

而如果我们希望可以不给混合中的某个参数传参,可以在定义混合时使用普通变量的赋值语法为参数指定默认值,这样当调用混合时,如果不给参数赋值,则会使用默认值代替。

示例:

例如下面这个例子:

@mixin my-text($num, $color:pink) {
    font-size: $num;
    color: $color;
    font-weight: bold;
}

.other{
    @include my_text(14px);
}

编译成 CSS 代码:

.other {
  font-size: 14px;
  color: pink;
  font-weight: bold;
}

我们在定义混合时,给参数 $color 指定了默认值 pink,所以当我们没有给 $color 赋值时,会自动使用定义好的默认值。

关键字参数

混合中除了可以使用上面讲到的默认值参数,还可以使用关键字参数,关键字参数就是通过 $name:value 形式传参。使用这种方式来传参,参数的顺序并不重要,只要不漏掉参数就可以啦。

示例:
@mixin my-text($num, $color) {
    font-size: $num;
    color: $color;
    font-weight: bold;
}

.other{
    @include my_text($color:#000, $num:16px);
}

编译成 CSS 代码:

.other {
  font-size: 16px;
  color: #000;
  font-weight: bold;
}

可变参数

当我们给混合定义参数时,有时可能不确定混合中参数的数量,这时我们就可以使用 ... 来设置可变参数。

示例:

例如我们给一个元素设置 box-shadow 时,可以使用任何数量的 box-shadow 作为参数:

@mixin my-text($shadow...) {
    box-shadow: $shadow;
}

.other{
    @include my_text(2px 5px 10px #ccc, 3px 6px 9px #aaa);
}

编译成 CSS 代码:

.other {
  box-shadow: 2px 5px 10px #ccc, 3px 6px 9px #aaa;
}

可以看到,上述代码中,在调用混合时,给 my_text 指定了两个参数的值。当然我们也可以给它指定多个参数的值。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Sass之混合宏、继承、占位符
  1、混合宏。    当样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无法达到我们目的了。这个时候混合宏就派上用场了。  而使用混合宏时,首先要声明混合宏,而声明混合宏时有两种,不带参数混合宏和带参数混合宏两种。  1.1不带参数混合宏的声明要使用关键词@mixin。例如:  @mixinborderradi
Easter79 Easter79
3年前
SpringBoot2 学习10 Controller接收参数的方式
地址传值@PathVariable获取路径参数。即url/{id}这种形式。?传值@RequestParam获取查询参数。即url?name这种形式用注解@RequestParam绑定请求参数到方法入参当请求参数username不存在时会有异常发生,可以通过设置属性requiredfalse解决,例如:@R
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这