Учимся любить БЭМ

Должен признаться: когда я впервые услышал о БЭМ, я подумал, что идея как-то не очень. Зачем так усложнять именование в CSS? Можно же называть классы проще: .form-group или .accordion. Какой смысл заморачиваться классами вроде .accordion__child и .accordion__child--highlighted?

В январе я работал над одним проектом с моим коллегой Йелле (Jelle), который в своем коде использует БЭМ-синтаксис. Сначала я сомневался в этом подходе, но, так как он был ведущим HTML/CSS разработчиком проекта, ему и карты в руки.

Со временем я узнал БЭМ получше и убедился, что у него есть свои достоинства: в основном он полезен для больших приложений с огромным количеством компонентов.

Представьте себе интерфейс панели управления со множеством виджетов и множеством страниц с разными состояниями. Представьте продукт, который должен оставаться стабильным, хотя над его CSS-компонентами работает много разных людей. Вот тут-то БЭМ и обретает смысл.

Логика БЭМ (Блок — Элемент — Модификатор):

Более развёрнутое объяснение можно найти тут.

Это даёт следующие преимущества:

Конечно, у БЭМ есть свои недостатки:

С моей точки зрения, для сайтов, которые поддерживают один или несколько человек, БЭМ необязателен, и я скорее буду использовать normalize.css и простое именование.

Для больших проектов БЭМ — отличный выбор. Он потребует некоторых усилий в начале работы, но сэкономит массу времени в долгосрочной перспективе. Так что вперёд!