@mixin
@mixin指令允许您定义可以在整个样式表中重复使用的样式,而避免了使用无语意的类(class),混入(@mixin)还可以包含所有的 CSS 规则,以及任何其他在 Sass 文档中被允许使用的东西,甚至可以携带 arguments,引入变量等,这就意味着只需少量的混入(@mixin)代码就能输出多样化且不重复的样式。
@mixin的使用及用法
@mixin 指令允许我们定义一个可以在整个样式表中重复使用的样式。
@include 指令可以将混入(mixin)引入到文档中。
定义一个混入
混入(mixin)通过 @mixin 指令来定义。 @mixin name { property: value; property: value; … }
以下实例创建一个名为 “important-text” 的混入:
Sass 代码
@mixin important-text {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
}
注意:Sass 的连接符号 - 与下划线符号 _ 是相同的,也就是 @mixin important-text { } 与 @mixin important_text { } 是一样的混入。
使用混入
@include 指令可用于包含一混入:
Sass @include 混入语法:
selector {
@include @include @mixin名字(important-text);
}
使用方法如下
.danger {
@include important-text;
background-color: green;
}
将上面的代码转换成css就是
.danger {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
background-color: green;
}
而且混入代码中也可以包含混入代码
.danger {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
background-color: green;
}
再往下学会发现@mixin会想函数一样接收变量,如下
/* 混入接收两个参数 */
@mixin bordered($color, $width) {
border: $width solid $color;//注意solid是实线是固定值不是变量$color, $width这两个才是变量
}
.myArticle {
@include bordered(blue, 1px); // 调用混入,并传递两个参数
}
.myNotes {
@include bordered(red, 2px); // 调用混入,并传递两个参数
}
上面代码转换后就是
.myArticle {
border: 1px solid blue;
}
.myNotes {
border: 2px solid red;
}
那么既然@mixin可以想函数一样接收变量那么是不是一样可以设置默认值呢?
@mixin bordered($color: blue, $width: 1px) {
border: $width solid $color;
}
在包含混入时,你只需要传递需要的变量名及其值:
@mixin sexy-border($color, $width: 1in) {
border: {
color: $color;
width: $width;
style: dashed;
}
}
p { @include sexy-border(blue); }
h1 { @include sexy-border(blue, 2in); }
将代码转换后得到
p {
border-color: blue;
border-width: 1in;
border-style: dashed; }
h1 {
border-color: blue;
border-width: 2in;
border-style: dashed;
}
g更神奇的是有时,不能确定一个混入(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);
}
老规矩转换
.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;
}
浏览器前缀使用混入
浏览器前缀使用混入也是非常方便的,如下实例:
@mixin transform($property) {
-webkit-transform: $property;
-ms-transform: $property;
transform: $property;
}
.myBox {
@include transform(rotate(20deg));
}
转
在这里插入代码片
.myBox {
-webkit-transform: rotate(20deg);
-ms-transform: rotate(20deg);
transform: rotate(20deg);
}