重大变更:CSS 变量 语法
较旧版本的 LibSass 和 Ruby Sass 解析自定义属性声明的方式与其他属性声明相同,允许将完整的SassScript 表达式 作为值。但这与 CSS 不兼容。
- Dart Sass
- ✓
- LibSass
- 从 3.5.0 开始
- Ruby Sass
- 从 3.5.0 开始
兼容性
CSS 规范允许在自定义属性声明中使用几乎任何字符串。即使这些值对任何CSS 属性都没有意义,也可以从 JavaScript 访问它们。当它们被解析为 SassScript 值时,原本有效的纯CSS 语法无法解析。例如,Polymer 库 使用此方法来支持纯-CSS mixins
游乐场
SCSS 语法
: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 输出
: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 语法
$accent-color: #fbbc04;
:root {
// WRONG, will not work in recent Sass versions.
--accent-color-wrong: $accent-color;
// RIGHT, will work in all Sass versions.
--accent-color-right: #{$accent-color};
}
游乐场
Sass 语法
$accent-color: #fbbc04
:root
// WRONG, will not work in recent Sass versions.
--accent-color-wrong: $accent-color
// RIGHT, will work in all Sass versions.
--accent-color-right: #{$accent-color}
CSS 输出
:root {
--accent-color-wrong: $accent-color;
--accent-color-right: #fbbc04;
}
⚠️ 注意!
由于插值会从带引号的字符串中删除引号,因此可能需要将它们包装在 meta.inspect()
函数 中以保留其 引号。
游乐场
SCSS 语法
@use "sass:meta";
$font-family-monospace: Menlo, Consolas, "Courier New", monospace;
:root {
--font-family-monospace: #{meta.inspect($font-family-monospace)};
}
游乐场
Sass 语法
@use "sass:meta"
$font-family-monospace: Menlo, Consolas, "Courier New", monospace
:root
--font-family-monospace: #{meta.inspect($font-family-monospace)}
CSS 输出
:root {
--font-family-monospace: Menlo, Consolas, "Courier New", monospace;
}