指南

SCSS 内置函数

了解 SCSS 的最新内置函数,远离过时 API,提升你的样式编写效率和质量。

🎯 引言

学会这篇文章后,你可以熟练运用 SCSS 的内置函数写出更灵活、更高效的样式代码,避免使用已被废弃或不推荐的函数,在项目中提升样式管理能力,减少兼容性和维护上的问题。


🌟 SCSS 内置函数介绍

SCSS 作为 Sass 语言的一种语法变体,内置了大量函数,帮助我们轻松处理颜色、字符串、列表、数学运算等多方面的需求。以前我们常用像 lighten()darken() 这样的函数,但这些函数在新版 Sass 里已不推荐使用,取而代之的是更现代、更强大的颜色调整函数。

本文将聚焦最新的、推荐使用的 SCSS 内置函数,帮助大家掌握正确的写法。


🎨 颜色相关函数

以前很多人喜欢用 lighten($color, $amount)darken($color, $amount) 来调节颜色明暗,不过现在更推荐使用功能更全面的 color.adjust()color.scale()

color.adjust()

这个函数能更细致地调节颜色的多个通道(红绿蓝、透明度、亮度、饱和度等),用法灵活。

$primary: #3498db;

// 调整颜色亮度,增加亮度 20%
$brighter: color.adjust($primary, $lightness: 20%);

// 减少饱和度 10%
$less-saturated: color.adjust($primary, $saturation: -10%);

color.scale()

这个函数适合对颜色通道做比例缩放调整,比如让颜色更鲜艳或者更透明。

$primary: #3498db;

// 增加饱和度 30%
$more-vibrant: color.scale($primary, $saturation: 30%);

// 减少透明度 50%
$less-transparent: color.scale($primary, $alpha: -50%);
推荐使用 color.adjust()color.scale() 替代旧版 lighten()darken(),因为它们更加精准灵活,能避免颜色失真。

🧮 数学函数

SCSS 也内置了数学运算函数,比如 math.div(),因为原生的 / 在新版 Sass 中被废弃了,改用 math.div() 代替。

$width: 100px;

// 计算宽度的一半
$half-width: math.div($width, 2);

注意你需要在顶部引入 math 模块:

@use 'sass:math';

这个新写法保证了除法运算不会被误认为是 CSS 中的斜线分隔符。


🧵 字符串操作函数

字符串处理函数在 SCSS 里很常用,以下是几个推荐的:

  • str.index($string, $substring) 返回子串第一次出现的位置
  • str.length($string) 计算字符串长度
  • str.slice($string, $start-at, $end-at: null) 提取字符串片段
@use 'sass:string';

$txt: 'Hello, SCSS!';

// 找到 "SCSS" 在字符串中的位置
$pos: string.index($txt, 'SCSS');

// 截取 "Hello"
$hello: string.slice($txt, 1, 5);

🧩 列表操作函数

处理列表时推荐用以下函数:

  • list.length($list) 获取长度
  • list.nth($list, $n) 获取第 n 个元素
  • list.append($list, $val) 添加元素
@use 'sass:list';

$colors: (red, green, blue);

// 获取长度
$len: list.length($colors);

// 取第二个颜色
$second: list.nth($colors, 2);

// 添加一个颜色
$new-list: list.append($colors, yellow);

🧙‍♂️ 其他实用函数

  • type-of($value) 返回值的类型,方便调试变量
  • unit($number) 获取单位
  • unitless($number) 判断是否无单位
$value: 15px;

$type: type-of($value); // 输出 "number"
$unit: unit($value); // 输出 "px"
$is-unitless: unitless($value); // false
避免继续使用旧版的颜色函数(例如 lighten()darken()),以及直接用 / 做除法,这些写法在最新 Sass 中都会报错或被废弃。务必更新项目代码,保证兼容性和未来可维护性。

🧾 小节总结

  • 最新 SCSS 颜色调整用 color.adjust()color.scale() 替代旧版函数,更精准灵活。
  • 数学除法推荐使用 math.div(),避免语法歧义。
  • 字符串和列表操作要用对应模块的函数,提升代码可读性和安全性。

❓ 知识问答(Q&A)

Q:为什么旧的 lighten()darken() 函数不推荐了?

A:它们颜色调整机制较简单,调色效果不够精准;新版的 color.adjust() 提供了更灵活的通道调控能力,能更好地控制颜色效果。

Q:为什么不能用 / 做除法?

A:Sass 中的 / 会被解释成 CSS 里的斜线分隔符,导致编译错误。新版 Sass 提供了 math.div() 作为数学除法的正确写法。


🧪 小练习

  1. 使用 color.adjust() 调整一个蓝色,使其透明度减半,亮度增加10%。
@use 'sass:color';

$base: #0000ff;

$adjusted: color.adjust($base, $alpha: -50%, $lightness: 10%);

// 输出颜色测试
.test {
    background-color: $adjusted;
}
  1. 编写一个函数,接受一个字符串参数,返回该字符串的长度并截取前半部分。
@use 'sass:string';

@mixin string-info($str) {
    $len: string.length($str);
    $half: math.div($len, 2);
    $half-str: string.slice($str, 1, $half);

    content: 'Length: #{$len}, Half: #{$half-str}';
}

.test-string::before {
    @include string-info('Hello SCSS Functions');
}

🎉 恭喜你已经掌握 SCSS 内置函数中的颜色调整、数学运算和字符串、列表处理等实用技能啦!下一步,你可以尝试在项目中用这些函数重构旧代码,让样式更现代、更易维护!