- PVSM.RU - https://www.pvsm.ru -

БЭМ одержимость. Последствие параметрического дизайна

Тысячи часов было инвестировано мной вхолостую. Если верить правилу 10 000 часов, то еще не много и я мог бы стать сносным скрипачем, ремесленником, спортсменом или еще кем-то. Но в разработке и дизайне это не работает. Весь шлак удаляется и часы обнуляются. А число ошибок и скорость изменения настолько велика, что мысли о приобретенном опыте можно отбросить.

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

Мне, как дизайнеру, не хочется тратить 90% времени на формирование окружения (структуру, сборщики и другие подобные вещи). А писать HTML и CSS по старинке, я позволить себе не могу. Таким образом, появляется необходимость в среде для «умного» дизайна.

Анти-кастомщина

Какое-то время я был горд проделанной работой. То, тем как поменялись процессы в нашей команде, как мы выходили из полного дизайн хаоса. Я описывал это в статье «Дизайн масштабируемых проектов» [1]. Но меня беспокоило несколько моментов. И ощущение того, что мы написали свою кастомщину (хоть и достойно справляющуюся со своими задачами) все чаще напрягало.

Все начало меняться, когда на одном из @cssunderhood [2], появился Виталий Харисов [3]. Своими твитами он все сильней давил на те зудящие проблемы, имеющиеся в текущем процессе. И к концу недели я был совершенно обескуражен и не видел причин не попробовать БЭМ более основательно.

БЭМ как методология или что-то большее

К методологии БЭМ я пришел прогрессивным путем через МCSS [4]. И вопрос об ее использовании, уже не стоял. Но «Дизайн в браузере» [5] и так жутко пугающая вещь для многих дизайнеров, а реализация его по БЭМ методологии ручными способами просто обескураживает.

БЭМ больше чем просто методология

Вся проблема в том, что вы пытаетесь писать результирующий код. Но все резко меняется, когда вы ставите project-stub [6], пробуете описать ваш интерфейс на BEMJSON [7]. Я бы сказал, что это своего рода точка невозврата, когда мышление [8], восприятие интерфейса, его конструкций и способ реализации, меняется бесповоротно. Вот для примера карта коммитов на githab-е. Тут можно увидеть тот момент, когда я познакомился с project-stub [6]
image [9]

Bem-components

БЭМ компоненты были одной из основных причин, чтоб начать использовать БЭМ. Они были идеальны для прототипирования. Хотя и конструкции компонентов, мягко говоря, не предсказуемые. Я думаю об этом можно догадаться по докладам из жанра — «Как сверстать кнопку». Но именно эти конструкции перекрывали все спорные моменты, с которыми раньше приходилось мириться или решать костылями.

Для меня была важна закономерность параметров. Зная, склонность к порядку БЭМ команды, я рассчитывал найти закономерность в Яндексовских интерфейсах. Посмотрев большинство Яндекс сервисов, я обнаружил большую разношерстность, не смотря на внешнее сходство всех проектов. И я решил, заточить дизайн среду под себя.

Распотрошил bem-components

  1. Мой старт начинался с прототипирования на BEMJSON [7], c использованием bem-components [10]. Для прототипов нужно было составить небольшие гайды. Так как я прошерстил несколько Яндексовых сервисов, у меня уже сложилось общее понимание, как устроен их UI, хотя общего между сервисами, за исключением веб компонентов, было не так уж и много. Я раздробил каждый сервис по нескольким составляющим: типографика, цвета, отступы, размеры контролов, конструкции и т.д. Найдя закономерности, опираясь на накопленный опыт в формировании живых стаил гайдов, я составил вот такой гайд [11] для прототипов + заиспользовал bem-grid [12] для конструкций каркаса страниц.
  2. Второй глобальной задачей для меня было — внести кастомность. Чтоб формировать проектный UI на базе сверстанного прототипа. И я начал с цветов. Оптимизировал bem-components [10], для удобной кастомизации их цветов.
    1. Вытащил все цвета, которые были в файлах common.blocks/компонент/_theme/компонент_theme_island.styl. Получился 31 цвет (вместе с оттенками, прозрачностями и тд).
    2. Привел все к hsla, чтоб были наглядно видно основные цвета.
    3. Разбил цвета(оттенки) на группы, по основным цветам.
    4. Вытащил в переменные основные цвета:
      • $base = #000
      • $active = #070
      • $link = #44b
      • $project = #fc0
      • $alert = #e00
      • $normal = #f6f5f3

    5. Задал hue, saturation, lightness, opacity через Stylus [13].
    6. Создал файлик design/colors.styl [14] и импортировал его в стили компонентов
    7. Процесс оптимизации — codepen.io/koloskof/full/gaNGgB [15]

    Что получилось — github.com/bemcustom/bemcustom-components/tree/cosmetic [16]

    Это было хорошее начало, но хотелось более гибкой настройки.

  3. Проанализировал все параметры, которые нужно менять при формировании своей «темы», в соответствии со стилем проекта. Таким образом, их получилось 200 штук [17]. Все они были вынесены в отдельный файл. Многие из них были неочевидны, так как отражали особенность конструкций БЭМ компонентов. Поэтому рядом с каждой переменной указано, что она меняет (сейчас процесс оптимизации продолжается)
  4. Когда у вас есть большинство зависимостей для того, чтоб заниматься «Параметрическим дизайном» [18], трудно остановиться. И захотелось сфокусироваться на типографике. По статистике Джефри Зельдмана [19], 90% составляющих интерфейса это типографика. И она заслуживала отдельного внимания, поэтому ее я вынес в отдельный компонент [20], с несколькими группами модификаторов. Что позволяет гибко, но достаточно дисциплинированно использовать ее в компонентах. (Пару значений размеров пересекаются с компонентами, на это стоит обратить внимание при кастомизации)
  5. Стартонул базовый Kit [21], импортировав в блоки переменные отступов и цветов. Это сыроватый набросок открытого прототипа Kit-а с которым я буду довольно много экспериментировать, дошлифовывая БЭМ для своих дизайнерских нужд.

Самая ценная дизайнерская инвестиция

Хотя я проникся только начальной часть этой большой методологии, БЭМ стал для меня самой ценной дизайнерской инвестицией. Зная свою «симпатию» к «Дизайну в Браузере» [5], могу сказать, что БЭМ делает его логичным, мощнейшим и самым естественным способом реализации качественного UI-я.

P.S. Если вы не сделали первые шаги в БЭМ, как дизайнер, то у вас есть отличная возможность. Не стесняйтесь постучаться в БЭМ сообщество [22], которое довольно активное и в моменты ступора, направит вас в нужное направление.

Stay BEMed!

Автор: mkoloskov

Источник [23]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/veb-dizajn/108566

Ссылки в тексте:

[1] «Дизайн масштабируемых проектов»: http://bit.ly/1MZnGtd

[2] @cssunderhood: https://twitter.com/cssunderhood

[3] Виталий Харисов: https://twitter.com/harisov

[4] МCSS: https://operatino.github.io/MCSS/

[5] «Дизайн в браузере»: http://habrahabr.ru/post/238485/

[6] project-stub: https://github.com/bem/project-stub

[7] BEMJSON: https://ru.bem.info/technology/bemjson/v2/bemjson/

[8] мышление: http://www.braintools.ru

[9] Image: https://github.com/koloskof

[10] bem-components: https://ru.bem.info/libs/bem-components/v2.4.0/

[11] гайд: https://github.com/bemcustom/bemcustom-info/blob/master/styles.md

[12] bem-grid: https://github.com/bem-incubator/bem-grid

[13] Stylus: http://stylus-lang.com/

[14] design/colors.styl: https://github.com/bemcustom/bemcustom-components/blob/cosmetic/colors.styl

[15] codepen.io/koloskof/full/gaNGgB: http://codepen.io/koloskof/full/gaNGgB/

[16] github.com/bemcustom/bemcustom-components/tree/cosmetic: https://github.com/bemcustom/bemcustom-components/tree/cosmetic

[17] 200 штук: https://github.com/bemcustom/bemcustom-components/blob/custom/custom.styl

[18] «Параметрическим дизайном»: http://habrahabr.ru/post/274719/

[19] Джефри Зельдмана: http://www.zeldman.com/

[20] компонент: https://github.com/bemcustom/bemcustom-blocks/blob/master/common.blocks/text/text.styl

[21] Kit: https://github.com/bemcustom/bemcustom-blocks

[22] БЭМ сообщество: http://bem.info/forum

[23] Источник: http://habrahabr.ru/post/274721/