Изменение размера элемента внутри инстанса. Приёмы и фишки
Всем привет, меня зовут Андрей Насонов, я работаю UI/UX дизайнером, это моя серия статей про фишки, трюки и прочие штуки в Figma.
Другие статьи из этой серии
- Разметка элементов в Figma
- Компонент в Figma с нулевыми размерами
- Изменение размера элемента внутри инстанса (Эта статья)
Что такое «Custom size component»?
Это компонент в котором размер изменяется за счёт отступов «spacing» между двумя элементами с шириной или высотой 0px.
Про элементы с нулевыми размерами я писал ранее в статье «Компонент в 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 компонента. Либо просто используйте готовый компонент.
Создание структуры:
- Создайте Auto Layout и назовите его «Custom size component».
- Внутри «Custom size component» создайте Auto Layout с вертикальным направлением и назовите его «1».
- Внутри «1» создайте еще один Auto Layout но с горизонтальным направлением и назовите его «2».
- Далее внутри «2» поместите элемент размер которого вы хотите изменять внутри инстансов.
- Отдельно создайте Auto Layout с горизонтальным направлением и назовите его «Horizontal size».
- Внутри «Horizontal size» создайте два фрейма, выделите их и в полях ширины и высоты впишите значение «0.0001».
- Так же отдельно создайте Auto Layout с вертикальным направлением и назовите его «Vertical size».
- Внутри «Vertical size» создайте два фрейма, выделите их и в полях ширины и высоты впишите значение «0.0001».
- Переместите «Horizontal size» в «1» а «Vertical size» в «2».
После проделанных действий вы должны получить вот такую структуру слоев:
Настройка Auto Layout:
Примените к слоям такие же настройки как на скриншотах. Начнем настройку слоев снизу вверх.
Теперь, вместо того чтобы создавать множество одинаковых компонентов с разным размером, вы можете создать один компонент с кастомным размером и вносить изменения уже в инстансы.
Спасибо
Если вы узнали что-то новое или статья была вам полезна — жмите ^
А если хотите узнать больше фишек — подписывайтесь, чтобы не пропустить новые статьи.
Очень крутая статья, спасибо вам!
Попалась опечатка "Линия проорессбара"
Спасибо исправил
Статья (как и прошлая) интересная, спасибо. Не очень понятен пример с прогресс- и скроллбаром. Зачем такие сложности?
В работе (лично для меня) важно минимальное количество вложенности в структуре элементов. Так как это усложняет движение по иерархии с помощью клавиатуры.
Там смысл в том что можно задавать точный размер именно в инстансе компонента, в твоем примере обычный фрейм же и проблем с этим нет)
В целом смысл статьи рассказать о приеме, а использовать ли его и как это уже дело каждого) Если он доставляет больше неудобства чем пользы то можно и не использовать)
Комментарий недоступен
Для прогресс баров давно уже такую историю использую, а благодаря встроенной калькуляции в полях ввода числовых значений в фигме, получается делать точные значения прогрессбаров. Но вот для других блоков внутри инстансов так и не нашёл применения. Способ не плох, но все таки костыльный, да и с такой гибкостью может привести к неконсистентности в проекте. Использовал бы его с большой осторожностью. В остальных случаях обходился бы правильной настройкой привязок и автолейаутов и вариантами размеров для компонентов. Как правило - этого будет достаточно для покрытия большинства кейсов. Но а в тех случаях когда действительно нужно сделать кастомный размер компонента (диаграммы например, иллюстрации на ранних стадиях проектирования, пока не отрисован единый набор ассетов)- да, этот способ хорош
Мы в основном используем для изображений и аватаров внутри айтемов и ячеек таблиц
Вот для аватаров я бы точно использовал фиксированные размеры