LESS и SCSS (Sass) — это два разных препроцессора CSS, которые добавляют дополнительные функции для облегчения написания и поддержки стилей. Рассмотрим подробные отличия между ними с примерами:

1. Синтаксис переменных

LESS: В LESS переменные объявляются с помощью символа @.


@main-color: #3498db;

.button {
  background-color: @main-color;
}

SCSS: В SCSS переменные объявляются с помощью символа $.


$main-color: #3498db;

.button {
  background-color: $main-color;
}

2. Вложенность селекторов

Оба препроцессора поддерживают вложенные селекторы, что упрощает структуру стилей.

LESS:


.navbar {
  background-color: #333;
  
  .menu {
    color: white;
  }
}

SCSS: Вложенность в SCSS выглядит так же, как и в LESS.


.navbar {
  background-color: #333;
  
  .menu {
    color: white;
  }
}

3. Миксины (Mixins)

Миксины — это способ повторного использования блоков CSS-кода в обоих препроцессорах, но синтаксис у них отличается.

LESS: В LESS миксин создается просто как набор стилей, и его можно вызвать без специальных символов.


.border-radius(@radius) {
  border-radius: @radius;
}

.button {
  .border-radius(5px);
}

SCSS: В SCSS миксины определяются с помощью ключевого слова @mixin, а вызываются через @include.


@mixin border-radius($radius) {
  border-radius: $radius;
}

.button {
  @include border-radius(5px);
}

4. Операции с числами

Оба препроцессора поддерживают математические операции, но их синтаксис немного различается.

LESS:


@width: 100px;
@height: @width * 2;

.box {
  width: @width;
  height: @height;
}

SCSS:


$width: 100px;
$height: $width * 2;

.box {
  width: $width;
  height: $height;
}

5. Импорт файлов

Оба препроцессора поддерживают импорт других файлов, но SCSS делает это немного лучше.

LESS: LESS использует обычный @import для включения других файлов.


@import "buttons.less";

SCSS: SCSS также использует @import, но поддерживает не только SCSS-файлы, но и CSS.


@import "buttons.scss";

6. Функции

LESS имеет ограниченный набор встроенных функций для работы с цветами и числами.

LESS:


@color: #3498db;
.lighten-color: lighten(@color, 10%);

SCSS предоставляет более мощный набор встроенных функций, таких как работа с числами, строками, списками и картами.

SCSS:


$color: #3498db;
$lighten-color: lighten($color, 10%);

7. Операции со строками и списками

SCSS предоставляет более гибкие возможности для работы со строками и списками.

SCSS (строки):


$base-url: "http://example.com";
$path: "/images";

.full-url {
  content: url($base-url + $path);
}

LESS не поддерживает сложные операции со строками.

8. Extend (наследование)

Оба препроцессора поддерживают наследование, но синтаксис различается.

LESS: LESS использует символ :extend для наследования стилей.


.button {
  color: white;
}

.primary-button:extend(.button) {
  background-color: blue;
}

SCSS: SCSS использует оператор @extend.


.button {
  color: white;
}

.primary-button {
  @extend .button;
  background-color: blue;
}

Заключение

Оба препроцессора имеют схожие функции, такие как переменные, миксины и вложенные селекторы, но у них есть различия в синтаксисе и некоторых дополнительных возможностях. SCSS обладает более мощным функционалом и большим количеством встроенных функций, что делает его более гибким и расширяемым, в то время как LESS проще в изучении и используется многими для небольших проектов.

LESS больше подходит для тех, кто хочет расширить возможности CSS с минимальными изменениями, тогда как SCSS предоставляет более продвинутый инструментарий для работы с большими проектами и сложной логикой стилей.