CSS-модульность: организация стилей в модульной структуре

🧩 Почему модульность — это спасение?

Когда проект растёт, CSS превращается в лапшу. Один файл styles.css на 5000 строк — это ад для поддержки. Модульность решает проблему:

  • Изолированные стили — нет конфликтов имён классов
  • Переиспользование — компоненты как конструктор Лего
  • Читаемость — всё разложено по полочкам

💡 Вдохновение от Данилы Бежина: «Думайте о стилях как о микросервисах — каждый делает свою работу идеально».

🗂 Основные подходы к организации

1. По компонентам (Atomic Design)

src/styles/
├── components/
│   ├── button.css
│   ├── card.css
│   └── modal.css
├── base/          # Сброс и глобальные стили
└── utils/         # Переменные, миксины

Пример button.css:

.btn {
  padding: 12px 24px;
  border-radius: 4px;
  font-weight: 500;
}

.btn--primary {
  background: var(--color-blue);
  color: white;
}

2. По страницам (для сложных проектов)

styles/
├── home/
│   ├── hero.css
│   └── features.css
└── about/
    ├── team.css
    └── history.css

🧪 CSS-модули на практике

Технология, где имена классов автоматически становятся уникальными. Идеально для React/Vue.

До (проблема):

.title { color: red; } /* Конфликт имён! */

После (решение):

import styles from './Card.module.css';

function Card() {
  return <h2 className={styles.title}>Безопасно!</h2>;
}

Компилятор преобразует это в:

<h2 class="Card_title__a1b2c">Безопасно!</h2>

⚡ Профит: Можно использовать простые имена вроде .title или .button без риска.


🎨 Переменные и миксины: суперсила

CSS-переменные (глобальные)

:root {
  --color-primary: #3a86ff;
  --border-radius: 8px;
}

.button {
  background: var(--color-primary);
  border-radius: var(--border-radius);
}

SCSS-миксины (для повторяющегося кода)

@mixin flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}

.hero {
  @include flex-center;
  height: 100vh;
}

🛡 БЭМ vs CSS-модули

Критерий БЭМ CSS-модули
Уникальность Ручные префиксы (block__elem) Автогенерация
Поддержка Везде Требует настройки сборки
Читаемость Длинные классы Короткие имена

Выбор зависит от проекта: БЭМ хорош для vanilla-проектов, CSS-модули — для современных сборок.


🔥 Горячие советы

1. Именуйте осмысленно

  • Плохо: .div-1, .red-box
  • Хорошо: .user-card, .alert-warning

2. Держите стили рядом с компонентами

/components
├── Button
│   ├── Button.jsx
│   └── Button.module.css

3. Используйте stylelint — он поймает дубликаты и мертвый код.

4. Документируйте сложные компоненты в комментариях:

/* Карточка товара:  
 * - Отступы: 16px  
 * - Тень только при ховере  
 */
.product-card {
  padding: 16px;
  transition: box-shadow 0.2s;
}

🚀 Что дальше?

  • Поэкспериментируйте с CSS-in-JS (Styled Components)
  • Изучите Utility-first подход (Tailwind CSS)

Главное — начать делить стили на атомы сегодня, даже в маленьких проектах. Ваш будущий «я» скажет спасибо! ✨

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube