带你了解 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 使用上手较简单些。

相关推荐
Luna-player20 分钟前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
lionliu051921 分钟前
js的扩展运算符的理解
前端·javascript·vue.js
小草cys34 分钟前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
奇舞精选35 分钟前
GELab-Zero 技术解析:当豆包联手中兴,开源界如何守住端侧 AI 的“最后防线”?
前端·aigc
奇舞精选38 分钟前
Vercel AI SDK:构建现代 Web AI 应用指南
前端·aigc
神仙别闹1 小时前
基于C语言实现B树存储的图书管理系统
c语言·前端·b树
玄魂2 小时前
如何查看、生成 github 开源项目star 图表
前端·开源·echarts
前端一小卒2 小时前
一个看似“送分”的需求为何翻车?——前端状态机实战指南
前端·javascript·面试
syt_10133 小时前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
遝靑3 小时前
Flutter 跨端开发进阶:可复用自定义组件封装与多端适配实战(移动端 + Web + 桌面端)
前端·flutter