Как стать автором
Обновить

BEM vs Atomic CSS или картинка по номерам

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров2.1K

Доброго времени суток. На днях читая очередную статью о том, как повысить свою эффективность в верстке и расширить кругозор возможностей, я задумался, а что сейчас в тренде? Как вы уже поняли, я начал добывать информацию о подходах. Как итог, моему изумлению не было предела, когда я понял, что за много лет почти ничего не поменялось.  

Для начала предлагаю разобраться, о чем статья. В данной статье я попытался свести все свои знания касающиеся использования CSS и подходов (методологий) организации CSS-кода (селекторов) и нюансов использования того или иного подхода, а также провести сравнительный анализ. Как говорил Юрий Гагарин - Поехали!

Вначале было слово…

В начале было слово и слово это было BEM. Для душнил  в начале предлагаю ознакомиться с краткой историей создания.

ВЕМ (BEM) CSS — это методология именования классов в HTML и CSS, разработанная в компании Яндекс для создания масштабируемых и поддерживаемых веб-интерфейсов. Но для наглядности предлагаю перенестись в эпоху когда по земле бродили мамонты, активно использовался IE6, jQuery  набирал популярность, а у меня еще были волосы на голове и не было седых волос в других местах.

Начало отсчета:

  1. 2005–2007: Предпосылки

    • В середине 2000-х веб-разработка становилась сложнее: проекты росли, код нужно было поддерживать и масштабировать. 

    • В Яндексе столкнулись с проблемой "хрупкости" CSS — изменения в одном месте ломали другие части интерфейса.

  2. 2008: Появление BEM

    • Команда Яндекса (включая Виталия Харисова и других инженеров) начала разработку методологии, которая:

      • Упрощала поддержку кода.

      • Делала стили независимыми и переиспользуемыми.

      • Позволяла работать в команде без конфликтов.

    • Первые принципы BEM были описаны в 2008–2009 годах.

  3. 2010: Формализация методологии

    • BEM был представлен публично на конференциях.

    • Появилась документация и первые инструменты (например, bem-tools).

  4. 2013–2015: Популяризация

    • BEM вышел за пределы Яндекса и стал популярен в мировом фронтенд-сообществе.

    • Появились альтернативные реализации (например, BEM в Sass/Less).

  5. Современный BEM

    • Методология продолжает развиваться, но основные принципы остаются неизменными.

    • Используется в крупных проектах 

Основные принципы BEM

  • Блок (Block) — независимый компонент (например, menu, button).

  • Элемент (Element) — часть блока (например, menu__item).

  • Модификатор (Modifier) — свойство блока или элемента (например, button--disabled).

BEM решает проблемы каскадности CSS и избыточности селекторов, делая код предсказуемым и легко поддерживаемым. Самым прекрасным было то, что стоило взглянуть на селектор и ты сразу понимал, куда тебе надо лезть чтобы исправить косяк. Благодаря подходу BEM, так же решалась проблема оптимизации рендеринга стилей, так как была рекомендация что уровень вложенности селектора не должен превышать 3х. Вопрос для знатоков: кто из вас знает, как читается CSS-селектор, точнее его алгоритм? 

Время не щадит никого

Годы прошли и сложность проектов выросла в геометрической прогрессии, я облысел  и заработал седину в некоторых местах. Так же масла в огонь начали подливать новые технологии в разработке (Angular, React, Backbone и другие). В общем все стало сложно.  

Atomic CSS (или функциональный CSS) — это подход к написанию CSS, при котором используются небольшие, одноцелевые классы с максимально возможной декомпозицией стилей.

История создания Atomic CSS

Концепция Atomic CSS не имеет одного конкретного автора, но её развитие связано с несколькими ключевыми моментами в эволюции веб-разработки:

1. Ранние предпосылки (2000-е)

  • CSS-фреймворки вроде Bootstrap и Foundation использовали утилитарные классы (например, .text-center, .mt-10), но они были частью более крупных систем.

  • OOCSS (Object-Oriented CSS, 2009) от Николь Салливан (Nicole Sullivan) предложил разделение структуры и оформления, что стало шагом к атомарности.

2. Появление Atomic CSS (2010-е)

  • 2013–2014: Yahoo! разработал ACSS (Atomic CSS) как часть своего фреймворка. Главный идеолог — Тьерри Кобленц (Thierry Koblentz).

    • Основная идея: вместо семантических имен классов (.button-primary) использовать атомарные (.bg-blue, .p-10).

    • Цель: уменьшение дублирования кода и размера CSS.

  • 2014: Статья Кобленца "Challenging CSS Best Practices" вызвала споры, но популяризировала подход.

3. Развитие и инструменты

  • 2017: Tailwind CSS (Адам Уотан) сделал Atomic CSS мейнстримом, предложив готовую систему утилитарных классов.

  • Другие решения:

    • Tachyons (2014) — ранний фреймворк Atomic CSS.

    • CSS-in-JS-библиотеки (например, Styled System) заимствовали идеи атомарности.

4. Современное состояние

  • Atomic CSS стал популярен в больших проектах (например, Facebook, GitHub) благодаря:

    • Минимальному CSS-бандлу (только используемые классы).

    • Быстрой разработке без переключения между файлами.

  • Критики указывают на сложность чтения HTML из-за множества классов.

Atomic CSS эволюционировал из идей OOCSS и утилитарных подходов, а его расцвет связан с фреймворками вроде Tailwind. Сегодня это один из ключевых подходов в веб-разработке. Простота в освоении подкупает, да и в целом писать атомарные классы в разы проще чем описание всего и вся.

Противостояние Кинг-Конга и Годзиллы…

Итак, сейчас начнется самое интересное. Кто дочитал до этого момента, начал задаваться вопросом, а зачем я это все вообще затеял? Типа Atomic современные и прогрессивнее и чего тут думать? Не совсем так, тут ситуация, как с автомобилями Toyota: кто-то считает, что раньше было лучше, кто-то, что современные вообще пушка-гонка-петарда. Предлагаю разобраться что и для чего подходит.

Плюсы BEM

  • Четкая структура - ясная иерархия компонентов, так как по классу можно определить что и куда вложено 

  • Изоляция стилей - низкая вероятность конфликтов из-за высокой степени уникальности селекторов

  • Понятные имена классов - сразу видно, к чему относится стиль

  • Масштабируемость - хорошо подходит для больших проектов

  • Поддержка компонентного подхода - идеально сочетается с React/Vue/Angular

  • Удобство рефакторинга - легко находить и изменять стили компонентов без боязни разломать проект

Минусы BEM

  • Длинные имена классов - могут становиться громоздкими и есть вероятность опечатки

  • Повторение кода - возможно дублирование стилей (так как приходиться описывать все)

  • Большие CSS-файлы - особенно в больших проектах, спорный момент. Тут вопрос  больше к организации верстки

  • Необходимость дисциплины - требует строгого следования методологии, что начинающим разработчикам  зачастую не по силам

  • Меньшая плотность стилей - больше кода в HTML, если сказать простым языком - один класс может содержать в себе все. Начиная от позиционирования и заканчивания анимацией

Плюсы Atomic CSS

  • Минимальный CSS - один раз определив классы, можно их многократно использовать.Один класс - одна строчка.

  • Высокая повторяемость - уменьшение дублирования кода

  • Маленький размер CSS - особенно при использовании утилит

  • Быстрое прототипирование - легко комбинировать стили прямо в HTML

  • Нет конфликтов - каждый класс влияет только на одно свойство

  • Простота поддержки - не нужно придумывать имена классов

Минусы Atomic CSS

  • "Грязный" HTML - много классов в разметке

  • Сложность чтения - аббревиатуры не всегда интуитивны

  • Ограниченная семантика - классы описывают стили, а не смысл

  • Сложность с динамическими значениями - например, для уникальных отступов

  • Неудобство для сложных компонентов - может потребоваться много классов

  • Кривая обучения - нужно запоминать аббревиатуры

Сравнительная таблица

Критерий

BEM

Atomic CSS

Размер CSS

Больше (может расти)

Меньше (фиксированный)

Размер HTML

Умеренный

Больше (много классов)

Производительность

Хорошая

Отличная (меньше CSS)

Читаемость

Высокая (семантичные имена)

Низкая (аббревиатуры)

Масштабируемость

Отличная

Хорошая (но может быть messy)

Кривая обучения

Умеренная

Высокая

Поддержка

Проще для больших проектов

Сложнее при росте проекта

Гибкость

Меньше (компонентный подход)

Больше (легко комбинировать)

Инструменты

SCSS/LESS поддержка

Часто требует генераторов

Чек лист для выбора

Выбирайте BEM если:

  • Работаете над большим, долгосрочным проектом

  • Важна семантика и чистота HTML

  • Используете компонентный подход (React/Vue/Angular)

  • В команде важно поддерживать единый стиль

Выбирайте Atomic CSS если:

  • Нужна максимальная производительность

  • Проект небольшой или средний

  • Часто делаете прототипы и быстрые изменения

  • Готовы использовать готовые решения (Tailwind CSS)

  • Команда готова к специфическому подходу

Я автор я так вижу - гибридные подходы

Многие современные проекты используют комбинацию обоих подходов:

  • Atomic CSS для базовых/утилитных стилей

  • BEM для сложных компонентов

Оба подхода имеют свои преимущества и недостатки. BEM лучше подходит для структурированных, долгосрочных проектов с четкой архитектурой, тогда как Atomic CSS предлагает более гибкий и производительный подход для быстрой разработки. Современная тенденция - использовать инструменты типа Tailwind CSS, которые сочетают преимущества Atomic CSS с улучшенной разработкой. Но я не сторонник готовых css-наборов, так как они избыточные. Вы никогда не будете использовать их целиком, но при этом они затягивают все и сразу

P.S.

Как я люблю повторять: и микроскопом можно гвозди забивать, но зачем.
Каждый инструмент создан под определенные задачи. Я лично использую гибридный подход или BEM так как привычнее ( я, походу, старовер) или же просто у меня все проекты крупные. 

Теги:
Хабы:
+3
Комментарии6

Публикации

Истории

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область