Объявления свойств
В Sass, как и в CSS, объявления свойств определяют, как стилизуются элементы, соответствующие селектору. Но Sass добавляет дополнительные возможности, чтобы сделать их проще писать и автоматизировать. Прежде всего, значение объявления может быть любым выражением SassScript, которое будет вычислено и включено в результат.
.circle {
$size: 100px;
width: $size;
height: $size;
border-radius: $size * 0.5;
}// SASS .circle $size: 100px width: $size height: $size border-radius: $size * 0.5
/* CSS */
.circle {
width: 100px;
height: 100px;
border-radius: 50px;
}Интерполяция
Имя свойства может содержать интерполяцию, что позволяет динамически генерировать свойства по мере необходимости. Вы даже можете интерполировать всё имя свойства!
@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 упрощает и уменьшает избыточность, позволяя вкладывать объявления свойств. Внешние имена свойств добавляются к внутренним, разделенные дефисом.
.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 имеют сокращенные версии, которые используют пространство имён в качестве имени свойства. Для них вы можете написать как сокращенное значение, так и более явные вложенные версии.
.info-page {
margin: auto {
bottom: 10px;
top: 2px;
}
}// SASS
.info-page
margin: auto
bottom: 10px
top: 2px/* 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, поэтому любое значение потенциально может быть relevant к пользователю. Это включает значения, которые обычно интерпретируются как SassScript.
Из-за этого Sass обрабатывает объявления пользовательских свойств иначе, чем другие объявления свойств. Все токены, в том числе те, которые выглядят как SassScript, передаются в CSS как есть. Исключением является интерполяция, которая является единственным способом внедрить динамические значения в пользовательское свойство.
$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() для сохранения кавычек.
@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;
}
© 2006–2025 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/style-rules/declarations