{"id":14287,"url":"\/distributions\/14287\/click?bit=1&hash=1d1b6427c21936742162fc18778388fc58ebf8e17517414e1bfb1d3edd9b94c0","hash":"1d1b6427c21936742162fc18778388fc58ebf8e17517414e1bfb1d3edd9b94c0","title":"\u0412\u044b\u0440\u0430\u0441\u0442\u0438 \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0434\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0437\u0430 \u0433\u043e\u0434","buttonText":"","imageUuid":""}

Изменение размера элемента внутри инстанса. Приёмы и фишки

Всем привет, меня зовут Андрей Насонов, я работаю UI/UX дизайнером, это моя серия статей про фишки, трюки и прочие штуки в Figma.

Другие статьи из этой серии

Что такое «Custom size component»?

Это компонент в котором размер изменяется за счёт отступов «spacing» между двумя элементами с шириной или высотой 0px.

Изменение ширины компонента с помощью "spacing"

Про элементы с нулевыми размерами я писал ранее в статье «Компонент в Figma с нулевыми размерами»

Зачем это нужно?

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

Задавать размер фреймов внутри инстансов можно благодаря «Custom size component».

Стандартным способом невозможно задать размер элемента внутри инстанса

Важно! Речь идет именно о том, чтобы задавать элементу конкретный размер в пикселях, а не абстрактный размер с помощью настойки автолейаутов «Fill container» или настроек «Left and right» и «Scale».

Типы Custom size component

Заполняемый — Внутри такого компонента можно разместить другой фрейм или другой компонент который будет расширяться вместе с «Custom size component».

Не заполняемый — Такой компонент является самостоятельным и внутри него ничего не размещается кроме нулевых компонентов. Чаще всего к такому компоненту применяют заливку, скругления углов и прочие стили.

Примеры применения

Изображение внутри компонента

Используя «Сustom size component» можно изменять размер изображения внутри каждого инстанса. Это заполняемый компонент. Пример в Figma

Изменение размера изображения внутри компонент карточки

Линия прогрессбара

Изменение ширины прогрессбара

Хендлер скроллбара

Изменение размера хэндлера

В элементах «Линия прогрессбара», «Хендлер скроллбара» — «Custom size component» является самостоятельным.

Как сделать Custom size component?

Ниже описан процесс создания заполняемого сustom size компонента. Либо просто используйте готовый компонент.

Создание структуры:

  1. Создайте Auto Layout и назовите его «Custom size component».
  2. Внутри «Custom size component» создайте Auto Layout с вертикальным направлением и назовите его «1».
  3. Внутри «1» создайте еще один Auto Layout но с горизонтальным направлением и назовите его «2».
  4. Далее внутри «2» поместите элемент размер которого вы хотите изменять внутри инстансов.
  5. Отдельно создайте Auto Layout с горизонтальным направлением и назовите его «Horizontal size».
  6. Внутри «Horizontal size» создайте два фрейма, выделите их и в полях ширины и высоты впишите значение «0.0001».
  7. Так же отдельно создайте Auto Layout с вертикальным направлением и назовите его «Vertical size».
  8. Внутри «Vertical size» создайте два фрейма, выделите их и в полях ширины и высоты впишите значение «0.0001».
  9. Переместите «Horizontal size» в «1» а «Vertical size» в «2».

После проделанных действий вы должны получить вот такую структуру слоев:

Структура слоев "Custom size component"

Настройка Auto Layout:

Примените к слоям такие же настройки как на скриншотах. Начнем настройку слоев снизу вверх.

Настройки "Element"
Настройки "Vertical size"
Настройки "2"
Настройки "Horizontal size"
Настройки "1"
Настройки “Custom size component”

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

Спасибо

Если вы узнали что-то новое или статья была вам полезна — жмите ^
А если хотите узнать больше фишек — подписывайтесь, чтобы не пропустить новые статьи.

0
8 комментариев
Написать комментарий...
Andrei Degteariov

Очень крутая статья, спасибо вам!
Попалась опечатка "Линия проорессбара"

Ответить
Развернуть ветку
Андрей Насонов
Автор

Спасибо исправил

Ответить
Развернуть ветку
Konstantin K.

Статья (как и прошлая) интересная, спасибо. Не очень понятен пример с прогресс- и скроллбаром. Зачем такие сложности?

В работе (лично для меня) важно минимальное количество вложенности в структуре элементов. Так как это усложняет движение по иерархии с помощью клавиатуры.

Ответить
Развернуть ветку
Андрей Насонов
Автор

Там смысл в том что можно задавать точный размер именно в инстансе компонента, в твоем примере обычный фрейм же и проблем с этим нет)

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

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Антон Радин

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

Ответить
Развернуть ветку
Андрей Насонов
Автор

Мы в основном используем для изображений и аватаров внутри айтемов и ячеек таблиц

Ответить
Развернуть ветку
Антон Радин

Вот для аватаров я бы точно использовал фиксированные размеры

Ответить
Развернуть ветку
5 комментариев
Раскрывать всегда