属性声明
在 Sass 中,与 CSS 一样,属性声明定义了与选择器匹配的元素的样式。但是 Sass 添加了额外的功能,使它们更易于编写和自动化。首先,声明的值可以是任何 SassScript 表达式,该表达式将被计算并包含在结果中。
CSS 输出
.circle {
width: 100px;
height: 100px;
border-radius: 50px;
}
插值插值永久链接
属性名称可以包含 插值,这使得可以根据需要动态生成属性。您甚至可以插值整个属性名称!
SCSS 语法
@mixin prefix($property, $value, $prefixes) {
@each $prefix in $prefixes {
-#{$prefix}-#{$property}: $value;
}
#{$property}: $value;
}
.gray {
@include prefix(filter, grayscale(50%), moz webkit);
}
Sass 语法
@mixin prefix($property, $value, $prefixes)
@each $prefix in $prefixes
-#{$prefix}-#{$property}: $value
#{$property}: $value
.gray
@include prefix(filter, grayscale(50%), moz webkit)
CSS 输出
.gray {
-moz-filter: grayscale(50%);
-webkit-filter: grayscale(50%);
filter: grayscale(50%);
}
嵌套嵌套永久链接
许多 CSS 属性以相同的作为某种命名空间的前缀开头。例如,font-family
、font-size
和 font-weight
都以 font-
开头。Sass 通过允许嵌套属性声明使此操作更轻松且减少冗余。外部属性名称将添加到内部属性名称中,并用连字符分隔。
SCSS 语法
.enlarge {
font-size: 14px;
transition: {
property: font-size;
duration: 4s;
delay: 2s;
}
&:hover { font-size: 36px; }
}
Sass 语法
.enlarge
font-size: 14px
transition:
property: font-size
duration: 4s
delay: 2s
&:hover
font-size: 36px
CSS 输出
.enlarge {
font-size: 14px;
transition-property: font-size;
transition-duration: 4s;
transition-delay: 2s;
}
.enlarge:hover {
font-size: 36px;
}
其中一些 CSS 属性具有使用命名空间作为属性名称的简写版本。对于这些,您可以同时编写简写值和更明确的嵌套版本。
CSS 输出
.info-page {
margin: auto;
margin-bottom: 10px;
margin-top: 2px;
}
隐藏声明隐藏声明永久链接
有时您只希望属性声明在某些时候显示。如果声明的值为 null
或空 未加引号的字符串,Sass 根本不会将该声明编译为 CSS。
自定义属性自定义属性永久链接
- Dart Sass
- ✓
- LibSass
- 自 3.5.0 版起
- Ruby Sass
- 自 3.5.0 版起
旧版本的 LibSass 和 Ruby Sass 解析自定义属性声明的方式与任何其他属性声明相同,允许将各种 SassScript 表达式作为值。即使使用这些版本,也建议您使用插值来注入 SassScript 值以实现向前兼容性。
有关更多详细信息,请参阅 重大更改页面。
CSS 自定义属性,也称为 CSS 变量,具有不寻常的声明语法:它们允许在声明值中使用几乎任何文本。此外,这些值可供 JavaScript 访问,因此任何值都可能与用户相关。这包括通常会解析为 SassScript 的值。
因此,Sass 解析自定义属性声明的方式与其他属性声明不同。所有标记(包括看起来像 SassScript 的标记)都按原样传递到 CSS。唯一的例外是 插值,它是将动态值注入自定义属性的唯一方法。
SCSS 语法
$primary: #81899b;
$accent: #302e24;
$warn: #dfa612;
:root {
--primary: #{$primary};
--accent: #{$accent};
--warn: #{$warn};
// Even though this looks like a Sass variable, it's valid CSS so it's not
// evaluated.
--consumed-by-js: $primary;
}
Sass 语法
$primary: #81899b
$accent: #302e24
$warn: #dfa612
:root
--primary: #{$primary}
--accent: #{$accent}
--warn: #{$warn}
// Even though this looks like a Sass variable, it's valid CSS so it's not
// evaluated.
--consumed-by-js: $primary
CSS 输出
:root {
--primary: #81899b;
--accent: #302e24;
--warn: #dfa612;
--consumed-by-js: $primary;
}
⚠️ 注意!
不幸的是,插值 会删除字符串中的引号,这使得在来自 Sass 变量的自定义属性值中使用带引号的字符串变得困难。作为解决方法,您可以使用 meta.inspect()
函数 来保留引号。
SCSS 语法
@use "sass:meta";
$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas;
:root {
--font-family-sans-serif: #{meta.inspect($font-family-sans-serif)};
--font-family-monospace: #{meta.inspect($font-family-monospace)};
}
Sass 语法
@use "sass:meta"
$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas
:root
--font-family-sans-serif: #{meta.inspect($font-family-sans-serif)}
--font-family-monospace: #{meta.inspect($font-family-monospace)}
CSS 输出
:root {
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas;
}