Skip to main content

Sass Function

自定义函数

语法

Sass支持函数指令,语法如下:

@function fn-name($params...){
@return XXX;
}

示例如下:

/* 定义函数 */
@function divide($a, $b){
@return $a / $b
};

.container {
/* 使用函数 */
width: divide(100px, 2)
}

不定参数

函数可以接收多个参数,如果不确定会传递几个参数,那么可以使用不定参数的形式:

@function sum($nums...) {
$sum: 0;
@each $n in $nums {
$sum: $sum + $n;
}
@return $sum;
}

.box1 {
width: sum(1, 2, 3) + px;
}

.box2 {
width: sum(1, 2, 3, 4, 5, 6) + px;
}

内置函数

除了自定义函数,Sass 里面还提供了非常多的内置函数,官方文档

字符串函数

函数名函数作用
quote($string)为字符串添加引号。
unquote($string)移除字符串中的引号。
to-lower-case($string)将字符串中的所有字母转换为小写。
to-upper-case($string)将字符串中的所有字母转换为大写。
str-length($string)返回字符串的长度(汉字算一个字符)。
str-index($string, $substring)返回 $substring$string 中的位置。
str-insert($string, $insert, $index)$string$index 处插入 $insert 字符串。
str-slice($string, $start-at, $end-at)截取 $string 的从 $start-at$end-at 之间的子字符串。

索引是从1开始的,是-1,那么就是倒着来,且两边都是闭区间。

$str: "Hello world!";

.slice1{
/* content: "Hello"; */
content: str-slice($str, 1, 5)
}

.slice2{
/* content: "!"; */
content: str-slice($str, -1)
}

数字函数

函数名函数作用
percentage($number)将数字转换为百分比形式。
round($number)将数字四舍五入为整数。
ceil($number)将数字向上取整。
floor($number)将数字向下取整。
abs($number)获取数字的绝对值。
min($number...)返回传入数值中的最小值。
max($number...)返回传入数值中的最大值。
random($number?:number)不传值时:返回0-1的随机数;传入正整数n时:返回0到n之间的随机整数(左开右闭区间)。
.item{
width: percentage(2/5);
height: random(100) + px;
color: rgb(random(255),random(255),random(255));
}

数组函数

函数名函数作用
length($list)获取数组的长度。
nth($list, n)获取数组中第 n 个元素。
set-nth($list, n, $value)向数组的第 n 个位置插入 $value
join($list1, $list2, $separator)拼接 $list1$list2$separator 为新数组的分隔符,默认为 auto,可选择 commaspace
append($list, $val, $separator)向数组末尾添加 $val$separator 为新数组的分隔符,默认为 auto,可选择 commaspace
index($list, $value)返回 $value 在数组中的索引值。
zip($lists…)将多个数组组合成一个多维数组,要求每个数组的长度相同。
$list1: 1px solid, 2px dotted;
$list2: 3px dashed, 4px double;
/* 1px solid, 2px dotted,3px dashed, 4px double */
$combined-list: join($list1, $list2, comma);

$base-colors: red, green, blue;
/* red, green, blue, yellow */
$extended-colors: append($base-colors, yellow, comma);

$fonts: "Arial", "Helvetica", "Verdana";
$weights: "normal", "bold", "italic";
/* $font-pair: ("Arial", "normal"),("Helvetica", "bold"),("Verdana","italic") */
$font-pair: zip($fonts, $weights);

字典函数

函数名函数作用
map-get($map, $key)获取 $map$key 对应的 $value
map-merge($map1, $map2)合并 $map1$map2,返回一个新的 $map
map-remove($map, $key)$map 中删除 $key,返回一个新的 $map
map-keys($map)返回 $map 中所有的 $key
map-values($map)返回 $map 中所有的 $value
map-has-key($map, $key)判断 $map 中是否存在 $key,返回布尔值。
keywords($args)返回函数的参数,并允许动态修改其值。
/* 创建一个颜色映射表  */
$colors: (
"primary": #007bff,
"secondary": #6c757d,
"success": #28a745,
"info": #17a2b8,
"warning": #ffc107,
"danger": #dc3545,
);

/* 演示通过 map-get 获取对应的值 */
@function btn-color($color-name){
@return map-get($colors, $color-name);
}

/* 通过 map-keys 获取映射表所有的 keys */
$color-keys: map-keys($colors);

/* 新的颜色映射表 */
$more-colors:(
"light": #f8f9fa,
"dark": #343a40
);

/* 将新的颜色映射表合并到 $colors 里面 */
$all-colors: map-merge($colors, $more-colors);

颜色函数

RGB
函数名函数作用
rgb($red, $green, $blue)返回一个由红、绿、蓝三种颜色组成的16进制颜色值。
rgba($red, $green, $blue, $alpha)返回一个带有透明度的 RGBA 颜色值,红、绿、蓝值可以为颜色单词、hsl、rgb 或 16 进制形式传入。
red($color)$color 中获取其中的红色值。
green($color)$color 中获取其中的绿色值。
blue($color)$color 中获取其中的蓝色值。
mix($color1, $color2, $weight?)按照权重 $weight,将 $color1$color2 混合为一个新颜色。
HSL
函数名函数作用
hsl($hue, $saturation, $lightness)根据色相(hue)、饱和度(saturation)和亮度(lightness)创建一个 HSL 颜色。
hsla($hue, $saturation, $lightness, $alpha)根据色相(hue)、饱和度(saturation)、亮度(lightness)和透明度(alpha)创建一个 HSLA 颜色。
saturation($color)$color 中获取饱和度值。
lightness($color)$color 中获取亮度值。
adjust-hue($color, $degrees)通过改变颜色的色相值来创建一个新的颜色。
lighten($color, $amount)通过增加亮度值让颜色变亮,创建一个新颜色。
darken($color, $amount)通过减少亮度值让颜色变暗,创建一个新颜色。
hue($color)$color 中获取色相(hue)值。
Opacity
函数名函数作用
alpha($color) / opacity($color)获取 $color 的透明度值。
rgba($color, $alpha)改变 $color 的透明度值为 $alpha
opacify($color, $amount) / fade-in($color, $amount)通过增加 $amount 使 $color 变得更不透明。
transparentize($color, $amount) / fade-out($color, $amount)通过减少 $amount 使 $color 变得更加透明。

其他函数

函数名函数作用
type-of($value)返回 $value 的数据类型。
unit($number)返回 $number 的单位。
unitless($number)判断 $number 是否没有单位,没有单位返回 true,否则返回 false
comparable($number1, $number2)判断 $number1$number2 是否可以进行加减运算或合并,返回布尔值。