Copy/pasting the same code is redundant and updating copy/pasted code slows development velocity. Mixins are reusable chunks of code that are included, similar to calling a function, instead of copy/pasted.

Mixins have some nice features:
- Arguments just like functions.
- Arguments can have default values and optional values.
- Named arguments allow us to use optional and default arguments when the mixin is included.
- Variable arguments allow us to have a dynamic number of arguments when the mixin is included.
- The @content directive allow us to add additional styles when the mixin is included.

In this lesson we learn how to DRY up the code with the SCSS @mixin directive and make copy/paste a thing of the past.

Define a mixin:

@mixin make-character($base-color: #a83b24, $mix-color: #fffaa6, $border: null) {

Here as you can see, we use named parameters. The benifits when we use named parameters is:

  1. we can pass default value: '$base-color: #a83b24'
  2. we can use optional parameter: '$border: null'
  3. when we use mixin, the parameters order doesn't matter
@include make-character($border: 5px solid brown, $mix-color: pink)

If you don't know how many paramter the mixin will take, you can do:

@mixin make-transitions($transitions...) { transition: $transitions; }

It can take as many as paramters you pass in:

@include make-transitions(margin 1s, border-radius 1s, border 1s, transform 1s);

@content directive

@content directive refers to whatever you pass in when you using mixin:

.wolverine {
@include make-character($border: 5px solid brown, $mix-color: pink) {
@include make-transitions(margin 1s, border-radius 1s, border 1s, transform 1s); &:hover {
margin-top: 5rem;
border-radius: %;
border: 10px solid green;
transform: rotate3d(, , , 360deg);
}
};
}

So now, @content referts to all the highlighted part.

@mixin make-character($base-color: #a83b24, $mix-color: #fffaa6, $border: null) {
$light-color: lighten($base-color, %);
$dark-color: darken($base-color, %);
$cbc: complement($base-color);
$clc: complement($light-color);
$cdc: complement($dark-color); background-image: linear-gradient($light-color, $base-color, $dark-color);
border: $border; &:hover { background-image: linear-gradient($clc, $cbc, $cdc); }
&:hover &-text { color: transparentize(mix($base-color, $mix-color, %), .); } &-text {
color: mix($base-color, $mix-color, %);
} img { @content; }
}

In this context, 'img' will get all the highlighted styles.


.character {
text-align: center;
width: 15rem;
display: inline-block;
margin: 0.5rem; p {
font-size: 1.5rem;
padding-bottom: 0.5rem;
} img {
margin-top: 1rem;
border-radius: 25%;
}
} @mixin make-transitions($transitions...) { transition: $transitions; } @mixin make-character($base-color: #a83b24, $mix-color: #fffaa6, $border: null) {
$light-color: lighten($base-color, 20%);
$dark-color: darken($base-color, 35%);
$cbc: complement($base-color);
$clc: complement($light-color);
$cdc: complement($dark-color); background-image: linear-gradient($light-color, $base-color, $dark-color);
border: $border; &:hover { background-image: linear-gradient($clc, $cbc, $cdc); }
&:hover &-text { color: transparentize(mix($base-color, $mix-color, 25%), .2); } &-text {
color: mix($base-color, $mix-color, 75%);
} img { @content; }
} @mixin media($min-width) {
@media screen and (min-width: $min-width) { @content; }
} .wolverine {
@include make-character($border: 5px solid brown, $mix-color: pink) {
@include make-transitions(margin 1s, border-radius 1s, border 1s, transform 1s); &:hover {
margin-top: 5rem;
border-radius: 50%;
border: 10px solid green;
transform: rotate3d(10, 0, 0, 360deg);
}
};
} .rogue { @include make-character(#0ab36d, #FFFE8A, 5px solid green); }
.firestar { @include make-character(#DB233B, #e3fd00); } .nightcrawler {
@include make-character(#1d6098, #ffcef9) {
@include media(800px) { content: url("../images/bamf.jpg"); }
};
}

Github

[SCSS] Reuse Styles with the SCSS @mixin Directive的更多相关文章

  1. [SCSS] Reuse Styles with the SCSS @extend Directive

    We can write reusable styles with the SCSS @extend or @mixin directives. Which one is better? It dep ...

  2. 在vue-cli中如何安装scss,并全局引入scss

    在vue-cli脚手架采用scss正确的使用姿势 步骤一: 安装node-sass.sass-loader.style-loader npm install node-sass --save-dev ...

  3. [Scss Flex] Reuse Flexbox Styles With A Sass Mixin

    This lesson covers flexbox in a reusable mixin that should cover most layout situations on your site ...

  4. [SCSS] Organize Styles with SCSS Nesting and the Parent Selector

    SCSS nesting can produce DRYer code by targeting child elements without having to write the parent c ...

  5. error app/styles/components/iconfont.scss (Line 12: Invalid GBK character "\xE5")

    因为要用到iconfont,引入iconfont到sass文件后,出现编译sass文件错误,如下截图: 解决方法:在顶部设置编码格式 @charset "utf-8"; 编译成功!

  6. 在vue项目中使用scss,以及vscode适配scss语法(解决使用scss语法编辑器报错)

    项目搭建好之后 安装sass 依赖包 npm install --save-dev sass-loader //sass-loader依赖于node-sass npm install --save-d ...

  7. dvaJs使用注意事项

    项目参考地址 dva-yicha 1. 使用路由跳转的方式 (1)所有的路由跳转功能都放到 dva/router 里面的 import { routerRedux } from 'dva/router ...

  8. css预编译语言 sass scss(变量$var, css嵌套规则,@import规则,@extend,@mixin)

    什么是sass Sass 是对 CSS 的扩展,让 CSS 语言更强大.优雅. 它允许你使用变量.嵌套规则. mixins.导入等众多功能, 并且完全兼容 CSS 语法. Sass 有助于保持大型样式 ...

  9. Scss开发临时学习过程

    SCSS语法: 假设变量申明带有!default,那么如果在此申明之前没有这个变量的申明,则用这个值,反之如果之前有申明,则用申明的值. ‘...’传递多个参数: @mixin box-shadow( ...

随机推荐

  1. Java学习笔记三.3

    9.异常处理:Java中的异常处理对象就是将以前的if语句进行的判断进行抽象化,并形成的一套错误处理体系.最顶端是Throwable,接着是Error,Exception,其中Exception又明显 ...

  2. 图文具体解释 IntelliJ IDEA 15 创建 Maven 构建的 Java Web 项目(使用 Jetty 容器)

    图文具体解释 IntelliJ IDEA 15 创建 maven 的 Web 项目 搭建 maven 项目结构 1.使用 IntelliJ IDEA 15 新建一个项目. 2.设置 GAV 坐标 3. ...

  3. iOS Threading编程指南 官方文档翻译第一篇(序言)

    序言   Thread是能够使多个code paths 在同一个APP内并发运行的几种技术之一.虽然新的技术为并发运行提供了先进.高效的工具(例如operation 对象和GCD),但是OS X和iO ...

  4. 2. Spring Boot Controller

    转自:https://blog.csdn.net/catoop/article/details/50501676

  5. 洛谷——P1601 A+B Problem(高精)

    https://www.luogu.org/problem/show?pid=1601#sub 题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑 ...

  6. SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例

    SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例 这是一个简单的SpringBoot整合实例 这里是项目的结构目录 首先是pom.xml ...

  7. Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)

    前言 上篇博客我们说到了今日头条频道管理的操作交互体验,我也介绍了2个GridView之间Item的相互移动.详情请參考:Android 仿今日头条频道管理(上)(GridView之间Item的移动和 ...

  8. 发布一个stl标准库容器类(vector/list)的安全删除方法

    话不多说,看代码. #include <functional> #ifndef ASSERT #include <cassert> #define ASSERT assert ...

  9. Diskpart工具应用两则:MBR/GPT分区转换 &amp; 基本/动态磁盘转换

    将基本磁盘转换为动态磁盘可直接在操作系统的磁盘管理中完毕,如图1所看到的,这一转换过程对硬盘上的数据没有影响,可是可能会影响到系统的启动(盗版系统激活会受影响). 图1:基本磁盘转换为动态磁盘 要注意 ...

  10. static 静态

    摘自:https://blog.csdn.net/Kendiv/article/details/675941 关于static的  ""记忆性"" 我们可以用做 ...