Включение CSS и HTML в абстракции, обрабатываемые на сервере, в конечном итоге ведет к значительному раздуванию кода, потому что CSS и HTML требуют гораздо более модульной структуры объектов, чем, например, PHP.
Правильная модульность - один из способов уменьшения CSS кода
На этапе подготовки данных на сервере (например, в PHP) следующая история из ленты Facebook может быть одним отдельным объектом. То есть вся логика определения того, какие куски HTML показывать, а какие скрывать, содержится в однообъектной структуре.
Часто разработчики пытаются привести CSS в соответствие с этой логикой. Мы исходим из предположения, что весь код CSS для истории в ленте будет заключен внутри оберточного идентификатора, например #story. В итоге получается весьма раздутый код. Почему? Потому что правильная архитектура для слоя CSS должна быть намного более модульной. Попытка базировать архитектуру CSS на уровне PHP чем-то сродни попытке использовать схему базы данных для настройки сервера apache. Это просто не работает.
Таким образом, мы видим, что приведенный выше пример истории в ленте состоит из множества более мелких объектов. По мере того, как мы разбиваем крупные объекты на более мелкие, мы начинаем видеть, что одни и те же шаблоны появляются снова и снова, и одни и те же объекты становятся гораздо более пригодными для повторного использования. Мы начинаем видеть, что большинство сайтов состоят из одних и тех же базовых повторяющихся шаблонов, объединенных разными способами. В качестве побочного преимущества CSS становится намного меньше и проще.
Объект из нашего примера истории в ленте можно разбить на несколько HTML и CSS объектов:
1 заголовок
5 медиа блоков
2 стиля ссылок
1 список комментариев
1 список действий
1 абзац
А какие преимущества у такого подхода?
Правильная модульность объектов CSS означает, что наш CSS (и, как следствие, наш HTML) становится намного проще и легче. Наш маленький объект многократного использования можно использовать по всему сайту для создания новых и непохожих страниц без добавления лишнего CSS кода.
В качестве отправной точки мы рекомендуем создавать следующие объекты: заголовки, списки, текстовые пояснения и ссылки, контейнеры, медиаобъекты, сетки и шаблоны. Прежде чем создавать целые страницы, сначала создавайте самые маленькие объекты, и ваш CSS по умолчанию останется маленьким.