Вопрос-ответ

Популярные вопросы с ответами для владельцев и разработчиков сайтов

Как создать хороший CSS-код?

Хороший CSS-код — это не просто стили, которые работают. Это код, который легко поддерживать, расширять и передавать другим разработчикам. Основные принципы: используйте семантические имена классов (по БЭМ или другой методологии), избегайте !important, не используйте id для стилизации, применяйте относительные единицы (rem, em, % вместо px), группируйте связанные стили, пишите комментарии для сложных участков, минимизируйте вложенность (не более 3-4 уровней), используйте CSS-переменные для повторяющихся значений (цвета, отступы), и всегда проверяйте кроссбраузерность и адаптивность через медиазапросы. Хороший CSS — это результат рефакторинга, а не первая версия «на коленке».

Правило №1: Методология именования классов (БЭМ, OOCSS, SMACSS)

Без системы именования CSS-классов проект быстро превращается в хаос. Самая популярная методология в русскоязычной среде — БЭМ (Блок, Элемент, Модификатор), разработанная в Яндексе. Пример:

.card { } /* блок */
.card__title { } /* элемент блока */
.card--featured { } /* модификатор (особый вид блока) */

Почему это хорошо:

  • Селекторы имеют низкую специфичность (не нужно переопределять через !important).
  • Имена классов понятны любому разработчику.
  • Нет вложенности — каждый класс самодостаточен.

Альтернативы: SMACSS (разделение на базовые, макетные, модульные стили), OOCSS (выделение повторяющихся объектов). Выберите одну методологию и придерживайтесь её во всём проекте.

Правило №2: Минимизируйте использование !important

!important — это как ядерная бомба. Он перебивает любую специфичность, но делает последующие правки кошмаром. Никогда не используйте !important в глобальных стилях. Исключения (крайне редкие):

  • Переопределение сторонних библиотек, где нет другого способа.
  • Утилитарные классы (например, .hidden { display: none !important; }).

Если вы ловите себя на том, что добавляете !important, остановитесь и подумайте: может, у вас слишком высокий уровень специфичности из-за id или вложенных селекторов? Лучше понизить специфичность селектора, чем добавлять !important.

Правило №3: Относительные единицы вместо px

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

  • rem — относительно шрифта корневого элемента (html). Идеален для размеров шрифтов, отступов, ширины блоков. Позволяет масштабировать сайт при увеличении шрифта в настройках браузера.
  • em — относительно шрифта родительского элемента. Используйте для элементов, которые должны масштабироваться относительно своего контекста (например, иконка рядом с текстом).
  • % и vw/vh — для адаптивных ширин и высот.

Пример: задайте базовый размер шрифта html: html { font-size: 16px; } (но лучше 100%, чтобы уважать настройки пользователя: font-size: 100%; — это обычно 16px по умолчанию). Тогда 1rem = 16px. Используйте 1rem вместо 16px, 0.875rem вместо 14px.

Правило №4: CSS-переменные (кастомные свойства)

Вместо того чтобы копировать значение цвета или отступа 100 раз, определите переменную:

:root {
    --primary-color: #0066cc;
    --spacing-unit: 1rem;
}
.button {
    background-color: var(--primary-color);
    padding: calc(var(--spacing-unit) * 0.5) var(--spacing-unit);
}

Переменные упрощают поддержку: достаточно изменить значение в одном месте, и оно обновится везде. Их можно переопределять внутри медиазапросов (например, уменьшить --spacing-unit на мобильных устройствах).

Правило №5: Думайте о мобильных устройствах с самого начала (Mobile First)

Пишите стили для мобильных устройств (маленький экран) по умолчанию, а для более широких экранов используйте @media (min-width: ...). Это уменьшает количество кода и заставляет вас фокусироваться на важном.

/* По умолчанию — мобильная версия */
.card {
    display: flex;
    flex-direction: column;
}
/* Для планшетов */
@media (min-width: 768px) {
    .card {
        flex-direction: row;
    }
}

Избегайте max-width — это подход «десктоп-first», который приводит к переопределению стилей и менее адаптивен.

0276

Правило №6: Группировка и комментарии

Разделяйте CSS-файл на логические блоки и комментируйте их:

/* ========== БАЗОВЫЕ СТИЛИ ========== */
/* ========== КОМПОНЕНТЫ ========== */
/* Кнопки */
.btn { }
/* Карточки товаров */
.product-card { }
/* ========== УТИЛИТЫ ========== */
.hidden { }

Избегайте бессмысленных комментариев (/* красный текст */ — понятно и без комментария). Комментируйте «почему» сделано так, а не «что» делает код.

Правило №7: Избегайте глубокой вложенности селекторов

Вложенность в 4-5 уровней (через SCSS/Less или в обычном CSS) ведёт к излишней специфичности и плохой читаемости. Пример плохого кода:

.main .container .content .card .button { }

Лучше дать блоку простой класс .card__button. Если вы используете препроцессоры, ограничьте вложенность 3-мя уровнями (включая псевдоклассы).

Правило №8: Используйте автопрефиксер и проверяйте кроссбраузерность

Современный CSS (Flexbox, Grid, переменные) поддерживается во всех актуальных браузерах, но для старых (Opera Mini, IE 11) нужны префиксы. Вместо того чтобы писать их вручную, используйте инструменты автопрефиксера (Autoprefixer в сборках Webpack, Vite, или плагины для VS Code).

Проверяйте CSS в разных браузерах через BrowserStack или локальные инструменты разработчика (эмуляция устройств). Особенно важны Flexbox и Grid на старых версиях Safari.

Правило №9: Модульная структура файлов (для больших проектов)

Если ваш CSS-файл вырастает до 5000+ строк, разбейте его на модули:

  • base/ (сброс стилей, переменные, базовая типографика).
  • components/ (кнопки, карточки, формы, модалки).
  • layout/ (сетка, хедер, футер, сайдбар).
  • utilities/ (утилитарные классы, анимации).

Затем соберите их через @import (только в препроцессорах) или через сборщик (Webpack). Это облегчает навигацию и командную работу.

Правило №10: Рефакторинг — регулярно чистите код

Хороший CSS не пишется с первого раза. Вы обязательно создадите неиспользуемые классы, дублирующиеся правила, слишком специфичные селекторы. Раз в месяц (или перед релизом) проводите рефакторинг:

  • Удалите неиспользуемые стили (помогают инструменты Chrome DevTools → Coverage).
  • Объедините повторяющиеся блоки (например, одинаковые анимации).
  • Вынесите магические числа в CSS-переменные.
  • Перепишите громоздкие селекторы на БЭМ-классы.

Резюме от эксперта

Хороший CSS — это не магия, а результат дисциплины. Используйте методологию именования (БЭМ), избегайте !important и глубокой вложенности, применяйте относительные единицы и CSS-переменные, думайте о мобильных устройствах первыми. Всегда проверяйте код в разных браузерах и не забывайте про рефакторинг. И помните: CSS — это язык, на котором говорит браузер с дизайном. Говорите с ним вежливо и чётко, и он ответит вам красивым и предсказуемым интерфейсом.