Специальные функции
CSS определяет множество функций, и большинство из них прекрасно работают с обычным синтаксисом функций Sass. Они анализируются как вызовы функций, преобразуются в простые функции CSS и компилируются как есть в CSS. Однако есть несколько исключений, которые имеют особый синтаксис, который нельзя просто проанализировать как выражение SassScript. Все вызовы специальных функций возвращают строки без кавычек.
url() permalinkurl()
Функция url()
обычно используется в CSS, но ее синтаксис отличается от других функций: она может принимать либо цитируемый, либо URL без кавычек. Поскольку URL-адрес без кавычек не является допустимым выражением SassScript, Sass требует специальной логики для его анализа.
Если аргумент url()
является допустимым URL без кавычек, Sass анализирует его как есть, хотя интерполяция также может использоваться для вставки значений SassScript. Если это недействительный URL без кавычек - например, если он содержит переменные или [][функции вызова] — он анализируется как обычный простой вызов функции CSS.
SCSS Syntax
$roboto-font-path: "../fonts/roboto";
@font-face {
// Это анализируется как обычный вызов функции, который принимает строку в кавычках.
src: url("#{$roboto-font-path}/Roboto-Thin.woff2") format("woff2");
font-family: "Roboto";
font-weight: 100;
}
@font-face {
// Это анализируется как обычный вызов функции, который принимает арифметическое выражение.
src: url($roboto-font-path + "/Roboto-Light.woff2") format("woff2");
font-family: "Roboto";
font-weight: 300;
}
@font-face {
// Это анализируется как интерполированная специальная функция.
src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format("woff2");
font-family: "Roboto";
font-weight: 400;
}
Sass Syntax
$roboto-font-path: "../fonts/roboto"
@font-face
// Это анализируется как обычный вызов функции, который принимает строку в кавычках.
src: url("#{$roboto-font-path}/Roboto-Thin.woff2") format("woff2")
font-family: "Roboto"
font-weight: 100
@font-face
// Это анализируется как обычный вызов функции, который принимает арифметическое выражение.
src: url($roboto-font-path + "/Roboto-Light.woff2") format("woff2")
font-family: "Roboto"
font-weight: 300
@font-face
// Это анализируется как интерполированная специальная функция.
src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format("woff2")
font-family: "Roboto"
font-weight: 400
CSS Output
@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:…(), and expression() permalinkelement()
, progid:...()
, and expression()
- Dart Sass
- since <1.40.0
- LibSass
- ✗
- Ruby Sass
- ✗
LibSass, Ruby Sass и версии Dart Sass до 1.40.0 анализируют calc()
как специальную синтаксическую функцию, такую как element()
.
Dart Sass 1.40.0 версии и более поздних анализирует calc()
как calculation.
- Dart Sass
- since >=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()
как calculation.
Функция element()
определена в спецификации CSS, и поскольку ее идентификаторы могут быть проанализированы как цвета, они нуждаются в специальном анализе.
expression()
и функции, начинающиеся с progid:
являются устаревшими функциями Internet Explorer, которые используют нестандартный синтаксис. Хотя последние версии браузеров больше не поддерживают их, Sass продолжает анализировать их на предмет обратной совместимости.
Sass допускает любой текст в этих вызовах функций, включая вложенные круглые скобки. Ничто не интерпретируется как выражение SassScript, за исключением того, что интерполяция может использоваться для вставки динамических значений.