带你了解 Sass 和 Less 的不同

前言

Sass 和 Less 都是CSS的预处理器,其基本思想就是用编程的思路编写CSS代码。增加了变量,嵌套,函数,语句,继承等概念。有助于模块化开发,只需要改变变量,就可以获取到一套不一样的css 。最后 Less 文件和 Sass 文件都会生成css文件。

变量符

  • sass 使用 $ 定义
  • less 使用 @ 定义
css 复制代码
$font_color: red;
.sass_tip {
    color: $font_color;
    font-size: 30px;
}
css 复制代码
@font_color: red;
.less_tip {
  color: @font_color;
  font-size: 20px;
}

变量名

  • sass 使用 $ 定义好变量,填入属性名的时候使用 #{},里面包含变量
  • less 使用 @ 定义好变量,@{}里面包含定义好的变量
css 复制代码
$left: left;
.sass_tip {
  padding-#{$left}: 10px;
}
css 复制代码
@colorName: color;
.less_tip {
    @{colorName}: blue;
}

嵌套

  • sass 的 css 名嵌套使用,结构层级清晰明了,伪类使用 &:
  • less 的嵌套使用跟 sass 一样,伪类也是使用 & 开头
css 复制代码
.sass_box {
  width: 100px;
  height: 100px;
  border: 1px solid red;
  .sass_tip {
    font-size: 20px;
    color: blue;
    &:hover {
      color: black;
    }
  }
}
css 复制代码
.less_box {
  width: 100px;
  height: 100px;
  border: 1px solid red;
  .less_tip {
    font-size: 20px;
    color: blue;
    &:hover {
      color: black;
    }
  }
}

混合(Mixins)

  • sass 使用 @mixin 定义,@include 使用,可传入参数并定义默认值
  • less 使用 .style 定义,.style 使用,可传入参数并定义默认值
css 复制代码
@mixin tipStyle($color: red) {
  font-size: 20px;
  color: $color;
}
.sass_tip {
  @include tipStyle(blue);
}
css 复制代码
.tipStyle (@color: red) {
  color: @color;
  font-size: 20px;
}
.less_tip {
  .tipStyle(blue);
}

条件语句

  • sass 支持使用 if、else、for、while等语句
  • less 暂不支持使用
js 复制代码
// 条件语句
.sass_tip {
  @if 10 > 1 { color: blue; }
}

// if else 语句
.sass_tip {
    @if 1 {
      color: red;
    }@else if 2 {
      color: blue;
    }@else {
      color: white;
    }
}

继承

如果一个元素的样式和另一个元素的样式完全一样,这个元素无需再写一遍重复的样式,使用继承就可以把另一个元素的所有样式全部继承过来

  • sass 继承使用 @extend 后面加上要继承的 class 名
  • less 继承可以在 css 名后面拼接:(.要继承的 class 名),或者属性内写 &:extend(.要继承的 class 名);
css 复制代码
.sass_text {
  font-size: 20px;
  color: blue;
}
.sass_tip {
  @extend .sass_text;
}
css 复制代码
.less_text {
  color: blue;
  font-size: 20px;
}
.less_tip:extend(.less_text) {
  margin-top: 10px;
}

// 另一种继承方式
.less_tip {
  &:extend(.less_text);
}

运算

sass 和 less 都可以直接使用 + - * / 等符号进行运算

css 复制代码
.sass_tip {
    font-size: 100-50px;
  }
css 复制代码
.less_tip {
  font-size: 100-50px;
}

作用域

  • sass 作用域的查找方式与javaScript基本相同,,也是由内层向外层查找
  • less 的作用域如果父级没有,则往全局寻找,如果父级有,则优先选择父级的变量
css 复制代码
$font_color: red; // 全局
.sass_box {
  width: 100px;
  height: 100px;
  border: 1px solid red;
  $font_color: blue; // 父级
  .sass_tip {
    color: $font_color;
  }
}
css 复制代码
@font_color: red; // 全局
.less_box {
  width: 100px;
  height: 100px;
  border: 1px solid red;
  @font_color: blue; // 父级
  .less_tip {
    color: @font_color; // 优先使用父级
  }
}

总结

总的来说 Sass 和 Less 能让我们编写 css 变得更加顺畅,于常规的 css 比较多了模块化、变量、继承等丰富的功能,它们之间的区别最大就是语法方面的不同,相对之中 Sass 会更加成熟,热度也高,而 Less 使用上手较简单些。

相关推荐
BigTopOne4 小时前
【WebRtc】DTLS-SRTP 加密完整流程详解
前端
陈随易4 小时前
pm2 替代品,nodejs&bun 线上部署必备工具
前端·后端·程序员
单线程_014 小时前
从案例分析 Vue3 Tokenizer 源码一
前端·javascript·vue.js
BigTopOne4 小时前
【WebRtc】-ICE Candidate 与 STUN/TURN 原理详解
前端
l1258654 小时前
# LangGraph Memory机制深度解析:短期记忆与长期记忆的工程实践
前端·人工智能·python·langchain·bootstrap
码视野5 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
大模型码小白5 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
xm_xm_xm_16 小时前
react17版本以前类组件常用操作
前端·javascript·react.js
ly76897 小时前
Web 性能优化实战:从 Core Web Vitals 到工程化性能治理
前端·性能优化
冬奇Lab7 小时前
一天一个开源项目(第200篇):next-forge - 生产级 Next.js SaaS 启动模板
前端·前端框架·开源