When to use MIXIN?

Better way to use MIXIN is when you deal with browser prefiex, for example:

@mixin transition($val...){
-webkit-transition: $val;
-moz-transition: $val;
transition: $val;
}

Because when you use mixin, actually you just copy the mixin to the another css class, it is not efficent way to wirte css.

But if use it with browser prefix, it can save your typing and you can pass in variable, make it more dynamic.

Notice: $val..., the reason to use ... is because somtime you will passin the value like:

color 0.3s ease-in, background-color 0.5s ease-out

You have , inside, it will casuse problem if you don't give ... after $val.

There is another way to use ...

@mixin button($radius, $color){
border-radius: $radius;
color: $color;
} $props = "4px, #ccc"; .btn-a {
@include button($props...)
}

Sass is smart enought to set $radius to 4px and color to #ccc. But you need to make sure the order is correct.

Default value:

.mtn-select{
@include field-border($top: 'top', $right: 'right', $bottom: '', $left:'left');
@include filed-validation;
@include filed-common;
margin-top: 0px;
& .md-select-icon{
margin-right: 18px;
} }
@mixin field-border($top:top, $right:right, $bottom:bottom, $left:left){
border-#{$top}: 1px solid rgba(0,0,0,0.12) !important;
border-#{$left}: 1px solid rgba(0,0,0,0.12) !important;
border-#{$right}: 1px solid rgba(0,0,0,0.12) !important;
border-#{$bottom}: 1px solid rgba(0,0,0,0.12) !important;
}

INCLUDE

We've identified a set of properties that commonly appear in our stylesheet (sometimes with minor tweaks). Let's streamline the process of using these values by adding the commented lines to a mixin called assemble, then calling that mixin in .factory and.highrise.

// background: #fff;
// border: 1px solid #ccc;
// padding: 10px; @mixin assemble{
background: #fff;
border: 1px solid #ccc;
padding: 10px;
} .factory {
@include assemble
}
.highrise {
@include assemble
}

ARGUMENT

That's a good start, but we need the ability to change the background color. Alter the mixin to take an argument called $bg, which should then be set as the value of the background property. Pass#fff in for .factory and #797979 in for .highrise.

@mixin assemble {
background: #fff;
border: 1px solid #ccc;
padding: 10px;
} .factory {
@include assemble;
}
.highrise {
@include assemble;
}

Answer:

@mixin assemble($bg) {
background: $bg;
border: 1px solid #ccc;
padding: 10px;
} .factory {
@include assemble(#fff);
}
.highrise {
@include assemble(#797979);
}

DEFAULT ARGUMENT

The background color for declarations using assemble will most often be #fff. Add a default value to the $bg argument to reflect this discovery. Note: once the default value is set, remember to update your .factory @include.

@mixin assemble($bg) {
background: $bg;
border: 1px solid #ccc;
padding: 10px;
} .factory {
@include assemble(#fff);
}
.highrise {
@include assemble(#797979);
}

Answer:

@mixin assemble($bg:#fff) {
background: $bg;
border: 1px solid #ccc;
padding: 10px;
} .factory {
@include assemble;
}
.highrise {
@include assemble(#797979);
}

MULTIPLE ARGUMENTS

Some elements also need a nonstandard amount of padding. Create a second argument, $pad, with a default value of 10px.factory uses the default value, but .highrise should have 20pxof padding on all sides.

@mixin assemble($bg: #fff) {
background: $bg;
border: 1px solid #ccc;
padding: 10px;
} .factory {
@include assemble;
}
.highrise {
@include assemble(#797979);
}

Answer:

@mixin assemble($bg: #fff , $pad:10px) {
background: $bg;
border: 1px solid #ccc;
padding: $pad;
} .factory {
@include assemble;
}
.highrise {
@include assemble(#797979, 20px);
}

KEYWORD ARGUMENTS

Given the number of people collaborating on this stylesheet, we should make the mixin call as clear as possible. Add $bg: and $pad: to the .highrise @include arguments, creating keyword arguments.

@mixin assemble($bg: #fff, $pad: 10px) {
background: $bg;
border: 1px solid #ccc;
padding: $pad;
} .factory {
@include assemble;
}
.highrise {
@include assemble(#797979, 20px);
}

Answer:

@mixin assemble($bg: #fff, $pad: 10px) {
background: $bg;
border: 1px solid #ccc;
padding: $pad;
} .factory {
@include assemble;
}
.highrise {
@include assemble($bg: #797979, $pad: 20px);
}

INTERPOLATING ARGUMENTS

A change request just came in: the border should only apply to one side of these elements. Add a required argument $side to the mixin and interpolate that value to the border property (passingleft as $side should create border-left: 1px solid #ccc, for instance). .factory borders should be on the left side, .highrise borders on the right. As a reminder, arguments without default values need to come before arguments with default values.

@mixin assemble($bg: #fff, $pad: 10px) {
background: $bg;
border: 1px solid #ccc;
padding: $pad;
} .factory {
@include assemble;
}
.highrise {
@include assemble($bg: #797979, $pad: 20px);
}

Answer:

@mixin assemble($side, $bg: #fff, $pad: 10px) {
background: $bg;
border-#{$side}: 1px solid #ccc;
padding: $pad;
} .factory {
@include assemble(left);
}
.highrise {
@include assemble(right, $bg: #797979, $pad: 20px);
}

VARIABLE ARGUMENTS

We're attempting to pass a comma-separated box-shadow value into our mixin as an argument, but we keep getting an error about the number of arguments. Alter $shadow to be a variable argument and accept the value below.

@mixin modal($shadow) {
box-shadow: $shadow;
border: 1px solid #ccc;
} .modal {
@include modal(inset 0 0 5px #000, 0 2px 5px #000);
}

Answer:

@mixin modal($shadow...) {
box-shadow: $shadow;
border: 1px solid #ccc;
} .modal {
@include modal(inset 0 0 5px #000, 0 2px 5px #000);
}

[Sass] Level 3: Mixin -- Ex的更多相关文章

  1. sass揭秘之@mixin,%,@function scss基本使用及操作函数

    sass揭秘之@mixin,%,@function: 地址:https://www.w3cplus.com/preprocessor/sass-mixins-function-placeholder. ...

  2. sass揭秘之@mixin,%,@function

    因为文章内含有很多sass代码,如需自己动手查看编译结果,推荐使用sassmeister这款在线编译工具,方便你阅读学习. 在阅读本文章之前,请先确认你已经阅读了上篇文章sass揭秘之变量,不然会给你 ...

  3. sass揭秘之@mixin,%,@function(转载)

    因为文章内含有很多sass代码,如需自己动手查看编译结果,推荐使用sassmeister这款在线编译工具,方便你阅读学习. 在阅读本文章之前,请先确认你已经阅读了上篇文章sass揭秘之变量,不然会给你 ...

  4. Sass的混合-@mixin,@include

    1,无参数,有参数和带默认值参数的@mixin声明sass文件内容: //带参数,默认50@mixin opa($opa:50){ opacity: $opa / 100; filter:alpha( ...

  5. sass中常用mixin

    //设置字体大小 @mixin font($s:14px,$h:1.5,$f:microsoft yahei){ font:$s/#{$h} $f; } //参数(方向,大小,颜色),默认:向下,10 ...

  6. Sass中的mixin,function,extend

    Mixins: 用于相类似的css属性将会被使用多次,每次调用时仅仅有小的参数改变: Function 用于计算得出相关值: Extend 有一批属性完全匹配时,应该使用extend

  7. [Sass] Level 4: Extend -- Ex

    Better use @extend with % placeholder. Extend is useful when you want to reuse some of you class. Al ...

  8. sass(混合mixin的调用、@content)

    sass中使用@mixin声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开,也可以给参数设置默认值.声明的@mixin通过@include来调用 1.无参数mixin scss.styl ...

  9. CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

随机推荐

  1. TCP的三次握手与四次释放

    TCP的三次握手与四次释放 一.名词解释     序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给 ...

  2. springboot配置多数据源mongodb

    参考大佬的文章 https://juejin.im/entry/5ab304dd51882555825241b3

  3. HDU.2899.Strange fuction(牛顿迭代)

    题目链接 \(Description\) 求函数\(F(x)=6\times x^7+8\times x^6+7\times x^3+5\times x^2-y\times x\)在\(x\in \l ...

  4. hdu 4462 第37届ACM/ICPC 杭州赛区 J题

    题意:有一块n*n的田,田上有一些点可以放置稻草人,再给出一些稻草人,每个稻草人有其覆盖的距离ri,距离为曼哈顿距离,求要覆盖到所有的格子最少需要放置几个稻草人 由于稻草人数量很少,所以状态压缩枚举, ...

  5. 【洛谷】4310: 绝世好题【二进制DP】

    P4310 绝世好题 题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入输出格式 输入格式: 输入文件共2行 ...

  6. Python 学习笔记一

    前言 这篇博客是在学习某个网站时记录下来的,所以其纪录的顺序和那个网站里面一样,有些知识点已经大概了解了就不再赘述. 基础 字符串和编码 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或 ...

  7. python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用

    xml.etree.ElementTree模块实现了一个简单而有效的用户解析和创建XML数据的API. 在python3.3版本中,该模块进行了一些修改: xml.etree.cElementTree ...

  8. [置顶] Spring的自动装配

    采用构造函数注入,以及setter方法注入都需要写大量的XML配置文件,这时可以采用另一种方式,就是自动装,由Spring来给我们自动装配我们的Bean. Spring提供了四种自动装配类型 1:By ...

  9. iOS学习之WebView的使用 (主要是下面的全屏半透明实现)

    1.使用UIWebView加载网页 运行XCode 4.3,新建一个Single View Application,命名为WebViewDemo. 2.加载WebView 在ViewControlle ...

  10. html圆形头像的制作

    <html> <head><title>圆形头像的制作</title> <style type="text/css">. ...