Содержание
  1. Ошибки в синтаксисе
  2. Неправильное использование единиц измерения
  3. Неиспользование каскадности
  4. Игнорирование кроссбраузерности
  5. Неправильное использование z-index
  6. Избыточное использование важности !important
  7. Отсутствие мобильной адаптации
  8. Как избежать
  9. Почему z-index: 9999 не поднимает окно: пример с родителем
  10. Частые вопросы
  11. Плохая организация кода
  12. Заключение
СправочникОбновлено · 10.2026

Самые глупые ошибки в CSS

3 июня 2024 · 7 минут чтения

CSS (Cascading Style Sheets) – сильный инструмент для создания стилей веб-страниц, однако даже опытные разработчики могут допускать ошибки. Некоторые из этих ошибок могут быть весьма глупыми, но их последствия могут сильно повлиять на внешний вид и функциональность сайта. Узнаем самые распространенные ошибки в CSS, чтобы избежать их в будущем.

Ошибки в синтаксисе

Одна из самых простых и в то же время самых распространенных ошибок – синтаксические ошибки. При синтаксической ошибке браузер обычно отбрасывает неверное объявление или другой минимальный фрагмент и продолжает разбор CSS. Масштаб последствий зависит от места ошибки.

Пример

css

/* Неправильный синтаксис */ body { background-color: #f0f0f0 color: #333;

В этом фрагменте пропущены точка с запятой между объявлениями и закрывающая скобка. Значение background-color стало неверным; это не означает обязательную потерю всех остальных правил файла.

Как избежать

Используйте инструменты проверки синтаксиса, такие как линтеры (например, ESLint с плагином для CSS) или встроенные инструменты в редакторах кода. Эти инструменты помогут обнаружить и исправить синтаксические ошибки.

Неправильное использование единиц измерения

В CSS существует множество единиц измерения, таких как px, em, rem, %, vh, vw и другие. Неправильное использование этих единиц может привести к некорректному отображению элементов на странице.

Пример

css

/* Неправильное использование единиц измерения */ .container { width: 100; height: 50%; }

В данном примере указана ширина без единиц измерения, что делает значение некорректным.

Как избежать

Убедитесь, что всегда указываете единицы измерения для свойств, которые этого требуют. Понимание разницы между относительными и абсолютными единицами поможет сделать ваш код более предсказуемым и адаптивным.

Неиспользование каскадности

Каскадность – одно из основных преимуществ CSS, но её неиспользование может привести к избыточному и сложному коду.

Пример

css

/* Избыточный код */ h1 { font-size: 2em; color: blue; } h1 { margin-top: 20px; }

Вместо этого можно объединить стили для h1 в один блок.

Как избежать

Используйте каскадность для упрощения и уменьшения кода. Это сделает ваш CSS более читаемым и легким для поддержки.

Игнорирование кроссбраузерности

Разные браузеры могут обрабатывать CSS по-разному. Игнорирование этих различий может привести к некорректному отображению вашего сайта в некоторых браузерах.

Пример

css

/* Использование специфичных свойств без альтернатив */ .box { display: flex; }

Flexbox широко поддерживается современными браузерами. Необходимость префиксов проверяйте для целевых версий браузеров; само использование display: flex не означает, что префиксы обязательны.

Как избежать

Используйте автопрефиксаторы (например, Autoprefixer), чтобы автоматически добавлять необходимые префиксы для разных браузеров.

Неправильное использование z-index

Z-index определяет порядок наложения элементов. Неправильное использование этого свойства может привести к неожиданному поведению элементов.

Пример

css

/* Неправильное использование z-index */ .modal { z-index: 1000; } .header { z-index: 1001; }

У этих правил не задано позиционирование. Для обычных элементов сначала нужен position; для flex- и grid-элементов действует отдельное правило. После этого порядок зависит и от контекстов наложения родителей. Числа 1000 и 1001 сами по себе ничего не решают.

Как избежать

Используйте структурированный подход к управлению z-index, назначая логические значения в зависимости от слоев интерфейса.

Избыточное использование важности !important

Использование !important может решить проблемы с приоритетами, но злоупотребление этим свойством делает код менее управляемым и увеличивает вероятность конфликтов стилей.

Пример

css

/* Злоупотребление !important */ .button { background-color: red !important; }

Как избежать

Используйте !important только в крайних случаях. Лучше стараться управлять приоритетом стилей используя каскадности и специфичности селекторов.

Отсутствие мобильной адаптации

Отсутствие адаптации под мобильные устройства – серьезная ошибка.

Пример

css

/* Отсутствие медиазапросов */ .container { width: 1000px; }

На мобильных устройствах такой сайт будет выглядеть некорректно.

Как избежать

Используйте медиазапросы для адаптации стилей под разные устройства.

css

/* Пример медиазапроса */ @media (max-width: 600px) { .container { width: 100%; } }

Почему z-index: 9999 не поднимает окно: пример с родителем

Большое число у модального окна помогает ровно до тех пор, пока его сравнивают с соседями внутри одного контекста наложения. Как только между окном и header появляется родитель, который сам создаёт контекст, весь этот родитель вместе с потомками рассматривается в контексте уровнем выше как единое целое. Согласно документации MDN, вложенный контекст наложения «treats atomically as a single unit in the parent stacking context», а значения потомков не сравниваются напрямую со значениями элементов вне их контекста. Поэтому дочерний 9999 не «пробивает» границу своего контекста и не поднимается над header. Сравниваются уровни родителей. Числа вложенных детей в этом сравнении не участвуют. (По данным developer.mozilla.org).

Редакционный пример

Ниже — законченный учебный файл: он составлен редакцией и содержит условные данные. Это не результат наблюдения за конкретным сайтом. Его можно сохранить как .html и открыть в браузере самостоятельно. В обоих вариантах положения блока различаются только значением z-index у родителя .layer.

HTML37 строк
<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8">
  <title>Редакционный пример: вложенный контекст</title>
  <style>
    /* Условный пример. Значения подобраны только для демонстрации сравнения уровней. */
    .layer {
      position: absolute;   /* родитель позиционирован */
      top: 40px; left: 40px;
      z-index: 1;           /* вариант 1: уровень родителя ниже header */
      /* z-index: 3; */     /* вариант 2: раскомментируйте и закомментируйте вариант 1 */
      width: 320px;
    }
    .modal {
      position: absolute;
      z-index: 9999;        /* большое число действует только внутри .layer */
      background: #fff;
      border: 1px solid #333;
      padding: 16px;
    }
    .header {
      position: absolute;
      z-index: 2;           /* header конкурирует с уровнем .layer, а не с числом .modal */
      top: 0; left: 0; right: 0;
      padding: 16px;
      background: #ddd;
    }
  </style>
</head>
<body>
  <div class="header">header (z-index: 2)</div>
  <div class="layer">
    <div class="modal">modal (z-index: 9999 внутри .layer)</div>
  </div>
</body>
</html>

Уровни удобно читать как учебную аналогию: в первом варианте условно сравниваются «1.9999» и «2», во втором — «3.9999» и «2». Это иллюстрация подчинённости дочернего значения уровню родителя. Математическим расчётом CSS она не является.

Как проверить

  1. Убедитесь, что z-index вообще применим: он действует для позиционированных элементов, а также для элементов flex и grid. Если у .modal нет position и он не является flex- или grid-элементом, свойство не даст эффекта.
  2. Найдите ближайшего предка, который создаёт контекст наложения. Кроме position и z-index, контекст создаёт, например, transform со значением, отличным от none.
  3. Откройте инспектор и посмотрите Computed у .modal, .layer и .header: применим ли z-index, какое позиционирование у каждого элемента и не появляется ли контекст у промежуточного родителя.

Ожидается, что в первом варианте header перекроет modal, а во втором modal окажется выше — при условии, что структура и остальные свойства совпадают с примером. Если header должен_оставаться выше, разумный шаг — скорректировать уровень того родителя, который задаёт конкуренцию с header, либо перестроить размещение overlay с учётом остальных элементов. Увеличивать число у .modal в этом случае не нужно. Пример намеренно не покрывает фокус, клавишу Escape и элемент dialog. (По данным developer.mozilla.org).

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

Почему z-index: 9999 у модального окна может проиграть header? Потому что сравниваются уровни контекстов наложения. Числа сами по себе здесь не решают. Если родитель модального окна сам создаёт контекст, весь родитель вместе с потомками участвует в контексте более высокого уровня как единое целое, и число 9999 действует только внутри него.

Что проверить первым, если z-index выглядит неработающим? Сначала убедитесь, что свойство вообще применимо к элементу, затем найдите ближайшего предка, который создаёт контекст наложения, и сравните уровни родителей. Значения и позиционирование удобно смотреть во вкладке Computed в инспекторе браузера.

Стоит ли просто увеличивать число у модального окна? Нет, если перекрытие задаёт родитель. Помогает корректировка уровня нужного родителя или перестроение размещения overlay с учётом остальных элементов страницы.


Плохая организация кода

Без четкой структуры и организации кода CSS файлы могут стать запутанными и трудными для понимания и поддержки.

Пример

css

/* Плохая организация кода */ header { ... } .button { ... } .container { ... } h1 { ... }

Как избежать

Организуйте ваш CSS код по логическим блокам, используя комментарии и группировку стилей. Можно использовать методологии, такие как BEM (Block Element Modifier) или SMACSS (Scalable and Modular Architecture for CSS).

Заключение

Ошибки в CSS могут показаться незначительными, но их последствия могут быть весьма неприятными. Осознание и избегание этих ошибок поможет вам создавать более стабильные, кроссбраузерные и удобные для пользователя веб-страницы. Постоянное совершенствование навыков и использование современных инструментов помогут вам справляться с задачами верстки более эффективно.

Читайте также

3 материала