Примеси

Примеси (англ. mixin) позволяют добавлять существующие стилевые правила к другим селекторам. Это сокращает код, поскольку нам уже нет смысла повторять один и тот же фрагмент кода несколько раз, достаточно сослаться на него в нужном месте. Примеси в этом плане похожи на функции в языках программирования.

Примеси в Less это обычные селекторы классов или идентификаторы. В примере ниже мы создаём два класса — left-mixin и right-mixin для выравнивания элементов, соотвественно, по левому или правому краю веб-страницы. Если нам требуется повторить свойства у другого селектора, то мы пишем имя класса с точкой впереди — .left-mixin или .left-mixin(). Для идентификатора вызов будет как #left-mixin. Круглые скобки пишутся по желанию, они в данный момент не играют роли.

.left-mixin {
  float: left;
  margin: 0 10px 10px 0;
}
.right-mixin {
  float: right;
  margin: 0 0 10px 10px;
}
.img-left {
  .left-mixin;
  background: #f0f0f0;
  padding: 10px;
}
.img-right {
  .righ-mixin;
  background: #f0f0f0;
  padding: 10px;
}

На выходе мы получим такой стиль:

.left-mixin  {
  float: left;
  margin: 0 10px 10px 0;
}
.right-mixin {
  float: right;
  margin: 0 0 10px 10px;
}
.img-left {
  float: left;
  margin: 0 10px 10px 0;
  background: #f0f0f0;
  padding: 10px;
}
.img-right {
  float: right;
  margin: 0 0 10px 10px;
  background: #f0f0f0;
  padding: 10px;
}

Заметьте, что повторяющиеся свойства не группируются по селекторам и в коде остались наши классы left-mixin и right-mixin. Если они сами по себе не требуются и нужны лишь для вызова в других местах, то их можно убрать из CSS, добавив к имени класса круглые скобки. В остальном никаких изменений нет.

.left-mixin() {
  float: left;
  margin: 0 10px 10px 0;
}
.img-left {
  .left-mixin;
  background: #f0f0f0;
  padding: 10px;
}

В CSS останется только следующее:

.img-left {
  float: left;
  margin: 0 10px 10px 0;
  background: #f0f0f0;
  padding: 10px;
}

Скобки в примесях нужны ещё и для передачи в них переменных, как показано ниже.

.animation(@name, @time, @time-fun) {
  animation: @name @time @time-fun;
  -webkit-animation: @name @time @time-fun;
}
body {
  background: url(images/city.png) repeat-x 0 100% fixed,
  linear-gradient(to top, #5080b1, #004e8c) fixed;
  .animation(city, 30s, infinite);
}

Мы используем примесь с именем animation и передаём ей три переменные, которые подставляются в качестве параметров свойств animation и -webkit-animation. На выходе получим следующий код CSS:

body {
  background: url(images/city.png) repeat-x 0 100% fixed, 
  linear-gradient(to top, #5080b1, #004e8c) fixed;
  animation: city 30s infinite;
  -webkit-animation: city 30s infinite;
  }

Таким образом, примеси удобно использовать для свойств, которые работают в браузерах с префиксами, вроде animation. Это позволяет избежать ошибок при копировании значений, т. к. они заменяются компилятором автоматически.

См. также

Руководство по примесям

http://lesscss.org/features/#mixins-feature

Автор и редакторы

Автор: Влад Мержевич
Последнее изменение: 27.05.2016
Редакторы: Влад Мержевич