[Sass] Level 3: Mixin -- Ex
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的更多相关文章
- sass揭秘之@mixin,%,@function scss基本使用及操作函数
sass揭秘之@mixin,%,@function: 地址:https://www.w3cplus.com/preprocessor/sass-mixins-function-placeholder. ...
- sass揭秘之@mixin,%,@function
因为文章内含有很多sass代码,如需自己动手查看编译结果,推荐使用sassmeister这款在线编译工具,方便你阅读学习. 在阅读本文章之前,请先确认你已经阅读了上篇文章sass揭秘之变量,不然会给你 ...
- sass揭秘之@mixin,%,@function(转载)
因为文章内含有很多sass代码,如需自己动手查看编译结果,推荐使用sassmeister这款在线编译工具,方便你阅读学习. 在阅读本文章之前,请先确认你已经阅读了上篇文章sass揭秘之变量,不然会给你 ...
- Sass的混合-@mixin,@include
1,无参数,有参数和带默认值参数的@mixin声明sass文件内容: //带参数,默认50@mixin opa($opa:50){ opacity: $opa / 100; filter:alpha( ...
- sass中常用mixin
//设置字体大小 @mixin font($s:14px,$h:1.5,$f:microsoft yahei){ font:$s/#{$h} $f; } //参数(方向,大小,颜色),默认:向下,10 ...
- Sass中的mixin,function,extend
Mixins: 用于相类似的css属性将会被使用多次,每次调用时仅仅有小的参数改变: Function 用于计算得出相关值: Extend 有一批属性完全匹配时,应该使用extend
- [Sass] Level 4: Extend -- Ex
Better use @extend with % placeholder. Extend is useful when you want to reuse some of you class. Al ...
- sass(混合mixin的调用、@content)
sass中使用@mixin声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开,也可以给参数设置默认值.声明的@mixin通过@include来调用 1.无参数mixin scss.styl ...
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
随机推荐
- 大型系统中使用JMS优化技巧–Sun OpenMQ
我们先来看看在Sun OpenMQ系统中 一个持久.可靠的方式传送消息的步骤是怎么样的,如图所示: 查看大图请点击这里 在传送过程中,系统处理JMS消息分为以下两类: ■ 有效负荷消息,由生成方发 ...
- android 数据存储方式
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 1,文件 2,内容提供者 3,偏好设置 4,数据库 5,网络存储. 网络存储,就是上传到 ...
- [CF1053C]Putting Boxes Together(线段树)
http://codeforces.com/blog/entry/62013 两个结论: 1.一定有一个箱子不用动. 2.不动的箱子一定是加权前缀和为S/2的那个. 1显然,2由1易得. 于是问题变为 ...
- BZOJ.3611.[HEOI2014]大工程(虚树 树形DP)
题目链接 要求的和.最大值.最小值好像都可以通过O(n)的树形DP做,总询问点数<=2n. 于是建虚树就可以了.具体DP见DP()函数,维护三个值sum[],mx[],mn[]. sum[]要开 ...
- 【BZOJ】4152: [AMPPZ2014]The Captain【SLF优化Spfa】
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2107 Solved: 820[Submi ...
- bzoj 2244
没有正确分析路径可能的条数,它是指数增长的,会爆long long. 然后就是正反两次时间分治. 另一个就是max with count,即带计数的最值,即除了记录最值,还要记录最值取得的次数. /* ...
- Git_多人协作
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...
- javascript小记-闭包理解
这几天也在看一些javascript的知识,算是对以往的一个复习,现小记一下,方便以后查询. 相信大家在研究javascript的高级特性的时候,肯定会遇到闭包的概念,自己在各种复习资料中,也发现了不 ...
- lanmp安装一(centos+apache+nginx+mysql+php=lanmp地址下载)
背景 centos7 官网地址https://www.centos.org/download/ 下载选择DVD版进入(也就是标准版,系统齐全) 点击任何一个国家的下载链接 下载地址 http://m ...
- 如何使用 sqlite3 访问 Android 手机的数据库
如何设置Android手机的sqlite3命令环境 http://www.cnblogs.com/linjiqin/archive/2011/11/28/2266619.html SQLite3 为a ...