当前位置: 首页 > news >正文

Sass和Less的区别【前端】

目录

  • Sass
    • Sass的定义
    • 写法
    • 主要特性:
      • 变量
      • 嵌套
      • Mixin(混入)
      • 继承(Extend)
      • 运算
      • 条件语句
      • 循环
      • 模块化
  • Less
    • Less的定义
    • 写法
    • 主要特性:
      • 变量
      • 嵌套
      • Mixin(混入)
      • 继承(Extend)
      • 运算
      • 条件语句
      • 循环
      • 导入
  • 对比表
  • 什么时候用 Sass?什么时候用 Less?
    • 推荐用 Sass 的情况
    • 推荐用 Less 的情况

Sass

Sass的定义

Sass 是一种 CSS 预处理器(CSS Preprocessor),它扩展了 CSS 的功能。

写法

主要有两种语法:

  • .sass(缩进语法,不用大括号和分号,较老)
  • .scss(Sassy CSS,语法几乎和 CSS 一样,现在主流写法)

主要特性:

  • 变量($color)
  • 嵌套规则
  • Mixin(混入)
  • 继承(@extend)
  • 控制语句(@if、@for、@each)
  • 模块化(@use / @forward)

变量

$primary-color: #42b983;.button {background: $primary-color;
}

嵌套

.nav {ul {li {a {color: blue;}}}
}

Mixin(混入)

@mixin flex-center {display: flex;justify-content: center;align-items: center;
}.box {@include flex-center;
}

继承(Extend)

%base {border: 1px solid #ccc;padding: 10px;
}.card {@extend %base;
}

运算

.container {width: 600px + 200px; // 800px
}

条件语句

$theme: light;@if $theme == light {body { background: white; }
} @else {body { background: black; }
}

循环

@for $i from 1 through 3 {.m-#{$i} {margin: $i * 10px;}
}

编译后:

m-1 { margin: 10px; 
} 
.m-2 { margin: 20px; 
} 
.m-3 { margin: 30px; 
}

模块化

// math 模块
@use "sass:math";.container {width: math.div(600px, 960px) * 100%;
}

Less

Less的定义

Less 也是一种 CSS 预处理器,与 Sass 类似,但更简洁、更接近 CSS。

写法

直接写 .less 文件,语法和 CSS 几乎一样,只是加了一些增强功能。

主要特性:

  • 变量(@color)
  • 嵌套规则
  • Mixin(.center())
  • 运算((100px + 50px))
  • 函数(lighten()、darken())
  • 条件 & 循环(通过 when 和递归实现)

变量

@primary-color: #42b983;.button {background: @primary-color;
}

嵌套

.nav {ul {li {a {color: blue;}}}
}

Mixin(混入)

.flex-center() {display: flex;justify-content: center;align-items: center;
}.box {.flex-center();
}

继承(Extend)

.base {border: 1px solid #ccc;padding: 10px;
}.card {&:extend(.base);
}

运算

.container {width: (600px + 200px); // 800px
}

条件语句

@theme: light;body when (@theme = light) {background: white;
}
body when (@theme = dark) {background: black;
}

循环

.loop(@i) when (@i <= 3) {.m-@{i} {margin: (@i * 10px);}.loop(@i + 1);
}
.loop(1);

编译结果一样,但 Less 需要递归写法。
编译后:

m-1 { margin: 10px; 
} 
.m-2 { margin: 20px; 
} 
.m-3 { margin: 30px; 
}

导入

(Less 只有 @import,没有 Sass 的模块系统)

@import "variables.less";.container {width: (600px / 960px * 100%);
}

对比表

对比点SassLess
诞生背景2006 年,由 Ruby 社区开发,后有 Dart 实现(dart-sass,现在是官方主流)2009 年,由 JS 社区开发,更贴近前端生态
语言依赖早期依赖 Ruby,现在用 Dart 或 Node.js 编译(推荐 dart-sass基于 JavaScript,Node.js/浏览器就能直接跑
文件后缀.scss(推荐)或 .sass(缩进风格).less
变量符号$(如 $primary-color: #42b983;@(如 @primary-color: #42b983;
语法风格功能全面,支持逻辑(循环、条件)、函数库(math、color 等)语法更接近 CSS,学习曲线平滑,功能相对轻量
编译速度dart-sass 性能好,活跃维护less 编译也快,但生态热度下降
生态支持Bootstrap、Foundation、Angular、Vue CLI 默认推荐Ant Design、Element UI、国内前端 UI 库多用 Less
社区活跃度活跃度高、功能持续增强维护正常,但更新较慢
兼容性.scss 语法几乎是 CSS 超集,可以直接把 .css 改成 .scss和 CSS 也很接近,但部分写法(运算等)需要额外括号

什么时候用 Sass?什么时候用 Less?

推荐用 Sass 的情况

  • 大型/国际化项目,需要更复杂的样式逻辑(函数、循环、条件判断)。
  • 团队需要长期维护,追求更强的功能和生态。
  • 框架或工具链默认集成 Sass(如 Vue CLI、Angular、Bootstrap 5)。

推荐用 Less 的情况

  • 项目依赖国内 UI 库(Ant Design、Element UI、iView 等),它们本身就是用 Less 写的 →方便覆盖变量定制主题。
  • 中小型项目,需求简单,团队更习惯接近原生 CSS 的写法。
  • 想快速上手,前端环境(Node.js、浏览器)就能直接用。
http://www.dtcms.com/a/394918.html

相关文章:

  • Kotlin互斥锁Mutex协程withLock实现同步
  • Seedream 4.0 测评|AI 人生重开:从极速创作到叙事实践
  • vscode clangd 保姆教程
  • MySQL时间戳转换
  • 【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
  • 分布式专题——17 ZooKeeper经典应用场景实战(下)
  • TDengine 2.6 taosdump数据导出备份 导入恢复
  • 探索 Yjs 协同应用场景 - 分布式撤销管理
  • 【软考中级 - 软件设计师 - 基础知识】数据结构之栈与队列​
  • LeetCode 385 迷你语法分析器 Swift 题解:从字符串到嵌套数据结构的解析过程
  • windows系统使用sdkman管理java的jdk版本,WSL和Git Bash哪个更能方便管理jdk版本
  • 生产环境K8S的etcd备份脚本
  • Mac电脑多平台Git账号配置
  • Etcd详解:Kubernetes的大脑与记忆库
  • 深刻理解PyTorch中RNN(循环神经网络)的output和hn
  • 大模型如何赋能写作:从创作到 MCP 自动发布的全链路解析
  • C++设计模式之创建型模式:工厂方法模式(Factory Method)
  • 传输层协议——UDP/TCP
  • 三板汇茶咖空间签约“可信资产IPO与数链金融RWA”链改2.0项目联合实验室
  • 【MySQL】MySQL 表文件误删导致启动失败及无法外部连接解决方案
  • LVS简介
  • 如何将联系人从iPhone转移到iPhone的7种方法
  • 『 MySQL数据库 』MySQL复习(一)
  • 3005. 最大频率元素计数
  • ACP(七)优化RAG应用提升问答准确度
  • 鸿蒙:使用bindPopup实现气泡弹窗
  • Langchan4j 框架 AI 无限循环调用文件创建工具解决方案记录
  • Python GIS 开发里最核心的4个基础组件(理论+实操篇)
  • 关于跨域和解决方案
  • 学习日报 20250921|LoadingCache