Encodera

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

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

Оглавление

Отсоединённые наборы правил

Отсоединённый набор правил (detached ruleset) — это блок объявлений и правил в фигурных скобках, сохранённый в переменную. Его можно вызвать в любом месте или передать в миксин как аргумент. Главная польза — миксин, который оборачивает ваш блок стилей, например в медиазапрос. В Sass для этого служит @content.

Набор правил в переменной

Сохраните блок стилей в переменную и вызовите его со скобками:

// styles/main.less
@focus-ring: {
  outline: 2px solid #2563eb;
  outline-offset: 2px;
};
 
.btn:focus-visible {
  @focus-ring();
}
 
.field:focus-visible {
  @focus-ring();
}
.btn:focus-visible {
  outline: 2px solid #2563eb;
  outline-offset: 2px;
}
.field:focus-visible {
  outline: 2px solid #2563eb;
  outline-offset: 2px;
}
<style>
  .btn:focus-visible {
    outline: 2px solid #2563eb;
    outline-offset: 2px;
  }
  .field:focus-visible {
    outline: 2px solid #2563eb;
    outline-offset: 2px;
  }
</style>
 
<button class="btn">Нажмите Tab</button>
<input class="field" placeholder="Заголовок поста">

Нажмите Tab, чтобы перейти на кнопку и поле: у каждого появится синяя рамка фокуса.

Блок стилей как аргумент миксина

Миксин может принимать набор правил и вставлять его внутрь медиазапроса. Опишите его в styles/mixins.less:

// styles/mixins.less
.desktop(@rules) {
  @media (min-width: 768px) {
    @rules();
  }
}

Передайте блок в фигурных скобках прямо при вызове:

// styles/components/cards.less
.card {
  padding: 16px;
 
  .desktop({
    padding: 32px;
    display: flex;
  });
}
// styles/main.less
@import "mixins";
@import "components/cards";
.card {
  padding: 16px;
}
@media (min-width: 768px) {
  .card {
    padding: 32px;
    display: flex;
  }
}

Точка перелома записана один раз — в миксине. Если она изменится, вы правите одну строку, а не каждый медиазапрос.

Вложенные правила внутри набора

Набор может содержать не только объявления, но и правила с &:

// styles/main.less
@hover-dark: {
  &:hover {
    background: #111827;
  }
};
 
.btn {
  background: #2563eb;
  @hover-dark();
}
.btn {
  background: #2563eb;
}
.btn:hover {
  background: #111827;
}

& подставил селектор того правила, где набор вызван.

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

Набор правил вызывается только со скобками. Без них Less считает запись обращением к значению карты и останавливается:

// styles/main.less
@focus-ring: {
  outline: 2px solid #2563eb;
};
 
.btn:focus-visible {
  @focus-ring;
}

Компиляция падает с ошибкой Missing '[...]' lookup in variable call. Пишите @focus-ring();.

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

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