CSS правила

At-правила начинаются с @ и управляют таблицей стилей: подключают файлы, задают условия, слои каскада, шрифты и анимации. Это не CSS-свойства. Дескрипторы внутри некоторых правил настраивают само правило, например src у @font-face.

Свойства · Селекторы · Функции

Названия со ссылками ведут к отдельным статьям; остальные возможности кратко описаны здесь. Поддержка отдельных значений и расширенного синтаксиса может отличаться.

Правила: названия и назначение
Правило Описание
@charset Указывает кодировку внешней таблицы стилей на уровне байтов. Это специальная последовательность в начале файла; BOM и транспортные метаданные также участвуют в выборе кодировки.
@font-face Описывает семейство и источник шрифта: локальное начертание или загружаемый файл, а также его дескрипторы.
@font-feature-values Объявляет имена альтернативных глифов для функций свойства font-variant-alternates.
@import Подключает внешнюю таблицу стилей с необязательными условиями и слоем. Предшествует обычным правилам; перед ним допустимы @charset и объявления порядка слоёв @layer без блока.
@keyframes Позволяет контролировать промежуточные этапы анимации путем создания ключевых кадров (или точки) в процессе анимации.
@media Правило, которое используется для изменения CSS стилей на основании определенных характеристик устройства, связанных с отображением контента, таких как ширина, высота, ориентация, разрешение экрана и так далее. Имеет широкое применение в адаптивном веб-дизайне.

Условия, каскад и области действия

Условия, каскад и области действия
Название Назначение
@supports Применяет блок при поддержке декларации или селектора; это проверка возможности, а не определение браузера.
@container Применяет стили по параметрам контейнера: размерам, стилям или состоянию прокрутки. Поддержка видов запросов различается.
@layer Объявляет порядок слоёв каскада или помещает правила в слой. Для !important порядок приоритета слоёв обратный.
@scope Ограничивает область действия селекторов корнем и необязательной границей области.
@namespace Связывает префикс пространства имён с URI для использования в селекторах XML/SVG.
@starting-style Определяет исходные стили для перехода, когда у элемента ещё нет предыдущего отображаемого состояния.

Шрифты, счётчики, печать и переходы

Шрифты, счётчики, печать и переходы
Название Назначение
@font-palette-values Объявляет именованную палитру цветного шрифта для font-palette.
@counter-style Объявляет собственную систему счётчиков и маркеров списков.
@property Регистрирует пользовательское свойство: допустимый синтаксис, наследование и начальное значение.
@page Настраивает страницу при печати: размер, поля и вложенные области полей.
@top-left, @top-center, @top-right, @bottom-left, @bottom-center, @bottom-right Вложенные правила @page для содержимого верхнего и нижнего поля; поддержка различается.
@top-left-corner, @top-right-corner, @bottom-left-corner, @bottom-right-corner Вложенные правила угловых областей полей страницы.
@left-top, @left-middle, @left-bottom, @right-top, @right-middle, @right-bottom Вложенные правила боковых полей страницы.
@position-try Объявляет именованный вариант размещения якорно позиционированного элемента при переполнении.
@view-transition Включает переходы между документами при подходящей навигации; условия и поддержка отличаются от переходов внутри документа.
@stylistic, @styleset, @character-variant, @swash, @ornaments, @annotation Вложенные блоки @font-feature-values связывают понятные имена с номерами альтернативных глифов.

Экспериментальные правила

Экспериментальные правила
Название Назначение
@color-profile Описывает пользовательский цветовой профиль для color(); экспериментальное.
@function Объявляет пользовательскую CSS-функцию с именем, начинающимся с --; экспериментальное.
@mixin, @apply, @contents Проект механизма повторного использования наборов правил и передачи содержимого; экспериментальное, не Sass.
@custom-media Объявляет имя для повторно используемого медиаусловия; экспериментальное.

Исторические расширения

Исторические расширения
Название Назначение
@document Нестандартное ограничение стилей по адресу документа; обычным таблицам стилей не следует полагаться на него.

Другие экспериментальные условия

Другие экспериментальные условия
Название Назначение
@when, @else Проект условных цепочек CSS Conditional Rules: выбирается первая подходящая ветвь. Условия могут сочетать проверки среды и поддержки. Поддержка ограничена; обычные @media и @supports не требуют этих правил.

@supports-condition — экспериментальное объявление именованной проверки поддержки для повторного использования в @supports. Название и синтаксис в проекте CSS Conditional Rules ещё обсуждаются.

Как работают условия

Правила внутри @supports применятся только при поддержке display: grid. Поддержка синтаксиса не гарантирует отсутствие ошибок реализации или подходящий результат раскладки.

CSS
@supports (display: grid) {
  .cards {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1rem;
  }
}

Спецификация

CSS: Правила — W3C

Порядок слоёв и !important

В первом абзаце выигрывает более поздний слой theme, во втором — ранний base из-за !important. Поменяйте порядок в первой строке и сравните.

base.css
CSS
* {
    box-sizing: border-box;
}
body {
    margin: 16px;
    font:
        16px/1.5 system-ui,
        sans-serif;
    color: #24364b;
    overflow-wrap: anywhere;
}
p {
    padding: 12px;
    border: 2px solid currentColor;
}
index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Порядок слоёв и !important</title>
  </head>
  <body>
    <p class="normal">Обычные объявления</p>
    <p class="important">Объявления с !important</p>
  </body>
</html>
style.css
CSS
@layer base, theme;
@layer base {
    p {
        color: #216e39;
    }
    .important {
        color: #216e39 !important;
    }
}
@layer theme {
    p {
        color: #b3261e;
    }
    .important {
        color: #b3261e !important;
    }
}