Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Сопоставление с образцом

В Less можно объявить несколько миксинов с одним именем. При вызове Less сравнивает аргументы с объявлениями и применяет все подходящие. Это называется сопоставлением с образцом (pattern matching). Так один вызов выбирает нужный вариант стилей без условий.

Выбор по значению

Вместо имени параметра в объявлении можно написать конкретное значение. Тогда миксин подходит только для вызова с этим значением. Опишите варианты сообщения в styles/mixins.less:

// styles/mixins.less
.alert(success) {
  color: #166534;
  background: #dcfce7;
}
 
.alert(danger) {
  color: #991b1b;
  background: #fee2e2;
}
 
.alert(@_) {
  padding: 12px 16px;
  border-radius: 8px;
}

@_ — параметр, имя которого не важно: он подходит для любого значения. Поэтому общие стили применяются всегда. Вызовите миксин:

// styles/components/alerts.less
.alert-success {
  .alert(success);
}
 
.alert-danger {
  .alert(danger);
}
// styles/main.less
@import "mixins";
@import "components/alerts";
.alert-success {
  color: #166534;
  background: #dcfce7;
  padding: 12px 16px;
  border-radius: 8px;
}
.alert-danger {
  color: #991b1b;
  background: #fee2e2;
  padding: 12px 16px;
  border-radius: 8px;
}
<style>
  .alert-success {
    color: #166534;
    background: #dcfce7;
    padding: 12px 16px;
    border-radius: 8px;
  }
  .alert-danger {
    color: #991b1b;
    background: #fee2e2;
    padding: 12px 16px;
    border-radius: 8px;
  }
</style>
 
<div class="alert-success">Пост опубликован.</div>
<div class="alert-danger" style="margin-top: 8px">Не удалось сохранить пост.</div>

Каждый класс получил свои цвета и общие отступы из .alert(@_).

Выбор по числу аргументов

Миксины с одним именем различаются и количеством параметров. Less выберет тот, которому подходит число переданных значений:

// styles/main.less
.size(@side) {
  width: @side;
  height: @side;
}
 
.size(@width; @height) {
  width: @width;
  height: @height;
}
 
.avatar {
  .size(48px);
}
 
.banner {
  .size(100%; 240px);
}
.avatar {
  width: 48px;
  height: 48px;
}
.banner {
  width: 100%;
  height: 240px;
}

Переменное число аргументов

Многоточие после имени параметра собирает все оставшиеся аргументы в одну переменную. Так пишут миксины для свойств, которые принимают список, например несколько теней:

// styles/main.less
.shadows(@list...) {
  box-shadow: @list;
}
 
.card {
  .shadows(0 1px 2px #d1d5db, 0 4px 12px #e5e7eb;);
}
.card {
  box-shadow: 0 1px 2px #d1d5db, 0 4px 12px #e5e7eb;
}

Точка с запятой в конце вызова говорит Less: запятые внутри — это часть значения, а не разделители аргументов.

Частая ошибка

Без завершающей точки с запятой Less считает каждую тень отдельным аргументом и склеивает их пробелом:

// styles/main.less
.shadows(@list...) {
  box-shadow: @list;
}
 
.card {
  .shadows(0 1px 2px #d1d5db, 0 4px 12px #e5e7eb);
}
.card {
  box-shadow: 0 1px 2px #d1d5db 0 4px 12px #e5e7eb;
}

Запятая пропала, и браузер отбросит неверное значение box-shadow. Когда передаёте значение со списком через запятую, ставьте ; в конце вызова.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.