重大变更:CSS 变量语法
早期版本的 LibSass 和 Ruby Sass 像解析任何其他属性声明一样解析自定义属性声明,允许使用完整范围的 SassScript 表达式作为值。但这与 CSS 不兼容。
- Dart Sass
- ✓
- LibSass
- since 3.5.0
- Ruby Sass
- since 3.5.0
Compatibility:
CSS 规范允许在自定义属性声明中使用几乎任何字符串。即使这些值对任何 CSS 属性可能没有意义,但它们也可以从 JavaScript 访问。当它们被解析为 SassScript 值时,原本在纯 CSS 中有效的语法无法解析。例如,Polymer 库使用这种方式支持纯 CSS 混合器:
SCSS Syntax
:root {
--flex-theme: {
border: 1px solid var(--theme-dark-blue);
font-family: var(--theme-font-family);
padding: var(--theme-wide-padding);
background-color: var(--theme-light-blue);
};
}
CSS Output
:root {
--flex-theme: {
border: 1px solid var(--theme-dark-blue);
font-family: var(--theme-font-family);
padding: var(--theme-wide-padding);
background-color: var(--theme-light-blue);
};
}
为了提供与纯 CSS 的最大兼容性,更新的 Sass 版本要求在自定义属性值中的 SassScript 表达式必须写在插值中。插值在旧版 Sass 中也能工作,因此建议在所有样式表中使用。
SCSS Syntax
$accent-color: #fbbc04;
:root {
// 错误,在最新的 Sass 版本中不会工作。
--accent-color-wrong: $accent-color;
// 正确,在所有 Sass 版本中都能工作。
--accent-color-right: #{$accent-color};
}
Sass Syntax
$accent-color: #fbbc04
:root
// 错误,在最新的 Sass 版本中不会工作。
--accent-color-wrong: $accent-color
// 正确,在所有 Sass 版本中都能工作。
--accent-color-right: #{$accent-color}
CSS Output
:root {
--accent-color-wrong: $accent-color;
--accent-color-right: #fbbc04;
}
⚠️ Heads up!
因为插值会删除带引号字符串的引号,可能需要使用 meta.inspect()
函数来保留其引号。
SCSS Syntax
@use "sass:meta";
$font-family-monospace: Menlo, Consolas, "Courier New", monospace;
:root {
--font-family-monospace: #{meta.inspect($font-family-monospace)};
}
Sass Syntax
@use "sass:meta"
$font-family-monospace: Menlo, Consolas, "Courier New", monospace
:root
--font-family-monospace: #{meta.inspect($font-family-monospace)}
CSS Output
:root {
--font-family-monospace: Menlo, Consolas, "Courier New", monospace;
}