函数

Less 支持的内置函数。

逻辑函数

if

根据条件返回两个值之一。

参数:

  • condition: 布尔表达式
  • value1: 如果 condition 为真,则返回一个值。
  • value2: 如果 condition 不为真,则返回一个值。

已发布: v3.0.0 更新: v3.6.0

例子

@some: foo;

div {
    margin: if((2 > 1), 0, 3px);
    color:  if((iscolor(@some)), @some, black);
}

结果:

div {
    margin: 0;
    color:  black;
}

注意: conditional 参数支持的布尔表达式与 守卫声明 相同。

if(not (true), foo, bar);
if((true) and (2 > 1), foo, bar);
if((false) or (isstring("boo!")), foo, bar);

注意: 在 Less 3.6 之前,条件需要一组括号。

if(2 > 1, blue, green);   // Causes an error in 3.0-3.5.3
if((2 > 1), blue, green); // Ok 3.6+

boolean

评估为真或假

您可以 "store" 布尔测试以供以后在守卫中进行评估或 if()

参数:

  • condition: 布尔表达式

已发布: v3.0.0 更新: v3.6.0

例子

@bg: black;
@bg-light: boolean(luma(@bg) > 50%);

div {
  background: @bg; 
  color: if(@bg-light, black, white);
}

结果:

div {
  background: black;
  color: white;
}

字符串函数

escape

URL-encoding 应用于在输入字符串中找到的特殊字符。

  • 这些字符未编码: ,/?@&+'~!$
  • 最常见的编码字符是: \<space\>#^(){}|:><;][=

参数: string: 要转义的字符串。

返回: 不带引号转义 string 内容。

例子:

escape('a=1')

输出:

a%3D1

注意: 如果参数不是字符串,则未定义输出。 当前的实现在颜色上返回 undefined,在任何其他类型的参数上返回不变的输入。 不应依赖此行为,并且将来可能会更改。

e

字符串转义。

它期望字符串作为参数并按原样返回其内容,但不带引号。 它可用于输出无效 CSS 语法或使用 Less 无法识别的专有语法的 CSS 值。

参数: string - 要转义的字符串。

返回: string - 转义字符串,不带引号。

例子:

@mscode: "ms:alwaysHasItsOwnSyntax.For.Stuff()" 
filter: e(@mscode);

输出:

filter: ms:alwaysHasItsOwnSyntax.For.Stuff();

% 格式

函数 %(string, arguments ...) 格式化一个字符串。

第一个参数是带占位符的字符串。 所有占位符都以百分比符号 % 开头,后跟字母 sSdDaA。 其余参数包含用于替换占位符的表达式。 如果您需要打印百分比符号,请使用另一个百分比 %% 将其转义。

如果您需要将特殊字符转义为它们的 utf-8 转义码,请使用大写占位符。 该函数转义除 ()'~! 以外的所有特殊字符。 空格编码为 %20。 小写占位符保留特殊字符。

占位符:

  • d, D, a, A - 可以替换为任何类型的参数(颜色、数字、转义值、表达式...)。 如果将它们与字符串结合使用,将使用整个字符串 - 包括它的引号。 但是,引号按原样放置在字符串中,它们不会被 "/" 或类似的东西转义。
  • s, S - 可以用任何表达式替换。 如果将它与字符串一起使用,则仅使用字符串值 - 省略引号。

参数:

  • string: 带占位符的格式字符串,
  • anything* : 替换占位符的值。

返回: 格式化 string

例子:

format-a-d: %("repetitions: %a file: %d", 1 + 2, "directory/file.less");
format-a-d-upper: %('repetitions: %A file: %D', 1 + 2, "directory/file.less");
format-s: %("repetitions: %s file: %s", 1 + 2, "directory/file.less");
format-s-upper: %('repetitions: %S file: %S', 1 + 2, "directory/file.less");

输出:

format-a-d: "repetitions: 3 file: "directory/file.less"";
format-a-d-upper: "repetitions: 3 file: %22directory%2Ffile.less%22";
format-s: "repetitions: 3 file: directory/file.less";
format-s-upper: "repetitions: 3 file: directory%2Ffile.less";

replace

替换字符串中的文本。

已发布 v1.7.0

参数:

  • string: 要搜索和替换的字符串。
  • pattern: 要搜索的字符串或正则表达式模式。
  • replacement: 用于替换匹配模式的字符串。
  • flags: (可选)正则表达式标志。

返回: 具有替换值的字符串。

例子:

replace("Hello, Mars?", "Mars\?", "Earth!");
replace("One + one = 4", "one", "2", "gi");
replace('This is a string.', "(string)\.$", "new $1.");
replace(~"bar-1", '1', '2');

结果:

"Hello, Earth!";
"2 + 2 = 4";
'This is a new string.';
bar-2;

列表函数

length

返回值列表中的元素数。

参数

  • list - 逗号或空格分隔的值列表。

例子: length(1px solid #0080ff);

输出: 3

例子:

@list: "banana", "tomato", "potato", "peach";
n: length(@list);

输出:

n: 4;

extract

返回列表中指定位置的值。

参数

  • list - 逗号或空格分隔的值列表。
  • index - 一个整数,指定要返回的列表元素的位置。

例子: extract(8px dotted red, 2);

输出: dotted

例子:

@list: apple, pear, coconut, orange;
value: extract(@list, 3);

输出:

value: coconut;

range

发布 v3.9.0

生成跨越一系列值的列表

参数

  • start - (可选)起始值,例如 1 或 1 像素
  • end - 最终值,例如 5px
  • step - (可选)增加的数量

例子:

value: range(4);

输出:

value: 1 2 3 4;

范围内每个值的输出将与 end 值的单位相同。 例如:

value: range(10px, 30px, 10);

输出:

value: 10px 20px 30px;

each

发布 v3.7.0

将规则集的评估绑定到列表的每个成员。

参数

  • list - 逗号或空格分隔的值列表。
  • rules - 匿名规则集/混入

例子:

@selectors: blue, green, red;

each(@selectors, {
  .sel-@{value} {
    a: b;
  }
});

输出:

.sel-blue {
  a: b;
}
.sel-green {
  a: b;
}
.sel-red {
  a: b;
}

默认情况下,每个规则集按列表成员绑定到 @value@key@index 变量。 对于大多数列表,@key@index 将被分配相同的值(数字位置,从 1 开始)。 但是,您也可以将规则集本身用作结构化列表。 如:


@set: {
  one: blue;
  two: green;
  three: red;
}
.set {
  each(@set, {
    @{key}-@{index}: @value;
  });
}

这将输出:

.set {
  one-1: blue;
  two-2: green;
  three-3: red;
}

当然,由于您可以为每个规则集调用调用带有保护的混合,这使得 each() 成为一个非常强大的功能。

each() 中设置变量名称

您不必在 each() 函数中使用 @value@key@index。 在 Less 3.7 中,通过 each() 函数,Less 引入了匿名混合的概念,以后可能会扩展到语法的其他部分。

匿名混合使用 #().() 的形式,以 .# 开头,就像常规混合一样。 在each()中,可以这样使用:

.set-2() {
  one: blue;
  two: green;
  three: red;
}
.set-2 {
  // Call mixin and iterate each rule
  each(.set-2(), .(@v, @k, @i) {
    @{k}-@{i}: @v;
  });
}

如预期的那样输出:

.set-2 {
  one-1: blue;
  two-2: green;
  three-3: red;
}

each() 函数将采用匿名混合中定义的变量名称,并将它们按顺序绑定到 @value@key@index 值。 如果你只写 each(@list, #(@value) {}),那么 @key@index 都不会被定义。

使用 rangeeach 创建 for 循环

需要更少 v3.9.0

您可以简单地通过生成数字列表并使用 each 将其扩展为规则集来模拟 for 循环。

例子:

each(range(4), {
  .col-@{value} {
    height: (@value * 50px);
  }
});

输出:

.col-1 {
  height: 50px;
}
.col-2 {
  height: 100px;
}
.col-3 {
  height: 150px;
}
.col-4 {
  height: 200px;
}

数学函数

ceil

四舍五入到下一个最高整数。

参数: number - 一个浮点数。

返回: integer

例子: ceil(2.4)

输出: 3

floor

向下舍入到下一个最小整数。

参数: number - 一个浮点数。

返回: integer

例子: floor(2.6)

输出: 2

percentage

将浮点数转换为百分比字符串。

参数: number - 一个浮点数。

返回: number

例子: percentage(0.5)

输出: 50%

round

应用舍入。

参数:

  • number: 一个浮点数。
  • decimalPlaces: 可选的: 要四舍五入的小数位数。 默认为 0。

返回: number

例子: round(1.67)

输出: 2

例子: round(1.67, 1)

输出: 1.7

sqrt

计算数字的平方根。 保持单位不变。

参数: number - 浮点数。

返回: number

例子:

sqrt(25cm)

输出:

5cm

例子:

sqrt(18.6%)

输出:

4.312771730569565%;

abs

计算数字的绝对值。 保持单位不变。

参数: number - 一个浮点数。

返回: number

示例 #1: abs(25cm)

输出: 25cm

示例 #2: abs(-18.6%)

输出: 18.6%;

sin

计算正弦函数。

假定没有单位的数字的弧度。

参数: number - 一个浮点数。

返回: number

例子:

sin(1); // sine of 1 radian
sin(1deg); // sine of 1 degree
sin(1grad); // sine of 1 gradian

输出:

0.8414709848078965; // sine of 1 radian
0.01745240643728351; // sine of 1 degree
0.015707317311820675; // sine of 1 gradian

asin

计算反正弦(正弦的倒数)函数。

以弧度返回数字,例如 -π/2π/2 之间的数字。

参数: number - 来自 [-1, 1] 区间的浮点数。

返回: number

例子:

asin(-0.8414709848078965)
asin(0)
asin(2)

输出:

-1rad
0rad
NaNrad

cos

计算余弦函数。

假定没有单位的数字的弧度。

参数: number - 一个浮点数。

返回: number

例子:

cos(1) // cosine of 1 radian
cos(1deg) // cosine of 1 degree
cos(1grad) // cosine of 1 gradian

输出:

0.5403023058681398 // cosine of 1 radian
0.9998476951563913 // cosine of 1 degree
0.9998766324816606 // cosine of 1 gradian

acos

计算反余弦(余弦的倒数)函数。

Returns number in radians e.g. a number between 0 and π.

参数: number - 来自 [-1, 1] 区间的浮点数。

返回: number

例子:

acos(0.5403023058681398)
acos(1)
acos(2)

输出:

1rad
0rad
NaNrad

tan

计算正切函数。

假定没有单位的数字的弧度。

参数: number - 一个浮点数。

返回: number

例子:

tan(1) // tangent of 1 radian
tan(1deg) // tangent of 1 degree
tan(1grad) // tangent of 1 gradian

输出:

1.5574077246549023   // tangent of 1 radian
0.017455064928217585 // tangent of 1 degree
0.015709255323664916 // tangent of 1 gradian

atan

计算反正切(正切的倒数)函数。

以弧度返回数字,例如 -π/2π/2 之间的数字。

参数: number - 一个浮点数。

返回: number

例子:

atan(-1.5574077246549023)
atan(0)
round(atan(22), 6) // arctangent of 22 rounded to 6 decimal places

输出:

-1rad
0rad
1.525373rad;

pi

返回 π (pi);

参数: none

返回: number

例子:

pi()

输出:

3.141592653589793

pow

返回第一个参数的第二个参数次方的值。

返回值与第一个参数具有相同的维度,第二个参数的维度被忽略。

参数:

  • number: base - 浮点数。
  • number: 指数 - 浮点数。

返回: number

例子:

pow(0cm, 0px)
pow(25, -2)
pow(25, 0.5)
pow(-25, 0.5)
pow(-25%, -0.5)

输出:

1cm
0.0016
5
NaN
NaN%

mod

返回第一个参数模第二个参数的值。

返回值与第一个参数具有相同的维度,第二个参数的维度被忽略。 该函数还能够处理负数和浮点数。

参数:

  • number: 一个浮点数。
  • number: 一个浮点数。

返回: number

例子:

mod(0cm, 0px)
mod(11cm, 6px);
mod(-26%, -5);

输出:

NaNcm;
5cm
-1%;

min

返回一个或多个值中的最低值。

参数: value1, ..., valueN - 要比较的一个或多个值。

返回: 最低值。

例子: min(5, 10);

输出: 5

例子: min(3px, 42px, 1px, 16px);

输出: 1px

max

返回一个或多个值中的最大值。

参数: value1, ..., valueN - 要比较的一个或多个值。

返回: 最高值。

例子: max(5, 10);

输出: 10

例子: max(3%, 42%, 1%, 16%);

输出: 42%


类型函数

isnumber

如果值是数字,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值为数字,则为 true,否则为 false

例子:

isnumber(#ff0);     // false
isnumber(blue);     // false
isnumber("string"); // false
isnumber(1234);     // true
isnumber(56px);     // true
isnumber(7.8%);     // true
isnumber(keyword);  // false
isnumber(url(...)); // false

isstring

如果值是字符串,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值是字符串,则为 true,否则为 false

例子:

isstring(#ff0);     // false
isstring(blue);     // false
isstring("string"); // true
isstring(1234);     // false
isstring(56px);     // false
isstring(7.8%);     // false
isstring(keyword);  // false
isstring(url(...)); // false

iscolor

如果值是颜色,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值是颜色,则为 true,否则为 false

例子:

iscolor(#ff0);     // true
iscolor(blue);     // true
iscolor("string"); // false
iscolor(1234);     // false
iscolor(56px);     // false
iscolor(7.8%);     // false
iscolor(keyword);  // false
iscolor(url(...)); // false

iskeyword

如果值是关键字,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值是关键字,则为 true,否则为 false

例子:

iskeyword(#ff0);     // false
iskeyword(blue);     // false
iskeyword("string"); // false
iskeyword(1234);     // false
iskeyword(56px);     // false
iskeyword(7.8%);     // false
iskeyword(keyword);  // true
iskeyword(url(...)); // false

isurl

如果值是 url,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值是 url,则为 true,否则为 false

例子:

isurl(#ff0);     // false
isurl(blue);     // false
isurl("string"); // false
isurl(1234);     // false
isurl(56px);     // false
isurl(7.8%);     // false
isurl(keyword);  // false
isurl(url(...)); // true

ispixel

如果值是以像素为单位的数字,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值是像素,则为 true,否则为 false

例子:

ispixel(#ff0);     // false
ispixel(blue);     // false
ispixel("string"); // false
ispixel(1234);     // false
ispixel(56px);     // true
ispixel(7.8%);     // false
ispixel(keyword);  // false
ispixel(url(...)); // false

isem

如果值是 em 值,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值为 em 值则为 true,否则为 false

例子:

isem(#ff0);     // false
isem(blue);     // false
isem("string"); // false
isem(1234);     // false
isem(56px);     // false
isem(7.8em);    // true
isem(keyword);  // false
isem(url(...)); // false

ispercentage

如果值是百分比值,则返回 true,否则返回 false

参数: value - 正在评估的值或变量。

返回: 如果值是百分比值,则为 true,否则为 false

例子:

ispercentage(#ff0);     // false
ispercentage(blue);     // false
ispercentage("string"); // false
ispercentage(1234);     // false
ispercentage(56px);     // false
ispercentage(7.8%);     // true
ispercentage(keyword);  // false
ispercentage(url(...)); // false

isunit

如果值是指定单位的数字,则返回 true,否则返回 false

参数:

  • value - 正在评估的值或变量。
  • unit - 要测试的单元标识符(可选地引用)。

返回: 如果值是指定单位的数字,则为 true,否则为 false

例子:

isunit(11px, px);  // true
isunit(2.2%, px);  // false
isunit(33px, rem); // false
isunit(4rem, rem); // true
isunit(56px, "%"); // false
isunit(7.8%, '%'); // true
isunit(1234, em);  // false
isunit(#ff0, pt);  // false
isunit("mm", mm);  // false

isruleset

如果值是规则集,则返回 true,否则返回 false

参数:

  • value - 正在评估的变量。

返回: 如果值是规则集则为 true,否则为 false

例子:

@rules: {
    color: red;
}

isruleset(@rules);   // true
isruleset(#ff0);     // false
isruleset(blue);     // false
isruleset("string"); // false
isruleset(1234);     // false
isruleset(56px);     // false
isruleset(7.8%);     // false
isruleset(keyword);  // false
isruleset(url(...)); // false

isdefined

已发布 v4.0.0

如果定义了变量,则返回 true,否则返回 false

参数: variable - 正在评估的变量。

例子:

@foo: 1;
isdefined(@foo);     // true
isdefined(@bar);     // false

杂项函数

color

解析颜色,因此表示颜色的字符串成为颜色。

参数: string: 指定颜色的字符串。

返回: color

例子: color("#aaa");

输出: #aaa

image-size

从文件中获取图像尺寸。

参数: string: 要获取尺寸的文件。

返回: dimension

例子: image-size("file.png");

输出: 10px 10px

注意: 这个功能需要每个环境都实现。 它目前仅在节点环境中可用。

添加于: v2.2.0

image-width

从文件中获取图像宽度。

参数: string: 要获取尺寸的文件。

返回: dimension

例子: image-width("file.png");

输出: 10px

注意: 这个功能需要每个环境都实现。 它目前仅在节点环境中可用。

添加于: v2.2.0

image-height

从文件中获取图像高度。

参数: string: 要获取尺寸的文件。

返回: dimension

例子: image-height("file.png");

输出: 10px

注意: 这个功能需要每个环境都实现。 它目前仅在节点环境中可用。

添加于: v2.2.0

convert

将数字从一种单位转换为另一种单位。

第一个参数包含带有单位的数字,第二个参数包含单位。 如果单位兼容,则转换数字。 如果它们不兼容,则第一个参数不加修改地返回。

参见 unit 了解如何在不转换的情况下更改单位。

兼容单位组_:

  • lengths: mcmmminptpc
  • time: sms
  • angle: raddeggradturn

参数:

  • number: 带单位的浮点数。
  • identifierstringescaped value: 单位

返回: number

例子:

convert(9s, "ms")
convert(14cm, mm)
convert(8, mm) // incompatible unit types

输出:

9000ms
140mm
8

data-uri

如果 ieCompat 选项打开且资源太大,或者如果您在浏览器中使用该功能,则内联资源并回退到 url()。 如果未给出 MIME 类型,则节点使用 mime 包来确定正确的 mime 类型。

参数:

  • mimetype: (可选)MIME 类型字符串。
  • url: 要内联的文件的 URL。

如果没有 mimetype,data-uri 函数从文件名后缀猜测它。 文本和 svg 文件编码为 utf-8,其他任何内容都编码为 base64。

如果用户提供 mimetype,如果 mimetype 参数以 ; 结尾,则函数使用 base64;base64。 例如,image/jpeg;base64 编码为 base64,而 text/html 编码为 utf-8。

例子: data-uri('../data/image.jpg');

输出: url('data:image/jpeg;base64,bm90IGFjdHVhbGx5IGEganBlZyBmaWxlCg==');

浏览器输出: url('../data/image.jpg');

例子: data-uri('image/jpeg;base64', '../data/image.jpg');

输出: url('data:image/jpeg;base64,bm90IGFjdHVhbGx5IGEganBlZyBmaWxlCg==');

例子: data-uri('image/svg+xml;charset=UTF-8', 'image.svg');

输出: url("data:image/svg+xml;charset=UTF-8,%3Csvg%3E%3Ccircle%20r%3D%229%22%2F%3E%3C%2Fsvg%3E");

default

仅在守卫条件内可用,仅当没有其他 mixin 匹配时才返回 true,否则返回 false

例子:

.mixin(1)                   {x: 11}
.mixin(2)                   {y: 22}
.mixin(@x) when (default()) {z: @x}

div {
  .mixin(3);
}

div.special {
  .mixin(1);
}

输出:

div {
  z: 3;
}
div.special {
  x: 11;
}

可以将 default 返回的值与守卫运算符一起使用。 例如,仅当至少有一个 matches.mixin() 调用的 mixin 定义时,.mixin() when not(default()) {} 才会匹配:

.mixin(@value) when (ispixel(@value)) {width: @value}
.mixin(@value) when not(default())    {padding: (@value / 5)}

div-1 {
  .mixin(100px);
}

div-2 {
  /* ... */
  .mixin(100%);
}

result:

div-1 {
  width: 100px;
  padding: 20px;
}
div-2 {
  /* ... */
}

允许在相同的保护条件下或在具有相同名称的 mixin 的不同条件下进行多个 default() 调用:

div {
  .m(@x) when (default()), not(default())    {always: @x}
  .m(@x) when (default()) and not(default()) {never:  @x}

  .m(1); // OK
}

但是,如果 Less 检测到使用 default() 的多个 mixin 定义之间存在潜在冲突,则会抛出错误:

div {
  .m(@x) when (default())    {}
  .m(@x) when not(default()) {}

  .m(1); // Error
}

在上面的例子中,不可能确定每个 default() 调用应该返回什么值,因为它们递归地相互依赖。

高级多个 default() 用法:

.x {
  .m(red)                                    {case-1: darkred}
  .m(blue)                                   {case-2: darkblue}
  .m(@x) when (iscolor(@x)) and (default())  {default-color: @x}
  .m('foo')                                  {case-1: I am 'foo'}
  .m('bar')                                  {case-2: I am 'bar'}
  .m(@x) when (isstring(@x)) and (default()) {default-string: and I am the default}

  &-blue  {.m(blue)}
  &-green {.m(green)}
  &-foo   {.m('foo')}
  &-baz   {.m('baz')}
}

结果:

.x-blue {
  case-2: #00008b;
}
.x-green {
  default-color: #008000;
}
.x-foo {
  case-1: I am 'foo';
}
.x-baz {
  default-string: and I am the default;
}

default 函数仅在保护表达式内可用作 Less 内置函数。 如果在 mixin 保护条件之外使用,它将被解释为常规 CSS 值:

例子:

div {
  foo: default();
  bar: default(42);
}

结果:

div {
  foo: default();
  bar: default(42);
}

unit

删除或更改维度的单位

参数:

  • dimension: 一个数字,有或没有维度。
  • unit: (可选)要更改为的单位,或者如果省略,它将删除该单位。

请参阅 convert 了解如何通过换算更改单位。

例子: unit(5, px)

输出: 5px

例子: unit(5em)

输出: 5

get-unit

返回数字的单位。

如果参数包含带单位的数字,则函数返回其单位。 没有单位的参数导致空返回值。

参数:

  • number: 有或没有单位的数字。

例子: get-unit(5px)

输出: px

例子: get-unit(5)

输出: //nothing

svg-gradient

生成多站 svg 渐变。

Svg-gradient 函数生成多站 svg 渐变。 它必须至少有三个参数。 第一个参数指定渐变类型和方向,其余参数列出颜色及其位置。 第一个和最后一个指定颜色的位置是可选的,其余颜色必须指定位置。

方向必须是 to bottomto rightto bottom rightto top rightellipseellipse at center 之一。 方向可以指定为转义值 ~'to bottom' 和空格分隔的单词列表 to bottom

方向后必须有两个或多个色标。 它们可以在列表中提供,也可以在单独的参数中指定每个颜色停止点。

参数 - 列表中的颜色停止:

  • escaped valuelist of identifiers: 方向
  • list - 所有颜色及其在列表中的位置

参数 - 参数中的颜色停止:

  • escaped valuelist of identifiers: 方向
  • color [percentage] 对: 第一种颜色及其相对位置(位置是可选的)
  • color percent 对: (可选)第二种颜色及其相对位置
  • ...
  • color percent 对: (可选)第n种颜色及其相对位置
  • color [percentage] 对: 最后一种颜色及其相对位置(位置是可选的)

返回: url 与 "URI-Encoded" svg 渐变。

示例 - 颜色在列表中停止:

div {
  @list: red, green 30%, blue;
  background-image: svg-gradient(to right, @list);
}

等效 - 参数中的颜色停止:

div {
  background-image: svg-gradient(to right, red, green 30%, blue);
}

两者都会导致:

div {
  background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23ff0000%22%2F%3E%3Cstop%20offset%3D%2230%25%22%20stop-color%3D%22%23008000%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%230000ff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E');
}

注意: 在 2.2.0 之前的版本中,结果是 base64 编码的。

Generated background image has red color on the left, green at 30% 它的宽度并以蓝色结尾。 Base64 编码部分包含以下 svg-gradient:

<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">
    <linearGradient id="gradient" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="0%">
        <stop offset="0%" stop-color="#ff0000"/>
        <stop offset="30%" stop-color="#008000"/>
        <stop offset="100%" stop-color="#0000ff"/>
    </linearGradient>
    <rect x="0" y="0" width="1" height="1" fill="url(#gradient)" />
</svg>

颜色定义函数

rgb

从十进制红色、绿色和蓝色 (RGB) 值创建不透明颜色对象。

标准 HTML/CSS 格式的文字颜色值也可用于定义颜色,例如 #ff0000

参数:

  • red: An integer 0-255 or percentage 0-100%.
  • green: An integer 0-255 or percentage 0-100%.
  • blue: An integer 0-255 or percentage 0-100%.

返回: color

例子: rgb(90, 129, 32)

输出: #5a8120

rgba

从十进制红色、绿色、蓝色和 alpha (RGBA) 值创建透明颜色对象。

参数:

  • red: An integer 0-255 or percentage 0-100%.
  • green: An integer 0-255 or percentage 0-100%.
  • blue: An integer 0-255 or percentage 0-100%.
  • alpha: A number 0-1 or percentage 0-100%.

返回: color

例子: rgba(90, 129, 32, 0.5)

输出: rgba(90, 129, 32, 0.5)

argb

创建 #AARRGGBB 格式的颜色的十六进制表示(不是 #RRGGBBAA!)。

这种格式用于 Internet Explorer、.NET 和 Android 开发。

参数: color,颜色对象。

返回: string

例子: argb(rgba(90, 23, 148, 0.5));

输出: #805a1794

hsl

根据色调、饱和度和亮度 (HSL) 值创建不透明颜色对象。

参数:

  • hue: 表示度数的整数 0-360。
  • saturation: A percentage 0-100% 或数字 0-1。
  • lightness: A percentage 0-100% 或数字 0-1。

返回: color

例子: hsl(90, 100%, 50%)

输出: #80ff00

如果您想基于另一种颜色的通道创建新颜色,这将很有用,例如: @new: hsl(hue(@old), 45%, 90%);

@new 将具有 @old 的色调,以及它自己的饱和度和亮度。

hsla

从色调、饱和度、亮度和 alpha (HSLA) 值创建透明颜色对象。

参数:

  • hue: 表示度数的整数 0-360。
  • saturation: A percentage 0-100% 或数字 0-1。
  • lightness: A percentage 0-100% 或数字 0-1。
  • alpha: A percentage 0-100% 或数字 0-1。

返回: color

例子: hsla(90, 100%, 50%, 0.5)

输出: rgba(128, 255, 0, 0.5)

hsv

从色调、饱和度和明度 (HSV) 值创建不透明的颜色对象。

请注意,这是 Photoshop 中可用的色彩空间,与 hsl 不同。

参数:

  • hue: 表示度数的整数 0-360。
  • saturation: A percentage 0-100% 或数字 0-1。
  • value: A percentage 0-100% 或数字 0-1。

返回: color

例子: hsv(90, 100%, 50%)

输出: #408000

hsva

从色调、饱和度、明度和 alpha (HSVA) 值创建透明颜色对象。

请注意,这与 hsla 不同,它是 Photoshop 中可用的色彩空间。

参数:

  • hue: 表示度数的整数 0-360。
  • saturation: A percentage 0-100% 或数字 0-1。
  • value: A percentage 0-100% 或数字 0-1。
  • alpha: A percentage 0-100% 或数字 0-1。

返回: color

例子: hsva(90, 100%, 50%, 0.5)

输出: rgba(64, 128, 0, 0.5)


颜色通道函数

hue

在 HSL 颜色空间中提取颜色对象的色调通道。

参数: color - 颜色对象。

返回: integer 0-360

例子: hue(hsl(90, 100%, 50%))

输出: 90

saturation

提取 HSL 颜色空间中颜色对象的饱和度通道。

参数: color - 颜色对象。

返回: percentage 0-100

例子: saturation(hsl(90, 100%, 50%))

输出: 100%

lightness

提取 HSL 颜色空间中颜色对象的亮度通道。

参数: color - 颜色对象。

返回: percentage 0-100

例子: lightness(hsl(90, 100%, 50%))

输出: 50%

hsvhue

在 HSV 颜色空间中提取颜色对象的色调通道。

参数: color - 颜色对象。

返回: integer 0-360

例子: hsvhue(hsv(90, 100%, 50%))

输出: 90

hsvsaturation

在 HSV 颜色空间中提取颜色对象的饱和度通道。

参数: color - 颜色对象。

返回: percentage 0-100

例子: hsvsaturation(hsv(90, 100%, 50%))

输出: 100%

hsvvalue

在 HSV 颜色空间中提取颜色对象的值通道。

参数: color - 颜色对象。

返回: percentage 0-100

例子: hsvvalue(hsv(90, 100%, 50%))

输出: 50%

red

提取颜色对象的红色通道。

参数: color - 颜色对象。

返回: float 0-255

例子: red(rgb(10, 20, 30))

输出: 10

green

提取颜色对象的绿色通道。

参数: color - 颜色对象。

返回: float 0-255

例子: green(rgb(10, 20, 30))

输出: 20

blue

提取颜色对象的蓝色通道。

参数: color - 颜色对象。

返回: float 0-255

例子: blue(rgb(10, 20, 30))

输出: 30

alpha

提取颜色对象的 alpha 通道。

参数: color - 颜色对象。

返回: float 0-1

例子: alpha(rgba(10, 20, 30, 0.5))

输出: 0.5

luma

计算颜色对象的 luma(感知亮度)。

使用 SMPTE C / Rec。 709 系数,如 WCAG 2.0 中所推荐。 该计算也用于对比函数。

在 v1.7.0 之前,亮度是在没有伽马校正的情况下计算的,使用亮度函数来计算这些 "old" 值。

参数: color - 颜色对象。

返回: percentage 0-100%

例子: luma(rgb(100, 200, 30))

输出: 44%

luminance

计算没有gamma校正的luma值(此函数在v1.7.0之前被命名为luma

参数: color - 颜色对象。

返回: percentage 0-100%

例子: luminance(rgb(100, 200, 30))

输出: 65%


颜色运算函数

Color operations generally take parameters in the same units as the values they are changing, and percentages are handled as absolutes, so increasing a 10% value by 10% results in 20%. 将选项方法参数设置为 relative 以获得相对百分比。 When using relative percentages increasing a 10% value by 10% results in 11%. 值被限制在允许的范围内; 他们不环绕。 在显示返回值的地方,除了您通常会使用的十六进制版本之外,我们还使用了使每个函数的功能一目了然的格式。

saturate

按绝对量增加 HSL 颜色空间中颜色的饱和度。

参数:

  • color: 颜色对象。
  • amount: A percentage 0-100%.
  • method: 可选,设置为 relative 以相对于当前值进行调整。

返回: color

例子: saturate(hsl(90, 80%, 50%), 20%)

输出: #80ff00 // hsl(90, 100%, 50%)

颜色 1颜色 2

desaturate

按绝对量降低 HSL 颜色空间中颜色的饱和度。

参数:

  • color: 颜色对象。
  • amount: A percentage 0-100%.
  • method: 可选,设置为 relative 以相对于当前值进行调整。

返回: color

例子: desaturate(hsl(90, 80%, 50%), 20%)

输出: #80cc33 // hsl(90, 60%, 50%)

颜色 1颜色 2

lighten

按绝对量增加 HSL 颜色空间中颜色的亮度。

参数:

  • color: 颜色对象。
  • amount: A percentage 0-100%.
  • method: 可选,设置为 relative 以相对于当前值进行调整。

返回: color

例子: lighten(hsl(90, 80%, 50%), 20%)

输出: #b3f075 // hsl(90, 80%, 70%)

颜色 1颜色 2

darken

按绝对量降低 HSL 颜色空间中颜色的亮度。

参数:

  • color: 颜色对象。
  • amount: A percentage 0-100%.
  • method: 可选,设置为 relative 以相对于当前值进行调整。

返回: color

例子: darken(hsl(90, 80%, 50%), 20%)

输出: #4d8a0f // hsl(90, 80%, 30%)

颜色 1颜色 2

fadein

降低颜色的透明度(或增加不透明度),使其更不透明。

对不透明颜色没有影响。 要朝另一个方向淡入淡出,请使用 fadeout

参数:

  • color: 颜色对象。
  • amount: A percentage 0-100%.
  • method: 可选,设置为 relative 以相对于当前值进行调整。

返回: color

例子: fadein(hsla(90, 90%, 50%, 0.5), 10%)

输出: rgba(128, 242, 13, 0.6) // hsla(90, 90%, 50%, 0.6)

fadeout

增加颜色的透明度(或降低不透明度),使其不透明。 要朝另一个方向淡入淡出,请使用 fadein

参数:

  • color: 颜色对象。
  • amount: A percentage 0-100%.
  • method: 可选,设置为 relative 以相对于当前值进行调整。

返回: color

例子: fadeout(hsla(90, 90%, 50%, 0.5), 10%)

输出: rgba(128, 242, 13, 0.4) // hsla(90, 90%, 50%, 0.4)

fade

设置颜色的绝对不透明度。 可以应用于颜色,无论它们是否已经具有不透明度值。

参数:

  • color: 颜色对象。
  • amount: A percentage 0-100%.

返回: color

例子: fade(hsl(90, 90%, 50%), 10%)

输出: rgba(128, 242, 13, 0.1) //hsla(90, 90%, 50%, 0.1)

spin

沿任一方向旋转颜色的色调角度。

虽然角度范围是 0-360,但它应用了 mod 360 操作,因此您可以传入更大(或负)的值,它们将环绕,例如 360 度和 720 度的角度将产生相同的结果。 请注意,颜色是通过 RGB 转换传递的,它不会保留灰色的色调值(因为没有饱和度时色调没有意义),因此请确保以保留色调的方式应用函数,例如不要 做这个:

@c: saturate(spin(#aaaaaa, 10), 10%);

改为这样做:

@c: spin(saturate(#aaaaaa, 10%), 10);

颜色始终作为 RGB 值返回,因此将 spin 应用于灰度值将不会执行任何操作。

参数:

  • color: 颜色对象。
  • angle: 要旋转的度数(+ 或 -)。

返回: color

例子:

spin(hsl(10, 90%, 50%), 30)
spin(hsl(10, 90%, 50%), -30)

输出:

#f2a60d // hsl(40, 90%, 50%)
#f20d59 // hsl(340, 90%, 50%)

颜色 1颜色 2

颜色 1颜色 2

mix

将两种颜色按可变比例混合在一起。 不透明度包括在计算中。

参数:

  • color1: 颜色对象。
  • color2: 颜色对象。
  • weight: Optional, a percentage balance point between the two colors, defaults to 50%.

返回: color

例子:

mix(#ff0000, #0000ff, 50%)
mix(rgba(100,0,0,1.0), rgba(0,100,0,0.5), 50%)

输出:

#800080
rgba(75, 25, 0, 0.75)

颜色 1 + 颜色 2颜色 3

tint

以可变比例将颜色与白色混合。 与调用 mix(#ffffff, @color, @weight) 相同

参数:

  • color: 颜色对象。
  • weight: Optional, a percentage balance point between color and white, defaults to 50%.

返回: color

例子:

no-alpha: tint(#007fff, 50%); 
with-alpha: tint(rgba(00,0,255,0.5), 50%); 

输出:

no-alpha: #80bfff;
with-alpha: rgba(191, 191, 255, 0.75);

颜色 1颜色 2

shade

以可变比例混合颜色和黑色。 与调用 mix(#000000, @color, @weight) 相同

参数:

  • color: 颜色对象。
  • weight: Optional, a percentage balance point between color and black, defaults to 50%.

返回: color

例子:

no-alpha: shade(#007fff, 50%); 
with-alpha: shade(rgba(00,0,255,0.5), 50%); 

输出:

no-alpha: #004080;
with-alpha: rgba(0, 0, 64, 0.75);

颜色 1颜色 2

greyscale

从 HSL 颜色空间中的颜色中移除所有饱和度; 与调用 desaturate(@color, 100%) 相同。

由于饱和度不受色调影响,因此生成的颜色映射可能有些暗淡或浑浊; luma 可能会提供更好的结果,因为它提取的是感知亮度而不是线性亮度,例如 greyscale('#0000ff') 将返回与 greyscale('#00ff00') 相同的值,尽管它们在人眼看来的亮度有很大不同。

参数: color: 颜色对象。

返回: color

例子: greyscale(hsl(90, 90%, 50%))

输出: #808080 // hsl(90, 0%, 50%)

颜色 1颜色 2

请注意,生成的灰色看起来比原始绿色更暗,即使其亮度值相同。

与使用 luma 比较(用法不同,因为 luma 返回单个值,而不是颜色):

@c: luma(hsl(90, 90%, 50%));
color: rgb(@c, @c, @c);

输出: #cacaca

颜色 1颜色 2

这次灰色的明度看起来和绿色差不多,但实际上它的价值更高。

contrast

选择两种颜色中哪一种颜色与另一种颜色形成最大对比。

这对于确保颜色在背景下可读很有用,这对于可访问性合规性也很有用。 此功能与 Compass for SASS 中的对比函数 的工作方式相同。 根据 WCAG 2.0,使用伽玛校正后的 luma 值而不是亮度来比较颜色。

明暗参数可以按任意顺序提供 - 该函数将计算它们的亮度值并自动分配明暗,这意味着您不能使用此函数通过颠倒顺序来选择对比度最低的颜色。

参数:

  • color: 要比较的颜色对象。
  • dark: 可选 - 指定的深色(默认为黑色)。
  • light: 可选 - 指定的灯光颜色(默认为白色)。
  • threshold: optional - A percentage 0-100% specifying where the transition from "dark" to "light" is (defaults to 43%, 匹配 SASS)。 This is used to bias the contrast one way or another, for example to allow you to decide whether a 50% 灰色背景应导致黑色或白色文本。 您通常会将 'lighter' 调色板设置得较低, 'darker' 调色板设置得较高。

返回: color

例子:

p {
    a: contrast(#bbbbbb);
    b: contrast(#222222, #101010);
    c: contrast(#222222, #101010, #dddddd);
    d: contrast(hsl(90, 100%, 50%), #000000, #ffffff, 30%);
    e: contrast(hsl(90, 100%, 50%), #000000, #ffffff, 80%);
}

输出:

p {
    a: #000000 // black
    b: #ffffff // white
    c: #dddddd
    d: #000000 // black
    e: #ffffff // white
}

这些示例使用上面计算的背景和前景颜色; 你可以看到你永远不会以白底白字或黑底黑字结束,尽管可以使用阈值来允许较低对比度的结果,如上一个示例所示:

颜色 1 颜色 1 颜色 1 颜色 1 颜色 1


颜色混合函数

这些操作与 Photoshop、Fireworks 或 GIMP 等图像编辑器中的混合模式类似(但不一定相同),因此您可以使用它们使 CSS 颜色与图像匹配。

multiply

将两种颜色相乘。 将两种颜色中每一种的相应 RGB 通道相乘,然后除以 255。 结果是颜色较深。

参数:

  • color1: 颜色对象。
  • color2: 颜色对象。

返回: color

例子

multiply(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

multiply(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

screen

做与 multiply 相反的事情。 结果是更亮的颜色。

参数:

  • color1: 颜色对象。
  • color2: 颜色对象。

返回: color

例子:

screen(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

screen(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

overlay

结合了 multiplyscreen 的效果。 有条件地使亮通道更亮,使暗通道更暗。 注意: 条件的结果由第一个颜色参数决定。

参数:

  • color1: 基色对象。 也是使结果更亮或更暗的决定色。
  • color2: 要叠加的颜色对象。

返回: color

例子:

overlay(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

overlay(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

softlight

overlay类似,但避免纯黑导致纯黑,避免纯白导致纯白。

参数:

  • color1: 一个颜色的物体柔和地照亮另一个。
  • color2: 要柔和变亮的颜色对象。

返回: color

例子:

softlight(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

softlight(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

hardlight

overlay 相同,但颜色角色相反。

参数:

  • color1: 要叠加的颜色对象。
  • color2: 基色对象。 也是使结果更亮或更暗的决定色。

返回: color

例子:

hardlight(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

hardlight(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

difference

在逐个通道的基础上从第一种颜色中减去第二种颜色。 负值被反转。 减去黑色结果没有变化; 减去白色会导致颜色反转。

参数:

  • color1: 用作被减数的颜色对象。
  • color2: 用作减数的颜色对象。

返回: color

例子:

difference(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

difference(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

exclusion

difference 类似的效果,但对比度较低。

参数:

  • color1: 用作被减数的颜色对象。
  • color2: 用作减数的颜色对象。

返回: color

例子:

exclusion(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

exclusion(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

average

在每个通道 (RGB) 的基础上计算两种颜色的平均值。

参数:

  • color1: 颜色对象。
  • color2: 颜色对象。

返回: color

例子:

average(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

average(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

average(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

average(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

average(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

average(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

average(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

average(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

average(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3

negation

difference 执行相反的操作。

结果是更亮的颜色。 注意: 相反的效果并不意味着加法运算产生的反转效果。

参数:

  • color1: 用作被减数的颜色对象。
  • color2: 用作减数的颜色对象。

返回: color

例子:

negation(#ff6600, #000000);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #333333);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #666666);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #999999);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #cccccc);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #ffffff);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #ff0000);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #00ff00);

颜色 1 颜色 2 颜色 3

negation(#ff6600, #0000ff);

颜色 1 颜色 2 颜色 3