По мере роста проекта в CSS накапливаются повторы: один и тот же отступ, цвет кнопки или стиль контейнера прописываются снова и снова в десятке мест. Изменить что-то становится мучением — приходится править одно и то же во многих строчках. Решение — выделять переиспользуемые классы и разбивать стили на логические части. Это делает код короче, а изменения — точечными: поменяли в одном месте, применилось везде.
После этого урока вы сможете находить в стилях повторы, выносить их в переиспользуемые классы и организовывать CSS по логическим группам.
Что уже умеем / что добавим
Вы владеете BEM и понимаете специфичность. Теперь научимся не повторяться и структурировать стили. В сквозном проекте мы вынесем общие стили кнопок и контейнера в переиспользуемые классы.
Что вы узнаете в рамках статьи
- Почему повторение в CSS — это проблема.
- Как выносить общие стили в переиспользуемый класс.
- Как сочетать несколько классов на одном элементе.
- Что такое служебные (утилитарные) классы.
- Как разбивать стили на логические группы.
Ключевые термины
- DRY — принцип «не повторяйся» (Don't Repeat Yourself).
- Переиспользуемый класс — класс с общими стилями для многих элементов.
- Утилитарный класс — маленький класс на одно-два свойства.
- Композиция классов — сочетание нескольких классов на элементе.
Проблема повторения
Взгляните на типичную ситуацию: две кнопки, у которых совпадает почти всё, кроме цвета:
.button-submit {
padding: 0.7rem 1.5rem;
border: none;
border-radius: 8px;
color: white;
background-color: #1a3c8c;
}
.button-cancel {
padding: 0.7rem 1.5rem;
border: none;
border-radius: 8px;
color: white;
background-color: #888;
}
Пять из шести свойств продублированы. Если понадобится изменить скругление всех кнопок, править придётся в двух местах — а в реальном проекте таких кнопок десятки. Это нарушение принципа DRY («не повторяйся»). Повторение — источник ошибок и лишней работы. Разберёмся, как его убрать.
Выносим общее в один класс
Общие свойства выносим в базовый класс, а различия оставляем в отдельных. Затем сочетаем классы на элементе:
.button {
padding: 0.7rem 1.5rem;
border: none;
border-radius: 8px;
color: white;
}
.button--primary {
background-color: #1a3c8c;
}
.button--secondary {
background-color: #888;
}
<button class="button button--primary">Отправить</button>
<button class="button button--secondary">Отмена</button>
Теперь общие стили описаны один раз в .button, а классы-модификаторы задают только цвет. Изменили скругление в .button — оно поменялось у всех кнопок сразу. Это и есть сила переиспользования: меньше кода, проще правки. Заметьте, что мы естественно пришли к BEM-модификаторам из прошлого урока.
Композиция классов
Приём, когда элемент несёт несколько классов, каждый со своей задачей, называют композицией. Один класс отвечает за одно, другой — за другое, и вместе они складываются в итоговый вид:
<button class="button button--primary">Отправить</button>
Здесь button даёт форму и размер, button--primary — цвет. Их можно комбинировать в любых сочетаниях: button button--secondary, button button--large и так далее, не переписывая общие свойства. Композиция — гибкий способ строить варианты из переиспользуемых частей, как из кубиков.
Утилитарные классы и группировка
Иногда полезны совсем маленькие классы на одно-два свойства — их называют утилитарными. Например, класс для центрирования текста или для отступа снизу:
.text-center {
text-align: center;
}
.mb-2 {
margin-bottom: 1rem;
}
Такой класс можно навесить на любой элемент, которому нужно это свойство, — не создавая новых правил. Утилиты хороши для мелких, часто повторяющихся штрихов. Наконец, сам файл стилей стоит разбивать на логические группы с комментариями — так в нём легко ориентироваться:
/* --- Кнопки --- */
.button { ... }
/* --- Карточки --- */
.card { ... }
/* --- Форма --- */
.contact { ... }
Группировка по компонентам и понятные комментарии превращают длинный файл стилей в аккуратно организованный документ, где всё на своих местах.
Применяем в проекте
Наведём порядок в стилях сайта. Вынесем общие свойства кнопок в базовый класс button с модификаторами, а стили сгруппируем по компонентам с комментариями.
/* --- Кнопки --- */
.button {
padding: 0.7rem 1.5rem;
border: none;
border-radius: 8px;
color: white;
transition: background-color 0.2s;
}
.button--primary {
background-color: #1a3c8c;
}
.button--primary:hover {
background-color: #163175;
}
/* --- Утилиты --- */
.text-center {
text-align: center;
}
<button class="button button--primary">Оставить заявку</button>
Обновите страницу: кнопки выглядят как раньше, но теперь их стили не дублируются, а собраны из переиспользуемых частей. Общие свойства заданы один раз, различия — в модификаторах, а файл стилей разбит на понятные секции. Любое изменение вносится в одном месте и применяется везде. Код стал чистым и готовым к росту.
Частые ошибки
- Копирование блоков свойств.
Если видите повтор — вынесите общее в отдельный класс вместо дублирования. - Слишком много утилит.
Утилитарные классы хороши в меру; для целого компонента лучше осмысленный класс. - Один класс на всё.
Не пытайтесь уместить все стили в один класс; разделяйте общее и вариативное. - Хаос в файле.
Без группировки и комментариев большой CSS быстро становится нечитаемым.
Итоги
Замечательно — вы научились не повторяться! Теперь вы умеете находить дублирование, выносить общие стили в переиспользуемые классы, собирать элементы композицией классов и организовывать CSS по логическим группам. Это делает код короче, а правки — быстрыми и безопасными. Стили вашего сайта стали чистыми, переиспользуемыми и аккуратно структурированными.
Отличная работа! В следующем, заключительном уроке курса мы соберём всё воедино и поговорим о хорошем codestyle — правилах аккуратного и читаемого CSS.