CSS At-Rules
- Dart Sass
- since 1.15.0
- LibSass
- ✗
- Ruby Sass
- ✗
Compatibility (Name Interpolation):
LibSass、Ruby Sass 和旧版本的 Dart Sass 不支持 at-rule 名称中的插值。但它们支持值中的插值。
Sass 支持 CSS 中的所有 at-rules。为了保持灵活性并与未来的 CSS 版本兼容,Sass 默认对几乎所有 at-rules 都有通用支持。CSS at-rule 可以写作 @<n> <值>
、@<n> { ... }
或 @<n> <值> { ... }
。名称必须是标识符,值(如果存在)可以是几乎任何内容。名称和值都可以包含插值。
SCSS Syntax
@namespace svg url(http://www.w3.org/2000/svg);
@font-face {
font-family: "Open Sans";
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
}
@counter-style thumbs {
system: cyclic;
symbols: "\1F44D";
}
Sass Syntax
@namespace svg url(http://www.w3.org/2000/svg)
@font-face
font-family: "Open Sans"
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2")
@counter-style thumbs
system: cyclic
symbols: "\1F44D"
CSS Output
@charset "UTF-8";
@namespace svg url(http://www.w3.org/2000/svg);
@font-face {
font-family: "Open Sans";
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
}
@counter-style thumbs {
system: cyclic;
symbols: "👍";
}
如果 CSS at-rule 嵌套在样式规则中,它们会自动交换位置,使 at-rule 位于 CSS 输出的顶层,而样式规则位于其中。这使得添加条件样式变得很容易,无需重写样式规则的选择器。
CSS Output
.print-only {
display: none;
}
@media print {
.print-only {
display: block;
}
}
@media
@media permalink
- Dart Sass
- since 1.11.0
- LibSass
- ✗
- Ruby Sass
- since 3.7.0
Compatibility (Range Syntax):
LibSass 和旧版本的 Dart Sass 及 Ruby Sass 不支持在范围上下文中编写的媒体查询特性。但它们支持其他标准媒体查询。
CSS Output
@media (width <= 700px) {
body {
background: green;
}
}
@media
规则不仅如此,还有更多功能。除了允许插值外,它还允许直接在特性查询中使用 SassScript 表达式。
SCSS Syntax
$layout-breakpoint-small: 960px;
@media (min-width: $layout-breakpoint-small) {
.hide-extra-small {
display: none;
}
}
Sass Syntax
$layout-breakpoint-small: 960px
@media (min-width: $layout-breakpoint-small)
.hide-extra-small
display: none
CSS Output
@media (min-width: 960px) {
.hide-extra-small {
display: none;
}
}
在可能的情况下,Sass 还会合并相互嵌套的媒体查询,以便更容易支持尚不原生支持嵌套 @media
规则的浏览器。
SCSS Syntax
@media (hover: hover) {
.button:hover {
border: 2px solid black;
@media (color) {
border-color: #036;
}
}
}
Sass Syntax
@media (hover: hover)
.button:hover
border: 2px solid black
@media (color)
border-color: #036
CSS Output
@media (hover: hover) {
.button:hover {
border: 2px solid black;
}
}
@media (hover: hover) and (color) {
.button:hover {
border-color: #036;
}
}
@supports
@supports permalink
@supports
规则还允许在声明查询中使用 SassScript 表达式。
SCSS Syntax
@mixin sticky-position {
position: fixed;
@supports (position: sticky) {
position: sticky;
}
}
.banner {
@include sticky-position;
}
Sass Syntax
@mixin sticky-position
position: fixed
@supports (position: sticky)
position: sticky
.banner
@include sticky-position
CSS Output
.banner {
position: fixed;
}
@supports (position: sticky) {
.banner {
position: sticky;
}
}
@keyframes
@keyframes permalink
@keyframes
规则的工作方式与通用 at-rule 类似,只是其子规则必须是有效的关键帧规则(<数字>%
、from
或 to
),而不是普通选择器。
SCSS Syntax
@keyframes slide-in {
from {
margin-left: 100%;
width: 300%;
}
70% {
margin-left: 90%;
width: 150%;
}
to {
margin-left: 0%;
width: 100%;
}
}
Sass Syntax
@keyframes slide-in
from
margin-left: 100%
width: 300%
70%
margin-left: 90%
width: 150%
to
margin-left: 0%
width: 100%
CSS Output
@keyframes slide-in {
from {
margin-left: 100%;
width: 300%;
}
70% {
margin-left: 90%;
width: 150%;
}
to {
margin-left: 0%;
width: 100%;
}
}