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

相关推荐
四六的六37 分钟前
端侧模型多端部署实战:从格式转换到灰度发布,Web 和移动端统一部署流水线
前端·人工智能·大模型·ai编程·ai模型·ai产品·端侧ai
独隅3 小时前
前端离线暂停更新策略:Service Worker 与 PWA 的静默控制实践
前端
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十八):后台系统配置管理实现
前端·后端·go
用户938515635073 小时前
React 受控/非受控组件与 React.memo 性能优化——从本质到实战
前端·javascript·react.js
IT_陈寒3 小时前
Java并行流把我坑惨了:原来不是线程安全的!
前端·人工智能·后端
计科土狗4 小时前
GESP六级专题之类与对象
java·前端·数据库
anOnion4 小时前
构建无障碍组件之Listbox Pattern
前端·html·交互设计
凌涘4 小时前
前端路由(三):鉴权、拦截与重定向
前端
半个落月4 小时前
从零梳理 React Router:路由、懒加载、嵌套页面与登录鉴权
前端·react.js