Skip to content

SCSS Плейсхолдерные Селекторы (%placeholder)

Плейсхолдерные селекторы в SCSS - это мощная концепция, позволяющая определять наборы стилей, которые не выводятся непосредственно в скомпилированный CSS. Вместо этого они предназначены для расширения (через директиву @extend) другими селекторами. Это помогает избежать создания в CSS базовых классов, которые могут не использоваться напрямую в HTML, делая ваш код чище и эффективнее.

Определение плейсхолдерного селектора

Имя плейсхолдерного селектора начинается с символа процента %, за которым следует любое допустимое имя селектора.

Синтаксис:

scss
%placeholder-name {
  property: value;
  property: value;
  // ... другие стили
}

Пример:

scss
%button-base {
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
  color: white;
  font-size: 16px;
  cursor: pointer;
}

В этом примере %button-base определяет набор базовых стилей для кнопок, но сам по себе не будет скомпилирован в CSS.

Расширение плейсхолдерного селектора (@extend)

Чтобы применить стили, определенные в плейсхолдерном селекторе, к обычному селектору, используется директива @extend.

Синтаксис:

scss
.selector {
  @extend %placeholder-name;
  // Дополнительные стили для .selector
}

Пример (продолжение предыдущего):

scss
%button-base {
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
  color: white;
  font-size: 16px;
  cursor: pointer;
}

.button-primary {
  @extend %button-base;
  background-color: green;
}

.button-secondary {
  @extend %button-base;
  background-color: gray;
  color: black;
}

При компиляции этого SCSS в CSS вы получите:

css
.button-primary, .button-secondary {
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
  color: white;
  font-size: 16px;
  cursor: pointer;
}

.button-primary {
  background-color: green;
}

.button-secondary {
  background-color: gray;
  color: black;
}

Как видите, стили из %button-base были применены к .button-primary и .button-secondary, а сам плейсхолдер %button-base не был выведен в CSS как отдельный класс.

Преимущества использования плейсхолдерных селекторов

  • Избежание ненужных классов в HTML: Вы определяете стили, которые предназначены только для наследования, и вам не нужно добавлять дополнительные классы в вашу HTML-разметку только для применения этих базовых стилей.
  • Чистый и организованный CSS: Ваш скомпилированный CSS содержит только те классы, которые действительно используются в вашей HTML-структуре.
  • Переиспользование стилей: Легко переиспользовать наборы стилей в разных компонентах или элементах.
  • Улучшенная поддержка: Изменения в плейсхолдерном селекторе автоматически применяются ко всем селекторам, которые его расширяют.

Использование вложенных плейсхолдерных селекторов

Плейсхолдерные селекторы могут быть вложены друг в друга, а также в обычные селекторы.

Пример:

scss
.container {
  %shared-heading {
    font-weight: bold;
    margin-bottom: 1em;
  }

  .article-title {
    @extend %shared-heading;
    font-size: 2em;
  }

  .section-title {
    @extend %shared-heading;
    font-size: 1.5em;
    color: navy;
  }
}

Компилируется в:

css
.container .article-title, .container .section-title {
  font-weight: bold;
  margin-bottom: 1em;
}

.container .article-title {
  font-size: 2em;
}

.container .section-title {
  font-size: 1.5em;
  color: navy;
}

Расширение нескольких плейсхолдерных селекторов

Один селектор может расширять несколько плейсхолдерных селекторов одновременно.

Пример:

scss
%base-styles {
  padding: 10px;
  border: 1px solid #ccc;
}

%rounded-corners {
  border-radius: 5px;
}

.alert-box {
  @extend %base-styles;
  @extend %rounded-corners;
  background-color: lightyellow;
  color: black;
}

Компилируется в:

css
.alert-box {
  padding: 10px;
  border: 1px solid #ccc;
  border-radius: 5px;
  background-color: lightyellow;
  color: black;
}

Отличия от обычных классов

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

Когда использовать плейсхолдерные селекторы

  • Для определения базовых стилей, которые будут использоваться несколькими похожими компонентами или элементами.
  • Для создания "абстрактных" стилей, которые сами по себе не имеют визуального представления, но предоставляют основу для других стилей.
  • Для следования принципу DRY (Don't Repeat Yourself), избегая дублирования стилей.

Заключение

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