Sass与Less的特性与区别

前言

Sass和Less简介

Sass

Sass是一种CSS预处理器,它使用一个更加强大的语法来编写CSS。Sass允许使用变量、嵌套、混合(mixins)、继承等功能,从而提高代码的可重用性和可维护性。

Less

Less也是一种CSS预处理器,它同样提供了变量、混合、函数等特性。Less的语法相对简单,易于上手,它可以在服务器端编译。

Sass与Less对比

变量

Sass

css 复制代码
$primary-color: #42b983;

.button {
  background: $primary-color;
}

Less

less 复制代码
@primary-color: #42b983;

.button {
  background: @primary-color;
}

嵌套

Sass

css 复制代码
.nav {
  ul {
    li {
      a {
        color: blue;
      }
    }
  }
}

Less

与Sass相同

Mixin(混入)

Sass

css 复制代码
@mixin flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}

.box {
  @include flex-center;
}

Less

css 复制代码
.flex-center() {
  display: flex;
  justify-content: center;
  align-items: center;
}

.box {
  .flex-center();
}

继承(Extend)

Sass

css 复制代码
%base {
  border: 1px solid #ccc;
  padding: 10px;
}
.card {
  @extend %base;
}

Less

css 复制代码
.base {
  border: 1px solid #ccc;
  padding: 10px;
}

.card {
  &:extend(.base);
}

运算

Sass

arduino 复制代码
.container {
  width: 600px + 200px; // 800px
}

Less

arduino 复制代码
.container {
  width: (600px + 200px); // 800px
}

条件语句

Sass

less 复制代码
$theme: light;

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

Less

less 复制代码
@theme: light;

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

循环

Sass

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

编译后:

css 复制代码
m-1 { 
	margin: 10px; 
} 
.m-2 { 
	margin: 20px; 
} 
.m-3 { 
	margin: 30px; 
}

Less

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

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

css 复制代码
m-1 { 
	margin: 10px; 
} 
.m-2 { 
	margin: 20px; 
} 
.m-3 { 
	margin: 30px; 
}

模块化与导入

Sass模块化

less 复制代码
// math 模块
@use "sass:math";

.container {
  width: math.div(600px, 960px) * 100%;
}

Less导入

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

css 复制代码
@import "variables.less";

.container {
  width: (600px / 960px * 100%);
}
相关推荐
沸点小助手1 分钟前
「国产龙虾谁能打过OpenClaw & 你敢让微信龙虾碰代码吗」沸点获奖名单公示|本周互动话题上新🎊
前端·后端·面试
skywalk81633 分钟前
请学习kotti的前端(kotti其实是没有分离的前端的)实现,做到形似kotti那样的前端页面。
前端·学习
UI设计兰亭妙微16 分钟前
兰亭妙微加载体验设计白皮书:从骨架屏到后台加载的全场景优化策略
前端·b端界面设计·ui设计公司
逆光如雪20 分钟前
移动端卡片边框怎么做高级?我用 CSS 实现了设计师的刁钻要求
前端·css·vue.js
scan72422 分钟前
龙虾读取session历史消息
java·前端·数据库
莹宝思密达27 分钟前
地图显示西安经济开发区边界线-2023.12
前端·vue.js·数据可视化
lizhongxuan42 分钟前
LLM Wiki:让大模型替你打理知识库的完整指南
前端·后端·面试
宇擎智脑科技1 小时前
Claude Code 源码分析(七):终端 UI 工程 —— 用 React Ink 构建工业级命令行界面
前端·人工智能·react.js·ui·claude code
dragon7251 小时前
Flutter错误处理机制
前端·flutter
数据知道1 小时前
claw-code 源码详细分析:Bootstrap Graph——启动阶段图式化之后,排障与扩展为什么会变简单?
前端·算法·ai·bootstrap·claude code·claw code