Дизайн
Женя Иванов
3859

Перестань рисовать ячейки — большой гайд по Figma Auto Layout

В закладки

За последние года полтора я нашёл себя в создании и оптимизации дизайн-систем, а инструменты для дизайна начали подыгрывать мне и постоянно подкидывают новую функциональность на изучение. В этой статье я покажу хардкорное применение последнего нововведения в Figma — Auto layout.

Экраны «Яндекс.Музыки» на одном компоненте​

Три явных плюса от ультимейт-компонента

  1. Не нужно собирать компонент ячейки в каждом проекте заново.
  2. UIkit получается компактным, но при этом легко кастомизируемым.
  3. Ускоряет создание диза… Ой ладно, это просто круто!

Вот такие штуки можно делать после этого гайда. Если хочешь так же, открывай фигму, сейчас научу :)

Это и есть наша ячейка, разложенная по частям:

  • Какие-то форматы картинок слева.
  • Текст по центру.
  • Различные контролы справа.

Сейчас объясню, за что отвечает каждый из чёрных квадратов и почему их столько.

Ссылка на этот Figma-проект есть в Telegram-канале. Там я всё аккуратно разложил по полочкам и добавил подсказки, а то когда я пришёл к такой ячейке в первый раз, было примерно так :D

Ну вот и гайд

Рисуем Frame и включаем вертикальный Auto layout с фиксированной шириной, которая тебе нужна в дизайне, — это контейнер ячейки, в котором кроме слоя с контентом и Padding’ов больше ничего не будет.

Примечание 1: в компонентах на лэйаутах часто получается много «пустых» слоёв, не паникуй, они все чуть-чуть влияют на компонент.

Примечание 2: каждый нарисованный шаг заводи в компонент, чтобы в дальнейшем можно было всё кастомизировать по отдельности, не затрагивая всю ячейку.

Следующий этап — слой с контентом. В этом артборде настрой только Spacing между частями ячейки, разумеется, переключи лэйаут по горизонтали, это же горизонтальный компонент.

Теперь переходим к самим деталям ячейки, но через несколько шагов вернемся к «пустым» контейнерам.

Это детальки, которые я использовал для демо, у тебя их может быть гораздо больше (помнишь скриншот моей первой ячейки? :). Естественно заведи все эти детали в компоненты. У текстового компонента обязательно включи лэйаут c Fixed width, потом нам это понадобится.

Начинается самое интересное

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

С левой частью всё легко. Просто группируем и включаем лейаут.

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

Сделать такие контейнеры не сложно, если ты включил Fixed width для текстовой детали (text root component) несколько шагов назад, просто растяни его на нужную ширину (вычти из ширины ячейки ширину левой и правой части ячейки).

Когда делаешь правую часть, закинь в неё все контролы, что тебе нужны, отключи Clip content у компонента и поставь фиксированную ширину, размером самой часто используемой детали, например иконки.

Это нужно, чтобы ячейка не разъезжалась при переключении деталей внутри правой части, если они разной длины. Обсуди этот момент с разработчиками, чтобы предотвратить различные вопросы :)

Теперь предыдущие компоненты с деталями закидываем в дополнительные контейнеры, и включаем лейауты. Для левой части — горизонтальный Auto height (в продвинутом mode закидывай туда систему отступов), для центральной — вертикальный Auto width, а для правой части — горизонтальный Fixed height, размер которой поставь по высоте средней левой части, в моём случае — 48 pt.

Правую часть делаем так специально, чтобы ваши контролы не ехали вслед за растягивающимся текстом. В таком способе есть мини-костыль, в маленькой ячейке нужно будет переключить правую часть с Fixed на Auto height либо сделать несколько контейнеров, для маленькой ячейки и для ячеек размером побольше, но в 95% случаев моего способа будет достаточно, чтобы покрыть все кейсы.

Теперь закидываем все три слоя Left, Center и Right part в наш компонент Content — и наша ячейка готова…

Почему это последняя в твоей жизни ячейка?

Это базовый компонент кита, который покрывает большинство кейсов. Если мне понадобится что-то добавить, я добавлю, а если нужно сделать редизайн общего стиля, то кастомизирую детальки компонента — и вуаля.

Пример кастомайза из начала статьи​

По сути, я скруглил края аватарки в левой части, добавил кнопку (тоже на лэйаутах) в правую часть, и ячейка уже подходит под другое приложение.

Окей, круто! А как перенести компонент в другой проект-то?

Если у вас платная версия Figma, то всё легче некуда, ну а если бесплатная, то придётся потратить минуты две… О нет…

Принцип простейший:

  • Копируешь инстанс cell component в новый проект, он должен стать детачнутым.
  • Идёшь в самый низкоуровневый слой и делаешь из него компонент.
  • Формируешь компонент из слоя уровнем выше, что заставит нижнеуровневый компонент выпрыгнуть рядом, оставив внутри свой инстанс.
  • Profit!

Гайд закончился

Надеюсь, ты понял, что я тут наворотил. Если что-то не получилось, чекай Figma-файл в Telegram-канале, ну а если и это не помогло, задавай вопросы в комментарии или мне в личку (Telegram, «ВКонтакте»).

Спасибо, что дочитал. Если интересно, в следующей статье, я разберу не менее важную тему — неправильного использования стилей в дизайн-системе и как настроить их супер гибко, bye :)

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Женя Иванов", "author_type": "self", "tags": [], "comments": 46, "likes": 25, "favorites": 206, "is_advertisement": false, "subsite_label": "design", "id": 111631, "is_wide": true, "is_ugc": true, "date": "Wed, 11 Mar 2020 04:44:24 +0300", "is_special": false }
(function(d, ver) { var s = d.createElement('script'); s.src = 'https://specials-f378ef5.gcdn.co/Covid19Quiz/all.min.js?' + ver; s.async = true; var container = d.getElementById('covid-quiz'); if (container) { s.onload = function() { new Covid19Quiz.Special({ css: 'https://specials-f378ef5.gcdn.co/Covid19Quiz/all.min.css?' + ver, container: container, location: 'article', share: { url: '', title: '', } }); }; } d.body.appendChild(s); })(document, 'fd9959fa');
0
46 комментариев
Популярные
По порядку
Написать комментарий...
3

Из-за этих авто-лейаутов я пришёл к наплевательству на сетку 

Ответить
0

Почему?))

Ответить
0

Тяжело уложить все базовые линии текстов на определенную сетку если верстать авто-лейаутом. Приходится костылить прозрачными распорками, чтоб базовые линии дотягивали до линеек

Ответить
0

Ааа, ну эт да)) Я не так давно перешёл на продвинутую систему отступов, всё благодаря тем же лейаутам, вроде как лечится нормально. Попробуй паддинги и марджины сделать компонентами и раскидывать во все компоненты

Ответить
1

Попробуй паддинги и марджины сделать компонентами и раскидывать во все компоненты

Да в пизду) Надоела эта мышинная возня. Решил, что новые проекты буду делать полностью бессистемно, полагаясь исключительно на глазомер.

Ответить
1

Пхах, ну если ты дизайнер различных промо страниц и прочего рекламного, то я всеми руками и ногами за, но не трогай святые интерфейсы))

Ответить
0

Именно их я и собираюсь трогать. Не бойся, больно не будет 

}:-)

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

Ответить
1

Ну мы с фронтом сейчас определили, что вот так ему будет удобно. То есть левый экран у меня полностью на лэйаутах и засунут в компонент, чтобы его можно было положить рядом и раскрыть сами отступы. Разраб просто пробегает по ним глазами и на раз-два вставляет условный padding-blue

Ответить
0

Это ж сколько дополнительной работы... 

Эх, всё это прокатывает когда тебя еще не заебали твердолобые упрямые фронты, и есть силы как-то им объяснять что-то. Я занимаюсь интерфейсами 6 лет, вроде недолго, а устал смертельно именно из-за наплевательства фронтов. 

Ответить
0

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

Ответить
0

может проблема тогда в конкретных фронтах, с кем ты работаешь, я про своего не могу так сказать, как ты про своего

Проблема в 99% фронтов. Тебе реально повезло, если твой - адекватный и умный. Люби его. Однако он не всегда будет с тобой, будут и другие фронты :С И вот когда ты познаешь их - приходи, братан, выпьем с тобой, посетуем на долю нашу дизайнерскую)

Ответить
0

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

Ответить
2

Не надо их пугать такими словами как система отступов. Надо просто говорить: «Солнышко, верстай пиксель-перфект» :D

Ответить
1

Ахахаха, возьму на заметку :D

Ответить
1

Не вздумай!

Ответить
0

Солнышко, верстай пиксель-перфект

...иначе уволим нахуй

Ответить
0

Это ж сколько дополнительной работы...

Вообще нисколько. Он просто знает что у него есть отступ 12px, например, и юзает его.

Ответить
0

Ну мы тупо цвета юзаем. То есть условный отступ 16px - синий. Фронту остаётся указать, что сюда вставляем синий паддинг, а цифровое значение подставляется из заранее заготовленных переменных

Ответить
0

Квадратные сетки и не нужны)

Ответить
–1

давно от них отказался, как и от колонок. Перешел сначала на 8рх линейки горизонтальные, а потом на 4рх линейки.

Счас думаю да пошло оно всё нахуй

Ответить
0

Пользуюсь готовой системой отступов (2 4 8 12 16 18 24 34 48 68 96 134 188) - это кайф. Ну, в новом проекте понадобилось ещё 6px. Такие системы сразу несколько проблем решают:
1. Не надо подгонять интерлиньяж под сетку
2. Не надо думать какой отступ выбирать, когда шаг 8px.

Ответить
0

А что именно за отступы, хде? чёт не понял

можно скрин?

Ответить
2

Это готовый список отступов, которые я использую в проектах сейчас. 2px, 4px и т.д

Вот представь что у тебя теперь есть вот этот список с отступами и никакие другие тебе использовать нельзя)

P.S Идея не моя, но мне максимально удобно.

Ответить
0

Пхах, ничего себе у тебя заготовочка, не путаешься в таком количестве отступов? Ты их как-то системно используешь или «на глаз» где квадратик 16px заходит, туда и ставишь?

Ответить
0

Это только кажется, что их много) Их абсолютно достаточно, чтобы не думать, какой отступ выбирать в этот раз.

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

Ответить
0

правило внешнего и внутреннего.

Уведу дискуссию в это русло.

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

Ответить
2

В дизайне можно всё. Нужно здравым смыслом руководствоваться. Но группировать элементы по смыслу это основы дизайна и психофизиология, как никак.

Ответить
0

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

Ответить
0

чтобы не жестить для разработчиков

Вот-вот. Еще поди вдолби это им в голову, про отступы-хуётступы. Покрутят пальцем у виска и сделают как получается, а не как надо.

Ответить
0

Ты усложняешь всё)

Разрабу не надо знать ни про какие системы отступов. Он просто верстает макет, а макет (его элементы) имеют заданные отступы по системе.

Кстати, одно дело делать отступы в шотике на дрибле, а другое в большом проекте. Как будешь соблюдать отступы тогда? На каждой странице новые придумывать? Или запоминать те, которые ты придумал на первом странице?)

Эту проблему решает система. Тебе не надо придумывать и выбирать отступы.

Ответить
0

Запоминать. 

Система отступов не всегда работает без осечек. Я бы даже сказал, что она настолько часто даёт осечку, что руки чешутся ее выкинуть. Например, в одном окружении заданные отступы работают хорошо, а в другом - не работают. Проблема именно в окружении, оно слишком сильно влияет на вроде бы уже отлаженные и отдизайненные объекты. И приходится выковыривать из мозгов нативное чувство прекрасного, чтобы собрать экран так, как будет удобно юзеру, а не дизайнеру или фронту. Да, на гомогенизации экранов можно ставить крест. Зато на выходе получаем реально удобный инструмент, а не шотик в дрибл) 

Ответить
0

Система отступов не всегда работает без осечек. Я бы даже сказал, что она настолько часто даёт осечку, что руки чешутся ее выкинуть.

Эх, наглядные примеры бы...

Системы-то можно разные делать. Под стандартную верстку, под воздушную и т.д. 

Ответить
0

Напиши свой набор.

Ответить
0

Тэк-с... Всё еще до конца непонятно. Как заготовки из квадратиков избавляют от необходимости подгонять интерлиньяж под сетку?

Ответить
0

Выше мой коммент затрагивает эти квадратики)

Ответить
0

Нет необходимости подгонять, потому что нет сетки) Вот просто нет клеточной сетки и всё) Ты её не используешь. А пользуешься исключительно готовыми отступами и делаешь из них красивый макет.

Ответить
2

А почему бы канал в телеграмме не записать видеоурок?

Ответить
0

Ты думаешь, видео зашло бы? Посёчил ю туб на предмет дизайнерских видео, мало просмотров собирают, подумал, что нецелесообразно тратить время на видео. Если бы были gif вставки в статью, тебе легче читался бы гайд?

Ответить
0

В новых статьях уже начал вставлять gif, а пак видеогайдов готовится к выпуску ;)

Ответить
0

Вау, огромное мерси)

Ответить
0

не устаете скрывать/проявлять слои постоянно? я бы лично разбил на еще пару компонентов для четкого деления по функциям и ускорения работы

Ответить
2

Конкретно в этой демке больше и нет смысла делать доп.компоненты, но если у вас будет использоваться часто другая комбинация, например, средняя картинка + кнопка справа, то согласен, можно сделать ещё один компонент средней ячейки с кнопкой👌

Ответить
0

Хм, универсальненько...

Ответить
0

\промахнулся\

Ответить
0

Видео более приоритетно именно в полезности для пользователей. Больше бы благодарностей было бы, шаринга и т.д

Ответить

Прямой эфир