Стили не применяются, но непонятно почему. Или вёрстка ломается только в одном месте, и нужно найти ошибку в большом CSS-файле. Или после рефакторинга остались пустые правила и повторы, которые хочется убрать. CSS-валидатор проверяет таблицу стилей: незакрытые скобки, строки и комментарии, объявления без двоеточия или точки с запятой, неизвестные свойства, недопустимые значения и селекторы, ошибочные медиазапросы, @import не на своём месте, пустые правила и повторы. Поддерживаются вложенные правила (CSS Nesting), а всё выполняется в браузере.
В этой статье разберём, какие ошибки находит валидатор, почему результат зависит от браузера, когда повтор свойства — не ошибка и почему Sass и Less не проверяются.

Что умеет валидатор
CSS-валидатор принимает таблицу стилей или фрагмент и проверяет её по нескольким направлениям.
| Параметр | Что делает |
|---|---|
| CSS-код | Таблица стилей или фрагмент, до 500 000 символов |
| Проверить | Запускает проверку |
Результат показывает замечания с номером строки и столбца — удобно исправлять. Отдельно отмечаются конструкции, через которые в старых браузерах выполнялся код.
Всё выполняется в браузере: введённые данные никуда не отправляются.
Ошибки, которые находит валидатор
Инструмент проверяет синтаксис и корректность конструкций.
| Ошибка | Пример | Почему это проблема |
|---|---|---|
| Незакрытая скобка | { без } |
Ломает разбор всей таблицы |
| Незакрытая строка | "text без закрывающей кавычки |
Разбор уходит дальше, чем нужно |
| Незакрытый комментарий | /* … без */ |
Съедает весь код после себя |
| Объявление без двоеточия | color red; |
Значение не применяется |
| Объявление без точки с запятой | color: red перед следующим |
Следующее объявление может не распознаться |
| Неизвестное свойство | colr: red; |
Опечатка, свойство не применяется |
| Недопустимое значение | margin: 10px 20px 30px 40px 50px; |
Слишком много значений |
| Недопустимый селектор | .card:hover > { … } |
Незавершённый селектор |
| Ошибочный медиазапрос | @media (max-width: 768px { … } |
Незакрытая скобка в условии |
@import не на своём месте |
@import после правил |
Не сработает |
| Пустое правило | .empty {} |
Лишний код |
| Повтор | padding: 16px; padding: 16px; |
Лишний код |
Почему результат зависит от браузера
Это важная особенность. Свойства и значения проверяет движок вашего браузера — так же, как он будет применять стили.
Это значит:
- Новое свойство, которое браузер ещё не знает, будет отмечено как неизвестное. Хотя в других браузерах оно работает.
- Результат может отличаться в разных браузерах и версиях.
- Чтобы проверить код для старых браузеров, откройте валидатор в них.
Это не ошибка инструмента, а его подход: он проверяет так, как стили будет применять конкретный браузер.
Повтор свойства: ошибка или совет
Повтор свойства бывает разным.
| Повтор | Как отмечается | Почему |
|---|---|---|
| С тем же значением | Лишний код | Ничего не меняет, только увеличивает размер |
| С другим значением | Совет | Иногда делают специально: запасное значение для старых браузеров |
Пример запасного значения:
.card {
background: #ccc;
background: linear-gradient(...);
}
Старый браузер возьмёт #ccc, новый — градиент. Это осознанный приём, поэтому повтор с другим значением отмечается как совет, а не как ошибка.
CSS Nesting
Валидатор поддерживает вложенные правила (CSS Nesting) — возможность писать вложенные селекторы без препроцессоров.
.card {
display: flex;
&__title {
font-weight: bold;
}
}
Это современная возможность CSS, и валидатор её понимает. Если бы он не поддерживал вложенность, такие правила считались бы ошибками.
Конструкции, через которые выполнялся код
Отдельно валидатор отмечает конструкции, через которые в старых браузерах выполнялся код. Это исторические уязвимости: например, expression() в старом IE или javascript: в url().
| Конструкция | Где встречалась | Чем опасна |
|---|---|---|
expression() |
Старый IE | Выполняла JavaScript в значении CSS-свойства |
javascript: в url() |
Старые браузеры | Выполняла код при загрузке ресурса |
behavior |
Старый IE | Подключала HTC-компонент с кодом |
Такие конструкции сегодня не работают в современных браузерах, но если код будет открываться в старых — это риск. Валидатор отмечает их, чтобы вы могли убрать или заменить.
Почему Sass и Less не проверяются
Валидатор работает только с CSS. Переменные, примеси и вложенность препроцессоров он посчитает ошибками.
| Конструкция | Поддерживается |
|---|---|
CSS-переменные --name |
Да |
CSS Nesting & |
Да |
Sass-переменные $name |
Нет |
Less-переменные @name |
Нет |
Примеси @include |
Нет |
Если вы пишете на Sass или Less, сначала компилируйте в CSS, затем проверяйте.
Зачем проверять CSS
| Задача | Что даёт валидатор |
|---|---|
| Поиск ошибки | Найти, почему стиль не применяется |
| Рефакторинг | Убрать пустые правила и повторы |
| Код-ревью | Проверить, что нет опечаток и недопустимых значений |
| Совместимость | Увидеть, какие свойства браузер не знает |
| Безопасность | Найти конструкции, через которые выполнялся код |
| Медиазапросы | Проверить, что условия корректны |
Ограничения валидатора
- Зависит от браузера. Новые свойства могут быть отмечены как неизвестные.
- Только CSS. Sass и Less не проверяются.
- Не заменяет визуальную проверку. Валидатор находит синтаксические ошибки, но не оценивает, как стили выглядят.
- Лимит 500 000 символов. Очень большие файлы нужно проверять частями.
Как пользоваться: пошагово
- Вставьте CSS-код.
- Нажмите «Проверить».
- Исправьте замечания: у каждого указаны строка и столбец.
Типичные ошибки
- Путать CSS с Sass или Less. Валидатор проверяет только CSS. Препроцессоры нужно компилировать до проверки.
- Считать новые свойства ошибкой. Браузер может не знать новое свойство, хотя в других браузерах оно работает.
- Игнорировать повтор с другим значением. Это может быть осознанный приём для старых браузеров, но стоит понимать, зачем он нужен.
- Оставлять пустые правила и повторы. Они увеличивают размер файла и усложняют чтение.
- Забывать про медиазапросы. Ошибка в условии медиазапроса ломает адаптивность.
- Проверять только синтаксис и забывать про визуальную проверку. Валидатор не оценивает, как стили выглядят.
Вопросы и ответы
Почему результат зависит от браузера?
Свойства и значения проверяет движок вашего браузера — так же, как он будет применять стили. Новое свойство, которое браузер ещё не знает, будет отмечено как неизвестное. Чтобы проверить код для старых браузеров, откройте валидатор в них.
Ошибка ли повтор свойства?
Повтор с тем же значением — лишний код. Повтор с другим значением иногда делают специально (запасное значение для старых браузеров), поэтому он отмечается как совет.
Проверяются ли Sass и Less?
Нет, только CSS. Переменные и примеси препроцессоров валидатор посчитает ошибками.
Поддерживается ли CSS Nesting?
Да, вложенные правила поддерживаются. Валидатор понимает конструкцию с &.
Что значит «конструкции, через которые выполнялся код»?
Исторические уязвимости вроде expression() в старом IE или javascript: в url(). В современных браузерах они не работают, но в старых — риск.
Почему ошибка указывает на строку и столбец?
Так удобнее исправлять: вы сразу видите, где именно проблема, и не ищете её по всему файлу.
Итог
CSS-валидатор — инструмент для проверки таблицы стилей: синтаксис, свойства, значения, селекторы, медиазапросы, @import, пустые правила и повторы. Он поддерживает CSS Nesting, отмечает конструкции, через которые в старых браузерах выполнялся код, и показывает строку и столбец для каждого замечания. Помните, что проверка зависит от браузера, а Sass и Less нужно компилировать до проверки, — и стили будут работать предсказуемо.