Spec-Zone.ru › Sass

CSS Правила-атрибуты

Разделы страницы

  • @media
  • @supports
  • @keyframes
Совместимость (Вставка имён):
Dart Sass
с 1.15.0
LibSass
✗
Ruby Sass
✗
➤

LibSass, Ruby Sass и более старые версии Dart Sass не поддерживают вставку в именах правил-атрибутов. Они поддерживают вставку в значениях.

Sass поддерживает все правила-атрибуты, которые являются частью стандартного CSS. Чтобы оставаться гибким и совместимым с будущими версиями CSS, Sass имеет общую поддержку, которая по умолчанию охватывает почти все правила-атрибуты. Правило-атрибут CSS записывается @<name> <value>, @<name> { ... } или @<name> <value> { ... }. Имя должно быть идентификатором, а значение (если оно существует) может быть практически чем угодно. И имя, и значение могут содержать вставку.

@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
@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 */
@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 вложен в правило стиля, эти два правила автоматически меняют свои позиции, так что правило-атрибут оказывается на верхнем уровне выходных данных CSS, а правило стиля находится внутри него. Это упрощает добавление условного форматирования, не переписывая селектор правила стиля.

.print-only {
  display: none;

  @media print { display: block; }
}
// SASS
.print-only
  display: none

  @media print
    display: block
/* CSS */
.print-only {
  display: none;
}
@media print {
  .print-only {
    display: block;
  }
}

@media

Совместимость (Синтаксис диапазонов):
Dart Sass
с 1.11.0
LibSass
✗
Ruby Sass
с 3.7.0
➤

LibSass и более старые версии Dart Sass и Ruby Sass не поддерживают запросы к среде с диапазонами, написанными в диапазоне контекста. Они поддерживают другие стандартные запросы к среде.

@media (width <= 700px) {
  body {
    background: green;
  }
}
// SASS
@media (width <= 700px)
  body
    background: green
/* CSS */
@media (width <= 700px) {
  body {
    background: green;
  }
}

Правило @media делает всё вышеперечисленное и многое другое. Помимо поддержки вставки, оно позволяет использовать выражения SassScript непосредственно в запросах к свойствам среды.

$layout-breakpoint-small: 960px;

@media (min-width: $layout-breakpoint-small) {
  .hide-extra-small {
    display: none;
  }
}
// SASS
$layout-breakpoint-small: 960px

@media (min-width: $layout-breakpoint-small)
  .hide-extra-small
    display: none
/* CSS */
@media (min-width: 960px) {
  .hide-extra-small {
    display: none;
  }
}

Когда это возможно, Sass также будет объединять запросы к среде, которые вложены друг в друга, чтобы упростить поддержку браузеров, которые ещё не поддерживают встроенные @media правила.

@media (hover: hover) {
  .button:hover {
    border: 2px solid black;

    @media (color) {
      border-color: #036;
    }
  }
}
// SASS
@media (hover: hover)
  .button:hover
    border: 2px solid black

    @media (color)
      border-color: #036
/* CSS */
@media (hover: hover) {
  .button:hover {
    border: 2px solid black;
  }
}
@media (hover: hover) and (color) {
  .button:hover {
    border-color: #036;
  }
}

@supports

Правило @supports также позволяет использовать выражения SassScript в запросах к объявлениям.

@mixin sticky-position {
  position: fixed;
  @supports (position: sticky) {
    position: sticky;
  }
}

.banner {
  @include sticky-position;
}
// SASS
@mixin sticky-position
  position: fixed
  @supports (position: sticky)
    position: sticky



.banner
  @include sticky-position
/* CSS */
.banner {
  position: fixed;
}
@supports (position: sticky) {
  .banner {
    position: sticky;
  }
}

@keyframes

Правило @keyframes работает так же, как и обычное правило-атрибут, за исключением того, что его дочерние правила должны быть допустимыми правилами ключевых кадров (<number>%, from или to), а не обычными селекторами.

@keyframes slide-in {
  from {
    margin-left: 100%;
    width: 300%;
  }

  70% {
    margin-left: 90%;
    width: 150%;
  }

  to {
    margin-left: 0%;
    width: 100%;
  }
}
// SASS
@keyframes slide-in
  from
    margin-left: 100%
    width: 300%


  70%
    margin-left: 90%
    width: 150%


  to
    margin-left: 0%
    width: 100%
/* CSS */
@keyframes slide-in {
  from {
    margin-left: 100%;
    width: 300%;
  }
  70% {
    margin-left: 90%;
    width: 150%;
  }
  to {
    margin-left: 0%;
    width: 100%;
  }
}

© 2006–2025 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/at-rules/css

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API