重大變更:CSS 變數語法
舊版的 LibSass 和 Ruby Sass 解析自訂屬性宣告的方式與解析其他屬性宣告的方式相同,允許在值中使用所有 SassScript 表達式。但這與 CSS 不相容。
- Dart Sass
- ✓
- LibSass
- 自 3.5.0 版本起
- Ruby Sass
- 自 3.5.0 版本起
相容性
CSS 規範允許在自訂屬性宣告中使用幾乎任何字元字串。即使這些值可能對任何 CSS 屬性沒有意義,它們也可以從 JavaScript 讀取。當它們被解析為 SassScript 值時,原本在純 CSS 中有效的語法就無法解析。例如,Polymer 函式庫使用這個方法來支援純 CSS mixin。
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;
}