https://33tool.com/scss_to_css/

$primary-color: #000;
.main1 {
background-color: $primary-color;
}

& (Referencing Parent Selectors: &)在嵌套 CSS 规则时,有时也需要直接使用嵌套外层的父选择器,例如,当给某个元素设定 hover 样式时,或者当 body 元素有某个 classname 时,可以用 & 代表嵌套规则外层的父选择器。
.main1 {
a {
:hover {
color: red;
}
}
}
这样直接转换的时候生成的css
//这里a和:hover中间有空格
.main1 a :hover {
color: red;
}
&.main1 {
a {
&:hover {
color: red;
}
}
}
生成的CSS
.main1 a:hover {
color: red;
}
CSS
.funky {
font: 20px/24px;
font-family: fantasy;
font-weight: bold;
}
scss
.funky {
font: 20px/24px {
family: fantasy;
weight: bold;
}
}
混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left。混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变量,输出多样化的样式。
//@mixin 定义
@mixin large-text {
font: {
family: Arial;
size: 20px;
weight: bold;
}
color: #ff0000;
}
//@include 使用
.page-title {
@include large-text;
padding: 4px;
margin-top: 10px;
}
css
.page-title {
font-family: Arial;
font-size: 20px;
font-weight: bold;
color: #ff0000;
padding: 4px;
margin-top: 10px;
}
@mixin link-colors($normal, $hover, $visited) {
color: $normal;
&:hover {
color: $hover;
}
&:visited {
color: $visited;
}
}
.main1 {
a {
@include link-colors(blue, red, green);
}
}
生成
.main1 a {
color: blue;
}
.main1 a:hover {
color: red;
}
.main1 a:visited {
color: green;
}
当你@include混合器时,有时候可能会很难区分每个参数是什么意思,参数之间是一个什么样的顺序。为了解决这个问题,sass允许通过语法$name: value的形式指定每个参数的值。这种形式的传参,参数顺序就不必再在乎了,只需要保证没有漏掉参数即可:
a {
@include link-colors(
$normal: blue,
$visited: green,
$hover: red
);
}
选择器继承是说一个选择器可以继承为另一个选择器定义的所有样式。这个通过@extend语法实现,如下代码:

继承类下面的类,也会被继承

SassScript 支持 6 种主要的数据类型:
1, 2, 13, 10px"foo", 'bar', bazblue, #04a3f9, rgba(255,0,0,0.5)true, falsenull1.5em 1em 0 2em, Helvetica, Arial, sans-serif(key1: value1, key2: value2)#{} (Interpolation: #{})过 #{} 插值语句可以在选择器或属性名中使用变量:
$name: foo;
$attr: border;
p.#{$name} {
#{$attr}-color: blue;
}
css
p.foo {
border-color: blue;
}

当 @if 的表达式返回值不是 false 或者 null 时,条件成立,输出 {} 内的代码:

@if 声明后面可以跟多个 @else if 声明,或者一个 @else 声明。如果 @if 声明失败,Sass 将逐条执行 @else if 声明,如果全部失败,最后执行 @else 声明,例如:

@for 指令可以在限制的范围内重复输出格式,每次按要求(变量的值)对输出结果做出变动。这个指令包含两种格式:
@for $var from ,或者 @for $var from
区别在于 through 与 to 的含义:当使用 through 时,条件范围包含 与 的值,而使用 to 时条件范围只包含 的值不包含 的值。
另外,$var 可以是任何变量,比如 $i; 和 必须是整数值。

@each 指令的格式是 $var in , $var 可以是任何变量名,比如 $length 或者 $name,而 是一连串的值,也就是值列表。
@each 将变量 $var 作用于值列表中的每一个项目,然后输出结果,例如:

@while 指令重复输出格式直到表达式返回结果为 false。这样可以实现比 @for 更复杂的循环,只是很少会用到。例如:

@function 与 mixin 相同,也可以传递若干个全局变量给函数作为参数。一个函数可以含有多条语句,需要调用 @return 输出结果。

https://sass-lang.com/documentation/modules/
从 Dart Sass 3.0.0 开始,全局内置函数(如 map-get、lighten 等)将被移除,必须通过模块化语法 @use 导入 sass:xxx 模块后才能使用。以下是基于新规范的分类整理,包含各模块的常用函数及使用示例:
sass:core)包含最基础的工具函数(无需显式导入,部分函数默认可用,但建议显式导入)。
| 函数 | 作用 | 示例 |
|---|---|---|
if($condition, $if-true, $if-false) |
条件判断 | @use "sass:core"; core.if(true, 10, 20) → 10 |
feature-exists($feature) |
检查CSS特性支持 | core.feature-exists(flexbox) → true |
sass:list)处理列表(有序值集合)的函数,需通过 @use "sass:list" 导入。
| 函数 | 作用 | 示例 |
|---|---|---|
list.length($list) |
获取列表长度 | list.length(10px 20px) → 2 |
list.nth($list, $index) |
获取指定索引值(索引从1开始) | list.nth(10px 20px, 2) → 20px |
list.append($list, $value) |
向列表添加值 | list.append(10px, 20px) → 10px 20px |
list.index($list, $value) |
查找值的索引 | list.index(10px 20px, 20px) → 2 |
使用示例:
@use "sass:list";
$sizes: 10px 20px 30px;
@debug list.length($sizes); // 输出 3
@debug list.nth($sizes, 2); // 输出 20px
sass:map)处理键值对映射的函数,需通过 @use "sass:map" 导入。
| 函数 | 作用 | 示例 |
|---|---|---|
map.get($map, $key) |
获取映射中键的值 | map.get(($a: 1), $a) → 1 |
map.keys($map) |
返回所有键的列表 | map.keys(($a:1, $b:2)) → ($a, $b) |
map.has-key($map, $key) |
判断是否包含键 | map.has-key(($a:1), $a) → true |
map.merge($map1, $map2) |
合并两个映射 | map.merge(($a:1), ($b:2)) → ($a:1, $b:2) |
使用示例:
@use "sass:map";
$theme: (primary: #42b983, secondary: #35495e);
@debug map.get($theme, primary); // 输出 #42b983
@debug map.keys($theme); // 输出 (primary, secondary)
sass:color)处理颜色的函数,需通过 @use "sass:color" 导入。
| 函数 | 作用 | 示例 |
|---|---|---|
color.lighten($color, $amount) |
提亮颜色 | color.lighten(#ff0000, 20%) → 亮红色 |
color.darken($color, $amount) |
加深颜色 | color.darken(#ff0000, 20%) → 暗红色 |
color.rgba($color, $alpha) |
调整透明度 | color.rgba(#ff0000, 0.5) → 半透明红 |
color.red($color) |
提取红色通道值 | color.red(#ff0000) → 255 |
使用示例:
@use "sass:color";
$primary: #42b983;
@debug color.lighten($primary, 10%); // 输出 #5fca99
@debug color.rgba($primary, 0.8); // 输出 rgba(66, 185, 131, 0.8)
sass:math)处理数值计算的函数,需通过 @use "sass:math" 导入(注意:math 模块需显式启用 precision 等配置)。
| 函数 | 作用 | 示例 |
|---|---|---|
math.abs($number) |
取绝对值 | math.abs(-10) → 10 |
math.ceil($number) |
向上取整 | math.ceil(3.2) → 4 |
math.round($number) |
四舍五入 | math.round(3.5) → 4 |
math.percentage($number) |
转为百分比 | math.percentage(0.5) → 50% |
使用示例:
@use "sass:math";
$width: 150px;
@debug math.div($width, 2); // 输出 75px(替代 / 运算)
@debug math.percentage(0.3); // 输出 30%
sass:string)处理字符串的函数,需通过 @use "sass:string" 导入。
| 函数 | 作用 | 示例 |
|---|---|---|
string.length($string) |
字符串长度 | string.length("hello") → 5 |
string.index($string, $substring) |
查找子串位置 | string.index("hello", "ll") → 3 |
string.to-upper-case($string) |
转为大写 | string.to-upper-case("hello") → "HELLO" |
使用示例:
@use "sass:string";
$className: "active";
@debug string.length($className); // 输出 6
@debug string.to-upper-case($className); // 输出 "ACTIVE"
sass:selector)处理 CSS 选择器的函数,需通过 @use "sass:selector" 导入。
| 函数 | 作用 | 示例 |
|---|---|---|
selector.nest($selectors...) |
嵌套选择器 | selector.nest(".a", "&:hover") → ".a:hover" |
selector.append($selectors...) |
拼接选择器 | selector.append(".a", ".b") → ".a.b" |
使用示例:
@use "sass:selector";
@debug selector.nest(".parent", ".child") → ".parent .child";
@debug selector.append(".btn", "--primary") → ".btn--primary";
@use "sass:模块名" 导入(如 @use "sass:color"),函数需通过 模块名.函数名 调用(如 color.lighten(...))。@use "sass:color" as c; 简化调用(如 c.lighten(...))。完整的模块及函数列表可参考官方文档:Sass 模块化函数。
npm install sass --save-dev
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
// https://vite.dev/config/
export default defineConfig({
plugins: [vue(), vueDevTools()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "@/assets/style.scss";`,
},
},
},
})
登录查看全部
参与评论
手机查看
返回顶部