# 一、流程控制
# 1、@if 指令
示例:根据 $theme 的值,我们设置了不同的背景颜色和文本颜色
# 2、@for 指令
-@for
指令常常与 Scss 的 字符串插值语法 一起使用
# 3、@each 指令
示例:通过 @each 循环为不同的字体大小生成样式
# 4、@while 指令
示例:使用 @while 指令来生成一系列带有逐渐增加透明度的背景颜色
# 二、Scss 运算
Sass 语法支持基本的运算符(例如:and、or、not
;==、!=、<、>、<=、>=
;+、-、*、/、%
;
并且通常情况下,一般是数字与带单位的数据进行运算
%
百分号单位和其他单位(px、pt
等等)无法一起参与运算- 出现两个相同的
%、px
单位等等之间的运算是不被允许进行乘法运算的 /
除法运算间最好加上()
,不然可能会被认为它仅仅是一个分隔符
# 1、算术运算
在 Scss 中可以直接编写算术表达式,不用像 css 那样还要使用 calc()
函数包裹
div {
margin-left: 5px + 8px / 2;
}
# 2、支持变量
$width: 100px;
$padding: 10px;
.element {
width: $width + $padding; // 110px
margin-right: $width - $padding; // 90px
}
# 3、支持括号
$container-width: 960px;
$column-width: 200px;
.column {
width: ($column-width / $container-width) * 100%; // 20.83%
}
# 4、支持函数
div {
z-index: round(10) / 2;
}
# 拓展:自定义函数 ✨
# 三、Scss 函数
官方文档:
# 1、Color 颜色函数
sass 包含很多操作颜色。例如:
① 增加、降低$color 的 HSL 亮度
让颜色变暗,通常使用 color.scale()替代方案。
lighten($color, $amount) //=> color
darken($color, $amount) //=> color
- 使用
@debug lighten(#6b717f, 20%); // #a1a5af(Lightness 46% becomes 66%)
@debug lighten(#036, 60%); // #99ccff(Lightness 20% becomes 80%)
@debug lighten(#e1d7d2, 30%); // white(Lightness 85% becomes 100%)
@debug darken(#b37399, 20%); // #7c4465(Lightness 92% becomes 72%)
@debug darken(#f2ece4, 40%); // #b08b5a(Lightness 85% becomes 45%)
@debug darken(#036, 30%); // black(ightness 20% becomes 0%)
② 减少颜色透明度
降低颜色透明度,通常使用 color.scale()替代方案。
opacify($color, $amount)
fade-in($color, $amount) //=> color
- 使用
@debug opacify(rgba(#6b717f, 0.5), 0.2); // rgba(107, 113, 127, 0.7)
@debug fade-in(rgba(#e1d7d2, 0.5), 0.4); // rgba(225, 215, 210, 0.9)
@debug opacify(rgba(#036, 0.7), 0.3); // #036
③ 颜色混合
color.mix($color1, $color2, $weight: 50%)
mix($color1, $color2, $weight: 50%) //=> color
- 使用
@debug color.mix(#036, #d2e1dd); // #698aa2
@debug color.mix(#036, #d2e1dd, 75%); // #355f84
@debug color.mix(#036, #d2e1dd, 25%); // #9eb6bf
@debug color.mix(rgba(242, 236, 228, 0.5), #6b717f); // rgba(141, 144, 152, 0.75)
# 2、String 字符串函数
p {
&:after {
content: quote(内容); // 将内容转换为字符串
}
background-color: unquote($string: '#F00'); // 将"#F00"转换为 #F00
z-index: str-length('12345678'); // 得到内容的长度
}
# 3、Math 数值函数
p {
z-index: abs($number: -15); // 15
z-index: ceil(5.8); // 6
z-index: max(5, 1, 6, 8, 3); // 8
opacity: random(); // 随机 0-1
}
# 4、List 函数
p {
z-index: lenght(12px); // 1
z-index: length(12px 5px 8px); // 3
z-index: index(a b c d, c); // 3
padding: append(10px 20px, 30px); // 10px 20px 30px
color: nth($list: red blue green, $n: 2); // blue 🍗
}
# 5、Map 函数
$font-size: (
'small': 12px,
'normal': 18px,
'large': 24px
);
$padding: (
top: 10px,
right: 20px,
bottom: 10px,
left: 30px
);
p {
font-size: map-get($font-size, 'normal');
@if map-has-key($padding, 'right') {
padding-right: map-get($padding, 'right');
}
&:after {
content: map-keys($font-size) + ' ' + map-values($padding) + '';
}
}
结果:
p {
font-size: 18px;
padding-right: 20px;
}
p:after {
content: '"small", "normal", "large" 10px, 20px, 10px, 30px';
}
# 6、selector 选择器函数
.header {
background-color: #000;
content: selector-append('.a', '.b', '.c') + '';
content: selector-unify('a', '.disabled') + '';
}
结果:
.header {
background-color: #000;
content: '.a.b.c';
content: 'a.disabled';
}
# 7、自检函数
$color: #f00;
@mixin padding($left: 0, $top: 0, $right: 0, $bottom: 0) {
padding: $top $right $bottom $left;
}
.container {
@if variable-exists(color) {
color: $color;
} @else {
content: '$color不存在';
}
@if mixin-exists(padding) {
@include padding($left: 10px, $right: 10px);
}
}
结果:
.container {
color: #f00;
padding: 0 10px 0 10px;
}