CSS Бесплатно, без регистрации

Калькулятор специфичности CSS

Впишите CSS-селекторы по одному в строке — калькулятор разберёт каждый на части, посчитает специфичность (a,b,c) и покажет, какое правило победит.

Результат
Готовый CSS-код
/* #nav .item a  →  (1,1,1) */
/* .nav .item a:hover  →  (0,3,1) */
/* nav ul li a  →  (0,0,4) */
/* winner: #nav .item a  →  (1,1,1) */

Как пользоваться

  1. Введите по одному селектору в строке (до 10 строк) или выберите готовый пример.
  2. Посмотрите цветной разбор: красным выделен a (ID), синим b (классы, атрибуты, псевдоклассы), зелёным c (теги, псевдоэлементы).
  3. Сравните значки (a,b,c): сначала сравнивается a, при равенстве b, затем c. Селектор на первом месте рейтинга побеждает.
  4. При полном равенстве побеждает правило, написанное в CSS позже. !important, inline-стили и @layer учитываются отдельно.

Как это работает

Три числа (a,b,c)

Специфичность состоит из трёх столбцов. a — количество ID-селекторов (#id), b — классов (.class), атрибутов ([type]) и псевдоклассов (:hover), c — тегов (div) и псевдоэлементов (::before). Сравнение идёт слева направо: один ID сильнее любого числа классов, а одиннадцать тегов никогда не перебьют один класс — столбцы не переносятся друг в друга.

#nav .item a        →  (1,1,1)
.nav .item a:hover  →  (0,3,1)
nav ul li a         →  (0,0,4)

Что считается, а что нет

Универсальный селектор *, комбинаторы (пробел, >, +, ~) и :where() дают 0. Атрибутный селектор [id="x"] — это атрибут, а не ID, поэтому он идёт в столбец b. Старые псевдоэлементы с одним двоеточием — :before, :after, :first-line, :first-letter — считаются псевдоэлементами и попадают в c.

:is(), :not(), :has() и :where()

:is(), :not() и :has() сами ничего не добавляют, но берут специфичность самого сильного аргумента из списка: :is(#a, .b) равно (1,0,0). :where() всегда равен нулю, поэтому он удобен для сбросов и базовых стилей, которые должны легко переопределяться. :nth-child(2n+1 of .x) — это псевдокласс (b) плюс специфичность селектора .x.

Специфичность — не весь каскад

Каскад сначала смотрит на происхождение стиля и !important, затем на стили, привязанные к элементу (inline), потом на слои @layer и только после этого сравнивает специфичность; последним решает порядок записи. Поэтому style="..." и !important перебивают обычное правило независимо от веса селектора, а правило из более позднего слоя побеждает более сильный селектор из раннего. У !important порядок слоёв переворачивается.

@layer base, components;
@layer base { #page p { color: red; } }
@layer components { p { color: blue; } }
/* побеждает components: слой объявлен позже */

Частые вопросы

Почему моё правило не применяется, хотя оно ниже в файле?

Порядок записи решает только при равной специфичности. Скорее всего, у другого правила селектор сильнее. Впишите оба селектора в калькулятор и сравните, затем проверьте !important, inline-стили и @layer.

Меняет ли !important специфичность?

Нет. !important — отдельный этап каскада: важное объявление сильнее обычного, а между несколькими важными снова решают специфичность и порядок. Чем писать !important, лучше упростить селектор или вынести стили в @layer.

Могут ли много классов победить один ID?

Нет. Столбец a сравнивается раньше b, поэтому даже сто классов не перебьют один ID: (1,0,0) сильнее любого (0,N,M). Зато (0,2,0) сильнее (0,1,5).

Участвует ли в сравнении унаследованное значение?

Нет. Любое правило, которое напрямую попало в элемент, — даже с селектором * и нулевой специфичностью — сильнее значения, унаследованного от родителя.

Эта тема в курсе HTML и CSS

Другие CSS-инструменты

Генератор CSS-градиента Linear, radial и conic градиенты: выберите цвета, угол и точки — скопируйте готовый код. Генератор и песочница Flexbox Пробуйте flex-свойства контейнера и элементов: направление, выравнивание, отступы и готовый CSS. Генератор CSS Grid Задайте колонки и строки, отступы и выравнивание — скопируйте готовый код сетки. Генератор CSS box-shadow Тени для блоков: смещение, размытие, цвет и слои — скопируйте готовый код box-shadow. Генератор cubic-bezier Перетащите точки кривой easing и скопируйте готовый CSS-код transition. Генератор SVG-анимации Выберите фигуру и эффект — получите SVG и CSS keyframes для вставки на страницу. Визуализатор блочной модели CSS Content, padding, border и margin в виде схемы как в DevTools — и готовый CSS-код. Генератор CSS transform Сдвиг, поворот, масштаб и наклон элемента с исходной позицией на превью — и готовый код. Калькулятор CSS clamp() Введите мин. и макс. размер шрифта и ширину экрана — получите готовый clamp() для плавной типографики. Проверка контраста цветов (WCAG) Проверьте контраст текста и фона по WCAG AA и AAA и исправьте неподходящую пару цветов. Генератор CSS clip-path Полигоны, срезанные углы, стрелки и круги: перетаскивайте точки на превью и копируйте готовый CSS. Генератор CSS Glassmorphism Эффект матового стекла: backdrop-filter blur, насыщенность, световая грань и готовый CSS. Генератор CSS border-radius (Blob) Органические формы и 8-значный border-radius: настраивайте горизонтальные и вертикальные радиусы. Визуализатор CSS Stacking Context и z-index Почему z-index: 9999 не работает? Наглядный 3D-разбор контекстов наложения, opacity, transform и isolation. Генератор CSS aspect-ratio и object-fit Конец сплющенным картинкам и прыжкам верстки (CLS): подбор пропорций aspect-ratio и точка фокуса object-fit. Студия CSS-фильтров Фотоэффекты без графических редакторов: blur, contrast, hue-rotate, sepia и трендовые Instagram-пресеты. Генератор OKLCH и палитр CSS Color 4 Идеально равномерная яркость для глаз и сочные цвета Display P3: подбор OKLCH, шкалы дизайн-систем и конвертация. Генератор CSS Scroll-driven Animations Анимации при скролле без JavaScript: свойства animation-timeline scroll() и view(), полоса чтения и плавное появление карточек. Генератор CSS Container Queries (@container) Конец привязке к экрану: компонент адаптируется к ширине своего родителя. Ресайз контейнера и правила @container вживую.
WhatsApp