sass 混入 (@mixin 与 @include的使用)

简介: sass 混入 (@mixin 与 @include的使用)

Sass 混入(mixin )


1. 混入的概念

在传统的普通CSS语法中,为了描述某个目标的样式我们需要对我们选择的目标分别描述他们的样式,很多时候我们的工作是重复进行的,因此开发者们一直致力于寻找一个能够尽可能地降低重复率的方式。作为一款优秀的预处理器,Sass提供了这样的功能,它就是混入(mixin)。

Sass/Scss 混入(mixin)类似于JavaScript一个自定义的函数。在JavaScript等编程语言中的函数使我们能够定义一个重复使用某一具有相同功能的代码块,而在Sass中的混入(mixin)则让我们能够定义一个可以在整个样式表中重复使用的样式。

2. 混入的使用

2.1 混入的基本使用

Sass 为我们提供了@mixin指令用于定义混入,就像JavaScript为我们提供了function关键字用于定义函数一样。其语法格式如下:

@mixin minxin-name(param1, param2, ...){
  // your styles...
}

和调用JavaScript函数不一样的是,Sass中的混入在定义后不是仅仅个给出一个混入名就可以了,准确的说这里不叫作调用,而叫做包含。也就是说使用混入指令@mixin定义好的一个混入,要想被包含在另一处位置。实现包含的功能需要使用到另外一个指令,那就是包含指令@include

具体使用以一个例子来说明:

例如:

@mixin mybox-base {
  width: 60px;
  height: 26px;
}
.mybox {
  @include mybox-base;
  color:#1a1a1a;
  background-color:#e4e4e4
}
.mybox-critical {
  @include mybox-base;
  color:#fbff00;
  background-color:#ff3636
}
.mybox-warning {
  @include mybox-base;
  color:#00a09d;
  background-color:#d6da00
}

这里只定义了一个混入,也就是mybox-base,我们在下面三处包含了它。如果你本地安装了sass编译器,可以使用形如sass xxx.sass:xxx.css的命令将它编译成CSS文件,编译后的结果如下:

.mybox {
  width: 60px;
  height: 26px;
  color: #1a1a1a;
  background-color: #e4e4e4; }
.mybox-critical {
  width: 60px;
  height: 26px;
  color: #fbff00;
  background-color: #ff3636; }
.mybox-warning {
  width: 60px;
  height: 26px;
  color: #00a09d;
  background-color: #d6da00; }
/*# sourceMappingURL=test.css.map */

可以看出,@include指令将我们定义的混入中的样式添加到使用包含的位置处了。

2.2 向混入传递变量

2.1节的例子中我们没有使用参数。然而与函数一样的是,sass中的混入也可以使用参数,这些参数可以包含了颜色、像素、数值等等信息。

下面我们给一个传递变量的例子:

// 允许传入字体颜色与背景色两个变量
@mixin mybox-base($font-color, $bg-color) {
  width: 60px;
  height: 26px;
  color: $font-color;
  background-color: $bg-color;
}
.mybox {
  @include mybox-base(#1a1a1a, #e4e4e4);
}
.mybox-critical {
  @include mybox-base(#fbff00, #ff3636);
}
.mybox-warning {
  @include mybox-base(#00a09d, #d6da00);
}

将其编译成CSS后的内容与之前不传参数是一样的:

.mybox {
  width: 60px;
  height: 26px;
  color: #1a1a1a;
  background-color: #e4e4e4; }
.mybox-critical {
  width: 60px;
  height: 26px;
  color: #fbff00;
  background-color: #ff3636; }
.mybox-warning {
  width: 60px;
  height: 26px;
  color: #00a09d;
  background-color: #d6da00; }
/*# sourceMappingURL=test.css.map */

但是从写法上看就比之前更加简洁了,因为我们没有在使用@include指令以包含的位置反复使用css关键字定义字体色和背景色,而是仅仅传入了颜色值。

2.3 使用默认参数

上面我一经向大家介绍了 sass 可以使用参数,这里我还要告诉各位,sass 不仅可以使用参数,而且还可以使用默认参数。在上面的应用案例中mybox类完全就可以使用默认参数而不需要再次传入了,这时我们可以这样去定义混入:

@mixin mybox-base($font-color:#1a1a1a, $bg-color:#e4e4e4) {
  width: 60px;
  height: 26px;
  color: $font-color;
  background-color: $bg-color;
}

对应的,mybox类就不需要再传入参数了:

.mybox {
  @include mybox-base;
}

2.4 使用可变参数

JS函数的可变参数也被借鉴到混入中来。所谓 可变参数指的是再使用前我们不知道传入参数的个数,这时使用... 以表示可以传入任意多个参数。熟悉CSS的读者都知道,当我们指定一些属性值时,不一定需要指定所有的属性,未指定部分可以让系统默认分配。如borderbackground等等。

例如:

@mixin my-box($shadows...) {
  box-shadow: $shadows;
}
.shadow-box {
  @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}

这个混入中一次就传入了多个属性值,然而并不是我们在每次引入该混入时都需要指定同样个数的属性值的。

目录
相关文章
|
小程序
uni-app语音转文字功能demo(小程序同声翻译开箱即用)
uni-app语音转文字功能demo(小程序同声翻译开箱即用)
2153 0
uni-app语音转文字功能demo(小程序同声翻译开箱即用)
Element的el-table行列错位对不齐问题处理
本文目录 1. 问题表现 2. 问题发现 3. 问题处理 4. 另一种处理方案
5260 0
Element的el-table行列错位对不齐问题处理
|
JavaScript 前端开发
JS之url进行编码和解码(三种方式)
JS之url进行编码和解码(三种方式)
19802 2
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
|
数据格式
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
本文介绍了在ElementUI和ElementPlus中使用`el-table`组件实现合并行功能的技巧,包括多列合并和单列合并的方法,并提供了相应的示例代码和运行效果。
9859 1
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
|
12月前
|
JSON 搜索推荐 C++
vscode如何更改背景颜色主题,黑色或白色?
【11月更文挑战第16天】在 VS Code 中更改背景颜色主题,可通过三种方式实现:1) 使用快捷键 Ctrl+K 和 Ctrl+T(Mac 上为 Command+K 和 Command+T)选择主题;2) 通过菜单中的“管理”->“颜色主题”选项选择;3) 修改 settings.json 文件中的 "workbench.colorTheme" 属性。此外,用户还可从扩展市场安装更多主题以满足个性化需求。
24303 6
|
前端开发 JavaScript
基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
本文介绍了如何在Vue3项目中实现一个鼠标拖动调整元素宽度的功能,并展示了点击按钮收起或展开侧边栏的效果,提供了完整的实现代码和操作演示。
1845 0
基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
|
前端开发 JavaScript 搜索推荐
|
编解码 JavaScript
【vue2】vue2 适配pc端,解决浏览器缩放问题,解决电脑显示设置缩放、分辨率问题
【vue2】vue2 适配pc端,解决浏览器缩放问题,解决电脑显示设置缩放、分辨率问题
1820 1