Spec-Zone.ru › Sass

Строки

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

  • Экранирование
  • Строки в кавычках
  • Строки без кавычек
    • Обзор
    • Экранирование в строках без кавычек
    • Другие строки без кавычек
  • Индексы строк

Строки — это последовательности символов (в частности, кодовых точек Unicode). Sass поддерживает два вида строк с одинаковой внутренней структурой, но по-разному отображаемых: строки в кавычках, например "Helvetica Neue", и строки без кавычек (также известные как идентификаторы), например bold. Вместе они охватывают различные виды текста, встречающиеся в CSS.

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

Преобразовать строку в кавычках в строку без кавычек можно с помощью функции string.unquote(), а строку без кавычек в строку в кавычках — с помощью функции string.quote().

@use "sass:string";

@debug string.unquote(".widget:hover"); // .widget:hover
@debug string.quote(bold); // "bold"
// SASS
@use "sass:string"

@debug string.unquote(".widget:hover")  // .widget:hover
@debug string.quote(bold)  // "bold"

Экранирование

Все строки Sass поддерживают стандартные коды экранирования CSS:

  • Любой символ, кроме букв от A до F и цифр от 0 до 9 (даже символ новой строки!), можно включить в строку, поставив перед ним \.

  • Любой символ можно включить в строку, поставив \ перед его номером кодовой точки Unicode, записанным в шестнадцатеричном формате. После номера кодовой точки можно поставить пробел, чтобы обозначить конец числа Unicode.

@debug "\""; // '"'
@debug \.widget; // \.widget
@debug "\a"; // "\a" (a string containing only a newline)
@debug "line1\a line2"; // "line1\a line2"
@debug "Nat + Liz \1F46D"; // "Nat + Liz 👭"
// SASS
@debug "\""  // '"'
@debug \.widget  // \.widget
@debug "\a"  // "\a" (a string containing only a newline)
@debug "line1\a line2"  // "line1\a line2" (foo and bar are separated by a newline)
@debug "Nat + Liz \1F46D"  // "Nat + Liz 👭"

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

Для символов, которые разрешено использовать в строках, экранирование Unicode даёт ту же строку, что и запись самого символа.

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

Строки в кавычках заключаются в одинарные или двойные кавычки, например "Helvetica Neue". Они могут содержать интерполяцию, а также любые неэкранированные символы, кроме следующих:

  • \, который можно экранировать как \\;
  • ' или " — в зависимости от того, какой символ использован для определения строки; их можно экранировать как \' или \";
  • символы новой строки, которые можно экранировать как \a (включая пробел в конце).

При компиляции строк в кавычках гарантируется, что получатся строки CSS с тем же содержимым, что и у исходных строк Sass. Конкретный формат может зависеть от реализации или конфигурации: строка с двойной кавычкой может быть скомпилирована в "\"" или '"', а символ, не входящий в ASCII, может быть экранирован или оставлен без экранирования. Однако в любой соответствующей стандартам реализации CSS, включая все браузеры, такая строка будет разобрана одинаково.

@debug "Helvetica Neue"; // "Helvetica Neue"
@debug "C:\\Program Files"; // "C:\\Program Files"
@debug "\"Don't Fear the Reaper\""; // "\"Don't Fear the Reaper\""
@debug "line1\a line2"; // "line1\a line2"

$roboto-variant: "Mono";
@debug "Roboto #{$roboto-variant}"; // "Roboto Mono"
// SASS
@debug "Helvetica Neue"  // "Helvetica Neue"
@debug "C:\\Program Files"  // "C:\\Program Files"
@debug "\"Don't Fear the Reaper\""  // "\"Don't Fear the Reaper\""
@debug "line1\a line2"  // "line1\a line2"

$roboto-variant: "Mono"
@debug "Roboto #{$roboto-variant}"  // "Roboto Mono"

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

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

Строки без кавычек

Строки без кавычек записываются как идентификаторы CSS в соответствии с приведённой ниже синтаксической диаграммой. Они могут содержать интерполяцию в любом месте.

Авторские права на диаграмму железнодорожного типа © 2018 W3C® (MIT, ERCIM, Keio, Beihang). Применяются правила ограничения ответственности, товарных знаков и разрешительной лицензии на документы W3C.
@debug bold; // bold
@debug -webkit-flex; // -webkit-flex
@debug --123; // --123

$prefix: ms;
@debug -#{$prefix}-flex; // -ms-flex
// SASS
@debug bold  // bold
@debug -webkit-flex  // -webkit-flex
@debug --123  // --123

$prefix: ms
@debug -#{$prefix}-flex  // -ms-flex

Не все идентификаторы разбираются как строки без кавычек:

  • Названия цветов CSS разбираются как цвета.
  • null разбирается как значение null в Sass.
  • true и false разбираются как логические значения.
  • not, and и or разбираются как логические операторы.

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

Экранирование в строках без кавычек

Совместимость (нормализация):
Dart Sass
начиная с 1.11.0
LibSass
✗
Ruby Sass
✗
➤

LibSass, Ruby Sass и более старые версии Dart Sass не нормализуют экранирование в идентификаторах. Вместо этого текст строки без кавычек в точности совпадает с тем, что написал пользователь. Например, \1F46D и 👭 не считаются эквивалентными.

При разборе строки без кавычек буквальный текст экранированных последовательностей становится частью строки. Например, \a разбирается как символы \, a и пробел. Однако, чтобы строки без кавычек с одинаковым значением в CSS разбирались одинаково, такое экранирование нормализуется. Для каждой кодовой точки, независимо от того, экранирована она или нет:

  • Если это допустимый символ идентификатора, он включается в строку без кавычек без экранирования. Например, \1F46D возвращает строку без кавычек 👭.

  • Если это печатный символ, отличный от символа новой строки или табуляции, он включается после \. Например, \21 возвращает строку без кавычек \!.

  • В противном случае добавляется экранирование Unicode в нижнем регистре с пробелом в конце. Например, \7Fx возвращает строку без кавычек \7f x.

@use "sass:string";

@debug \1F46D; // 👭
@debug \21; // \!
@debug \7Fx; // \7f x
@debug string.length(\7Fx); // 5
// SASS
@use "sass:string"

@debug \1F46D  // 👭
@debug \21  // \!
@debug \7Fx  // \7f x
@debug string.length(\7Fx)  // 5

Другие строки без кавычек

Помимо идентификаторов, есть несколько необычных элементов синтаксиса CSS, которые разбираются как строки без кавычек. К ним относятся:

  • Специальные функции, например url() и element(), аргументы которых имеют синтаксис, отличный от синтаксиса обычных выражений CSS.

  • Токены диапазона Unicode, например U+0-7F или U+4??.

  • Хеш-токены, значения которых являются идентификаторами, но не допустимыми шестнадцатеричными цветами.

  • Значение %. (Оно доступно, только если не находится непосредственно между двумя другими значениями, иначе его можно было бы спутать с оператором остатка от деления.)

  • Специальное значение !important.

@debug url(https://example.org); // url(https://example.org)
@debug U+4??; // U+4??
@debug #my-background; // #my-background
@debug %; // %
@debug !important; // !important
// SASS
@debug url(https://example.org)  // url(https://example.org)
@debug U+4??  // U+4??
@debug #my-background  // #my-background
@debug %  // %
@debug !important  // !important

Индексы строк

В Sass есть несколько функций для работы со строками, которые принимают или возвращают числа, называемые индексами, и указывают на символы в строке. Индекс 1 обозначает первый символ строки. Обратите внимание: это отличается от многих языков программирования, в которых индексы начинаются с 0! В Sass также легко обратиться к концу строки. Индекс -1 обозначает последний символ строки, -2 — предпоследний и так далее.

@use "sass:string";

@debug string.index("Helvetica Neue", "Helvetica"); // 1
@debug string.index("Helvetica Neue", "Neue"); // 11
@debug string.slice("Roboto Mono", -4); // "Mono"
// SASS
@use "sass:string"

@debug string.index("Helvetica Neue", "Helvetica")  // 1
@debug string.index("Helvetica Neue", "Neue")  // 11
@debug string.slice("Roboto Mono", -4)  // "Mono"

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

Spec-Zone.ru

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