Spec-Zone.ru › Sass

Специальные функции

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

  • if()
  • url()
  • element(), progid:...() и expression()

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

if()

Совместимость (calc()):
Dart Sass
начиная с версии 1.95.0
LibSass
✗
Ruby Sass
✗
➤

LibSass, Ruby Sass и версии Dart Sass анализируют if() как функцию Sass с сигнатурой if($condition, $if-true, $if-false). Если $condition является истинным, эта функция возвращает $if-true; в противном случае она возвращает $if-false. У этой функции особый синтаксис, позволяющий не вычислять ветвь, которая не соответствует $condition.

Dart Sass версии 1.95.0 и выше анализируют if() так, как описано ниже. Dart Sass до версии 3.0.0 по-прежнему поддерживает старый синтаксис if(), но он считается устаревшим. См. раздел /d/if-function.

Sass поддерживает функцию CSS if() с одним важным дополнением: условие sass(...) принимает выражение SassScript и считается совпавшим, если выражение вычисляется в истинное значение. Функция if(), содержащая только условия sass(...) (и, при необходимости, else), будет полностью вычислена Sass и вернёт соответствующее значение.

SassScript в условиях функции if() допускается только внутри условия sass(...) или в интерполяции. Значения же представляют собой обычные выражения SassScript и не требуют специального обрамления. Будет вычислено только значение, условие которого совпало, поэтому в остальных значениях можно ссылаться на несуществующие переменные или вызывать функции, которые завершились бы ошибкой.

Если ни одно условие в чисто Sass-функции if() не совпадает, она возвращает null.

@use 'sass:meta';

$hungry: true;
@debug if(sass($hungry): breakfast burrito; else: cereal); // breakfast burrito

// You can use CSS boolean expressions with sass(...) conditions.
@debug if(not sass($hungry): skip lunch); // null

// Only the matching branch is evaluated.
@debug if(sass(meta.variable-exists("thirsty")): thirsty; else: hungry); // hungry
// SASS
@use 'sass:meta'

$hungry: true
@debug if(sass($hungry): breakfast burrito; else: cereal)  // breakfast burrito

// You can use CSS boolean expressions with sass(...) conditions.
@debug if(not sass($hungry): skip lunch)  // null

// Only the matching branch is evaluated.
@debug if(sass(meta.variable-exists("thirsty")): thirsty; else: hungry)  // hungry

Условия sass(...) также можно сочетать с обычными условиями CSS. Условия Sass будут вычислены Sass, но если останутся условия CSS, Sass вернёт весь результат в виде строки.

$support-widescreen: true;
@debug if(
  sass($support-widescreen) and media(width >= 3000px): big;
  else: small
); // if(media(width >= 3000px): big; else: small)

// If Sass conditions mean a branch will never match (or always match), Sass
// eagerly removes that branch and returns the final value if possible.
$support-widescreen: false;
@debug if(
  sass($support-widescreen) and media(width >= 3000px): big;
  else: small
); // small
// SASS
$support-widescreen: true
@debug if(
  sass($support-widescreen) and media(width >= 3000px): big;
  else: small
)  // if(media(width >= 3000px): big; else: small)

// If Sass conditions mean a branch will never match (or always match), Sass
// eagerly removes that branch and returns the final value if possible.
$support-widescreen: false
@debug if(
  sass($support-widescreen) and media(width >= 3000px): big;
  else: small
)  // small

url()

Функция url() широко используется в CSS, но её синтаксис отличается от синтаксиса других функций: она может принимать как заключённый в кавычки, так и не заключённый в кавычки URL. Поскольку URL без кавычек не является допустимым выражением SassScript, Sass требуется специальная логика для его разбора.

Если аргумент url() является допустимым URL без кавычек, Sass анализирует его без изменений, хотя для вставки значений SassScript можно использовать интерполяцию. Если URL без кавычек недопустим — например, если он содержит переменные или вызовы функций, — он анализируется как обычный вызов обычной функции CSS.

$roboto-font-path: "../fonts/roboto";

@font-face {
    // This is parsed as a normal function call that takes a quoted string.
    src: url("#{$roboto-font-path}/Roboto-Thin.woff2") format("woff2");

    font-family: "Roboto";
    font-weight: 100;
}

@font-face {
    // This is parsed as a normal function call that takes an arithmetic
    // expression.
    src: url($roboto-font-path + "/Roboto-Light.woff2") format("woff2");

    font-family: "Roboto";
    font-weight: 300;
}

@font-face {
    // This is parsed as an interpolated special function.
    src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format("woff2");

    font-family: "Roboto";
    font-weight: 400;
}
// SASS
$roboto-font-path: "../fonts/roboto"

@font-face
    // This is parsed as a normal function call that takes a quoted string.
    src: url("#{$roboto-font-path}/Roboto-Thin.woff2") format("woff2")

    font-family: "Roboto"
    font-weight: 100


@font-face
    // This is parsed as a normal function call that takes an arithmetic
    // expression.
    src: url($roboto-font-path + "/Roboto-Light.woff2") format("woff2")

    font-family: "Roboto"
    font-weight: 300


@font-face
    // This is parsed as an interpolated special function.
    src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format("woff2")

    font-family: "Roboto"
    font-weight: 400
/* CSS */
@font-face {
  src: url("../fonts/roboto/Roboto-Thin.woff2") format("woff2");
  font-family: "Roboto";
  font-weight: 100;
}
@font-face {
  src: url("../fonts/roboto/Roboto-Light.woff2") format("woff2");
  font-family: "Roboto";
  font-weight: 300;
}
@font-face {
  src: url(../fonts/roboto/Roboto-Regular.woff2) format("woff2");
  font-family: "Roboto";
  font-weight: 400;
}

element(), progid:...() и expression()

Совместимость (calc()):
Dart Sass
начиная с версии 1.40.0
LibSass
✗
Ruby Sass
✗
➤

LibSass, Ruby Sass и версии Dart Sass до 1.40.0 анализируют calc() как специальную синтаксическую функцию, подобную element().

Dart Sass версии 1.40.0 и выше анализируют calc() как вычисление.

Совместимость (clamp()):
Dart Sass
начиная с >=1.31.0 и до <1.40.0
LibSass
✗
Ruby Sass
✗
➤

LibSass, Ruby Sass и версии Dart Sass до 1.31.0 анализируют clamp() как обычную функцию CSS, не поддерживая в ней специальный синтаксис.

Dart Sass версии от 1.31.0 до 1.40.0 анализируют clamp() как специальную синтаксическую функцию, подобную element().

Dart Sass версии 1.40.0 и выше анализируют clamp() как вычисление.

Функция element() определена в спецификации CSS; поскольку её идентификаторы можно принять за цвета, для них требуется специальный разбор.

expression() и функции, начинающиеся с progid:, — устаревшие возможности Internet Explorer, использующие нестандартный синтаксис. Хотя современные браузеры их больше не поддерживают, Sass продолжает анализировать их для обратной совместимости.

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

$logo-element: logo-bg;

.logo {
  background: element(##{$logo-element});
}
// SASS
$logo-element: logo-bg

.logo
  background: element(##{$logo-element})
/* CSS */
.logo {
  background: element(#logo-bg);
}

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

Spec-Zone.ru

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