SCSS随笔-mixin与@extend

简介: SCSS随笔-mixin与@extend

变量

定义变量

$color-white: white;

使用变量

body {
    background-color: $color-white;
}

@mixin 与 @include

定义mixin

/*声明mixins*/
@mixins border {
    border: 1px solid #red;
}

使用mixin

/*使用mixins*/
.my-div {
    @include border;
}

向mixin传递变量

混入可以接收参数。

我们可以向混入传递变量。

定义可以接收参数的混入:

/* 混入接收两个参数 */
@mixin bordered($color, $width) {
  border: $width solid $color;
}
.myArticle {
  @include bordered(blue, 1px);  // 调用混入,并传递两个参数
}
.myNotes {
  @include bordered(red, 2px); // 调用混入,并传递两个参数
}

以上实例的混入参数为设置边框的属性 (color 和 width) 。

将以上代码转换为 CSS 代码,如下所示:

.myArticle {
  border: 1px solid blue;
}
.myNotes {
  border: 2px solid red;
}

可变参数

有时,不能确定一个混入(mixin)或者一个函数(function)使用多少个参数,这时我们就可以使用 ... 来设置可变参数。

例如,用于创建盒子阴影(box-shadow)的一个混入(mixin)可以采取任何数量的 box-shadow 作为参数。

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

编译后的css代码

.shadows {
  -moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
  -webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
  box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
}

@extend 与 继承

@extend 指令告诉 Sass 一个选择器的样式从另一选择器继承。

如果一个样式与另外一个样式几乎相同,只有少量的区别,则使用 @extend 就显得很有用。

.button-basic  {
  border: none;
  padding: 15px 30px;
  text-align: center;
  font-size: 16px;
  cursor: pointer;
}
.button-report  {
  @extend .button-basic;
  background-color: red;
}
.button-submit  {
  @extend .button-basic;
  background-color: green;
  color: white;
}

编译后的css代码

.button-basic, .button-report, .button-submit {
  border: none;
  padding: 15px 30px;
  text-align: center;
  font-size: 16px;
  cursor: pointer;
}
.button-report  {
  background-color: red;
}
.button-submit  {
  background-color: green;
  color: white;
}

使用 @extend 后,我们在 HTML 按钮标签中就不需要指定多个类 class="button-basic button-report" ,只需要设置 class="button-report" 类就好了。

@extend 很好的体现了代码的复用。


相关文章
|
4月前
|
JavaScript
Vue中的mixins和extend的区别是什么?
Vue中的mixins和extend的区别是什么?
41 0
|
4月前
|
JavaScript 开发者
vue 中 mixin 和 mixins 区别
vue 中 mixin 和 mixins 区别
40 0
|
2月前
|
JavaScript 前端开发
Vue.js 高级技巧:深入理解 Vue.extend 方法
Vue.js 高级技巧:深入理解 Vue.extend 方法
|
3月前
|
JavaScript
Vue中的mixin和extend有什么区别?
Vue中的mixin和extend有什么区别?
35 0
|
4月前
|
JavaScript 小程序 前端开发
vue中的mixins混入使用方法
vue中的mixins混入使用方法
|
5月前
|
JavaScript 前端开发
【Vue & JavaScript & Css】Multiple class name duplication problem(js/jq原生导致多个类名重复问题)
【Vue & JavaScript & Css】Multiple class name duplication problem(js/jq原生导致多个类名重复问题)
|
10月前
|
JavaScript 前端开发 编译器
vue 代码高亮 prismjs 或 highlight.js插件的用法
vue 代码高亮 prismjs 或 highlight.js插件的用法
369 0
|
5月前
|
计算机视觉
vue3<script setup>瀑布流写法
vue3<script setup>瀑布流写法
48 0
|
5月前
【Vue2.0】—mixin混入 (十五)
【Vue2.0】—mixin混入 (十五)
|
7月前
|
JavaScript 前端开发
使用vue3+TypeScript手动封装tabs组件
使用vue3+TypeScript手动封装tabs组件
89 0