Spec-Zone.ru › Sass

Интерполяция

Разделы страницы

  • В SassScript
  • Строки в кавычках

Интерполяция может быть использована практически в любом месте в стиле Sass для вставки результата выражения SassScript в фрагмент CSS. Просто оберните выражение в #{} в любом из следующих мест:

  • Селекторы в правилах стилей
  • Имена свойств в объявлениях
  • Значения пользовательских свойств
  • CSS правила
  • @extend
  • Простые CSS @import
  • Строки в кавычках или без них
  • Специальные функции
  • Имена функций CSS
  • Громкие комментарии
@mixin corner-icon($name, $top-or-bottom, $left-or-right) {
  .icon-#{$name} {
    background-image: url("/icons/#{$name}.svg");
    position: absolute;
    #{$top-or-bottom}: 0;
    #{$left-or-right}: 0;
  }
}

@include corner-icon("mail", top, left);
// SASS
@mixin corner-icon($name, $top-or-bottom, $left-or-right)
  .icon-#{$name}
    background-image: url("/icons/#{$name}.svg")
    position: absolute
    #{$top-or-bottom}: 0
    #{$left-or-right}: 0



@include corner-icon("mail", top, left)
/* CSS */
.icon-mail {
  background-image: url("/icons/mail.svg");
  position: absolute;
  top: 0;
  left: 0;
}

В SassScript

Совместимость (Современный синтаксис):
Dart Sass
✓
LibSass
✗
Ruby Sass
с версии 4.0.0 (не выпущено)
➤

LibSass и Ruby Sass в настоящее время используют более старый синтаксис для разбора интерполяции в SassScript. В большинстве практических случаев он работает так же, но может вести себя странно вокруг операторов. Подробности см. в этом документе.

Интерполяция может быть использована в SassScript для вставки SassScript в нецитируемые строки. Это особенно полезно при динамическом генерировании имён (например, для анимаций) или при использовании значений, разделённых косой чертой. Обратите внимание, что интерполяция в SassScript всегда возвращает нецитируемую строку.

@mixin inline-animation($duration) {
  $name: inline-#{unique-id()};

  @keyframes #{$name} {
    @content;
  }

  animation-name: $name;
  animation-duration: $duration;
  animation-iteration-count: infinite;
}

.pulse {
  @include inline-animation(2s) {
    from { background-color: yellow }
    to { background-color: red }
  }
}
// SASS
@mixin inline-animation($duration)
  $name: inline-#{unique-id()}

  @keyframes #{$name}
    @content


  animation-name: $name
  animation-duration: $duration
  animation-iteration-count: infinite


.pulse
  @include inline-animation(2s)
    from
      background-color: yellow
    to
      background-color: red
/* CSS */
.pulse {
  animation-name: inline-uifpe6h;
  animation-duration: 2s;
  animation-iteration-count: infinite;
}
@keyframes inline-uifpe6h {
  from {
    background-color: yellow;
  }
  to {
    background-color: red;
  }
}

💡 Интересный факт:

Интерполяция полезна для вставки значений в строки, но помимо этого она редко необходима в выражениях SassScript. Вам определенно не нужно её использовать, чтобы просто использовать переменную в значении свойства. Вместо color: #{$accent} можно просто написать color: $accent!

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

Sass обладает мощной арифметикой единиц, которую можно использовать вместо этого. Например, вместо #{$width}px напишите $width * 1px — или, что ещё лучше, объявите переменную $width с точки зрения px с самого начала. Таким образом, если у $width уже есть единицы, вы получите приятное сообщение об ошибке вместо компиляции бессмысленного CSS.

Строки в кавычках

В большинстве случаев интерполяция вставляет точно такой же текст, который был бы использован, если бы выражение было использовано в качестве значения свойства. Но есть одно исключение: кавычки вокруг строк в кавычках удаляются (даже если эти строки в кавычках находятся в списках). Это позволяет создавать строки в кавычках, содержащие синтаксис, который недопустим в SassScript (например, селекторы), и интерполировать их в правила стилей.

.example {
  unquoted: #{"string"};
}
// SASS
.example
  unquoted: #{"string"}
/* CSS */
.example {
  unquoted: string;
}

Хотя может быть соблазнительно использовать эту функцию для преобразования строк в кавычках в строки без кавычек, гораздо яснее использовать функцию string.unquote(). Вместо #{$string} напишите string.unquote($string)!

© 2006–2025 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/interpolation

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API