弦乐

字符串是字符序列(特别是Unicode代码点)。Sass支持两种内部结构相同但呈现方式不同的字符串:带引号的字符串(如"Helvetica Neue")和未带引号的字符串(也称为标识符)(如)bold。这些内容一起涵盖了CSS中出现的各种文本。

???? 有趣的事实:

您可以使用带引号的字符串转换为加引号的字符串string.unquote()功能,并且可以使用不带引号的字符串转换为一个带引号的字符串string.quote()函数

SCSS  语法

@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数字的结束位置。

SCSS  语法

@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(包括尾随空格)。

带引号的字符串保证可以编译为与原始Sass字符串内容相同的CSS字符串。确切的格式可能会根据实现或配置而有所不同-包含双引号的字符串可能会编译为"\""'"',并且非ASCII字符可能会也可能不会转义。但这应该在任何符合标准的CSS实施中(包括所有浏览器)进行解析  。

SCSS  语法

@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 标识符。它们可能 在任何地方包括插值

SCSS  语法

@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

Head️抬头!

并非所有标识符都被解析为未加引号的字符串:

因此,除非您专门编写使用无引号的字符串的CSS属性的值,否则通常最好编写引号的字符串。

逃脱永久链接逃脱

兼容性(标准化):
Dart·Sass(Dart Sass)
从  1.11.0开始
LibSass
rubySass

LibSass,Ruby Sass和较旧版本的Dart Sass不会规范标识符中的转义符。而是,未加引号的字符串中的文本是用户编写的确切文本。例如,\1F46D????不视为等效。

解析未引用的字符串时,转义的文字文本将作为字符串的一部分进行解析。例如,\a被分析为字符\a和空间。为了确保以相同的方式解析CSS中具有相同含义的未加引号的字符串,将这些转义进行了规范化。对于每个代码点,无论是转义还是不转义:

  • 如果它是有效的标识符字符,则不加引号地包含在未引号的字符串中。例如,\1F46D返回未加引号的字符串  ????

  • 如果它是换行符或制表符以外的其他可打印字符,则将其包含在\。之后。例如,\21返回未加引号的字符串  \!

  • 否则,小写的Unicode转义将包含在尾随空格中。例如,\7Fx返回未加引号的字符串  \7f x

SCSS  语法

@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

字符串索引永久链接字符串索引

Sass有许多使用或返回数字的字符串函数,这些数字称为index,它们引用字符串中的字符。索引1指示字符串的第一个字符。请注意,这与许多从0开始的编程语言不同!Sass还使引用字符串的结尾变得容易。索引-1表示字符串中的最后一个字符,-2表示倒数第二个,依此类推。

SCSS  语法

@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"