前言
前端面试官灵魂拷问:"你为什么选 Less/Scss?"
你 🤨(内心OS):"因为...团队在用?文档推荐?别人都这么干?"
面试官 😅(微笑):"很好,可以回去等二面了。"
📍前端圈子里,这个场景是不是似曾相识?我们一边吐槽着"技术跟风",一边默默敲下 npm install less/sass
。
📍而选预处理器就像选咖啡------有人迷恋 Less 的简洁速溶,有人沉醉 SCSS 的现磨醇香。
📍盲目跟风?是时候来杯"技术清醒剂"了!

一、Less 和 SCSS:孪生兄弟还是宿敌?🤺
共同使命 :解决原生 CSS 的 嵌套地狱、变量缺失、逻辑薄弱 三大痛点。
本质区别 :Less 是 JavaScript 的温柔陷阱,SCSS 是 CSS 的暴力进化。
特性 | Less | SCSS (Sass) | 战场点评 🥊 |
---|---|---|---|
出身血统 | JavaScript 编写,运行时编译 | Ruby 诞生 (现 C/C++),编译时处理 | SCSS 性能通常更优 |
语法风格 | 类 CSS,可选括号/分号 | 完全兼容 CSS 语法 | .scss 文件可直接当 .css 用 |
变量符号 | @primary-color: #1890ff; |
$primary-color: #1890ff; |
$ 更符合开发者直觉 |
Mixin 能力 | 基础混入,逻辑较弱 | 支持参数、逻辑、内容块 | SCSS 是"带脑子的Mixin" |
函数与控制流 | 有限内置函数,条件/循环能力弱 | 强大函数库 ,支持 @if/@for/@each |
SCSS 可写真实样式逻辑 |
社区生态 | 较小,Ant Design 等国内项目偏爱 | 统治级生态 (Bootstrap, WordPress) | SCSS 插件多如牛毛 |
二、深度对决:谁是你的真命天子?👑
场景 1:你想写一个智能按钮组件
less
// Less 尝试(会报错!)
.button-variant(@color, @bg) {
color: @color;
background: @bg;
&:hover {
background: darken(@bg, 10%); // ✅ Less 内置函数可用
}
// ❌ Less 不支持条件语句!
if @bg == #fff {
border: 1px solid #eee;
}
}
scss
// SCSS 轻松实现
@mixin button-variant($color, $bg) {
color: $color;
background: $bg;
&:hover {
background: darken($bg, 10%); // ✅ 内置函数
}
// ✅ 支持条件判断
@if lightness($bg) > 70% {
border: 1px solid darken($bg, 15%);
}
}
结论:
💡 需要复杂样式逻辑?SCSS 吊打 Less。
场景 2:你想动态生成间距工具类
scss
// SCSS 循环生成 .mt-10, .mt-20...
$spacings: 0, 5, 10, 20;
@each $size in $spacings {
.mt-#{$size} { margin-top: #{$size}px; }
}
less
// Less 也能做,但...
.generate-margins(@sizes) {
.loop(@i) when (@i > 0) {
@size: extract(@sizes, @i);
.mt-@{size} {
margin-top: ~"@{size}px";
}
.loop(@i - 1);
}
.loop(length(@sizes));
}
@spacings: 5, 10, 20;
.generate-margins(@spacings);
结论:
🛠 基础循环两者都能做,SCSS 语法更直观,Less 像在解数学题。
场景 3:你想模块化引入组件样式
scss
// SCSS 模块系统(现代方案)
// _button.scss
$button-red: #ff4d4f; // 私有变量,外部无法访问
// main.scss
@use 'button'; // ✅ 命名空间隔离
.btn { color: button.$button-red; } // ❌ 错误!私有变量不可访问
less
// Less 的模块化(脆弱)
// button.less
@button-red: #ff4d4f; // 全局暴露!
// main.less
@import "button"; // ❌ 变量直接污染全局
.btn { color: @button-red; } // ✅ 但所有文件都能访问
结论:
🧩 SCSS 模块化是降维打击,Less 的全局作用域是项目膨胀后的噩梦。
三、灵魂拷问:你为什么用?🤔

选择 Less 的 真实理由:
- 项目轻量快速启动(比如 H5 活动页)🚀
- 团队熟悉 JS 生态(Webpack/Less-loader 开箱即用)📦
- 维护 Ant Design 类项目(历史选择一致性)🏛️

选择 SCSS 的 钢铁证据:
- 中大型项目工程化需求(模块化/设计系统)🏗️
- 需要复杂样式逻辑(主题切换/动态样式)🎨
- 拥抱主流生态(Bootstrap, WordPress, Shopify)🌍
⚠️ 警惕 "npm 趋势图决定论 ":
npm trends
显示 SCSS 下载量是 Less 的 2-3 倍,但这不该是你的决策依据!
四、终极决策指南 🧭

黄金法则:
✨ Less 是 CSS 的快捷方式,SCSS 是 CSS 的进化形态。
当你需要
if/else
、for
循环、函数封装时------SCSS 是唯一选择;当你只想嵌套变量、快速开发------Less 和 SCSS 都是合格选项。
结语:工具是仆人,不是主人 🛠️
下次再有人问你"为什么用 Less/Scss",请直视 TA 的眼睛回答:

"我选 Less,因为它完美匹配了我们 Ant Design 技术栈的轻量需求。 "
或
"我选 SCSS,因为我们的设计系统需要 mixin 逻辑和模块化隔离。"
而不是支支吾吾:"额...因为 Vue CLI 默认装了它?" 🙈
记住:高手用菜刀也能雕花,但不会拒绝一把更锋利的刻刀。 选择的权利,永远在你手中。

下次再见!🌈
