比较 LESS 和 SASS 的三个方面及其使用技巧

LESS 和 SASS 的比较

LESS 和 SASS 是两种非常流行的 CSS 预处理器,它们为前端开发者提供了更好的编写 CSS 样式的方式。但是,在选择使用 LESS 还是 SASS 时,我们可能会面临一些困难,因为它们都提供了一些类似的功能,但也有很多不同之处。在本文中,我们将比较 LESS 和 SASS 的三个方面:变量、Mixin 和嵌套,以帮助您更好地了解它们之间的差异。

1. 变量

LESS 和 SASS 都允许您在样式表中使用变量。变量让您更轻松地创建和维护样式。在 LESS 中,定义变量使用 @ 符号,如下所示:

@primary-color: #4D926F;

.some-class {
  color: @primary-color;
}

在 SASS 中,定义变量使用 $ 符号:

$primary-color: #4D926F

.some-class
  color: $primary-color

需要注意的是,LESS 中的变量值可以动态地改变,而 SASS 中的变量值只能在定义时设置。

@primary-color: #4D926F;
@bg-color: @primary-color;

.some-class {
  background-color: @bg-color;
}

@primary-color: #000;

.some-class-2 {
  background-color: @bg-color;
}
$primary-color: #4D926F
$bg-color: $primary-color

.some-class
  background-color: $bg-color

$primary-color: #000

.some-class-2
  background-color: $bg-color

如果您想改变 LESS 中的变量值,那么在赋新值之后,任何引用它的样式都将自动更新。但是在 SASS 中,您需要重新编译整个样式表才能更新变量的值。

2. Mixin

Mixin 允许在多个元素之间共享代码。在 LESS 中,定义 Mixin 时使用 . 符号:

.transition(@transition-property: all, @transition-time: 0.5s, @transition-timing-function: ease) {
  -webkit-transition: @transition-property @transition-time @transition-timing-function;
  -moz-transition: @transition-property @transition-time @transition-timing-function;
  -o-transition: @transition-property @transition-time @transition-timing-function;
  transition: @transition-property @transition-time @transition-timing-function;
}

.some-class {
  .transition(opacity 0.4s);
}

在 SASS 中,使用 @mixin 关键字来定义 Mixin:

@mixin transition($transition-property: all, $transition-time: 0.5s, $transition-timing-function: ease) {
  -webkit-transition: $transition-property $transition-time $transition-timing-function;
  -moz-transition: $transition-property $transition-time $transition-timing-function;
  -o-transition: $transition-property $transition-time $transition-timing-function;
  transition: $transition-property $transition-time $transition-timing-function;
}

.some-class
  @include transition(opacity 0.4s)

LESS 中的 Mixin 有一个很好的特性:允许多重继承。这意味着您可以从多个 Mixin 中继承并使用其中的代码。

.rounded-corners(@radius: 5px) {
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
  -ms-border-radius: @radius;
  -o-border-radius: @radius;
  border-radius: @radius;
}

.button-style(@btn-color: #fff, @btn-padding: 5px) {
  color: @btn-color;
  padding: @btn-padding;
}

.button(@radius: 5px, @btn-color: #fff, @btn-padding: 5px) {
  .button-style(@btn-color, @btn-padding);
  .rounded-corners(@radius);
}

.some-class {
  .button(10px, #00ff00, 10px);
}

SASS 中也支持 Mixin 嵌套,但不能像 LESS 中一样进行多重继承。

3. 嵌套

用 LESS 和 SASS 编写 CSS 时,您可以使用嵌套语法来组织样式。在 LESS 中,嵌套使用 {}& 符号:

.container {
  h1 {
    font-size: 24px;
    &:hover {
      text-decoration: underline;
    }
  }
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
    li {
      display: inline-block;
      margin-right: 10px;
    }
  }
}

在 SASS 中,则使用缩进来表示嵌套关系:

.container
  h1
    font-size: 24px
    &:hover
      text-decoration: underline

  ul
    margin: 0
    padding: 0
    list-style: none
    li
      display: inline-block
      margin-right: 10px

在嵌套的样式中,LESS 中的 & 符号允许您访问包含选择器,而 SASS 中使用 & 来连接两个选择器。

总结

在比较 LESS 和 SASS 时,了解变量、Mixin 和嵌套语法是非常重要的。虽然它们都有相似的功能,但它们之间存在一些细微的差异。根据您的需求选择其中一种预编译器是合适的,但需要注意的是,您选择的预编译器会影响整个开发生命周期。这意味着,选择其中之一是一项长期决策,不能轻易更换。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a891a3add4f0e0ff1b6ab9


纠错反馈