~/wiki / figma-i-makety / auto-layout-polnoe-rukovodstvo

Auto Layout: почему без него ты теряешь часы на то что должно занимать минуты

Основной чат

Чат для вайбкодеров: новости, гайды, поиск исполнителей, маркетплейс и разбор реальных кейсов.

$ cd раздел/ $ join vibe dev
Auto Layout: почему без него ты теряешь часы на то что должно занимать минуты - обложка

Открой любой проект, где макет рисовали без Auto Layout. Передвинь блок на 8 пикселей вправо — и всё поедет: отступы кривые, кнопки разной высоты, текст вылез за карточку. Дизайнер сидит и вручную двигает 40 элементов, чтобы вернуть сетку. Через час он закроет Figma и пойдёт пить кофе с лицом человека, который только что потерял половину рабочего дня.

Это и есть главная цена работы без Auto Layout. Не «менее красиво», не «не по гайдлайнам» — а буквально часы и дни в неделю, которые ты тратишь на ручную правку того, что система должна делать сама. И самое неприятное — ты этого не замечаешь, пока не пересядешь на нормально собранный файл и не увидишь, насколько медленно ты жил раньше.

Auto Layout — это не «фича для гиков из дизайн-систем». Это базовая грамотность продуктового дизайнера в 2025-м, на одном уровне с компонентами и стилями. Без него ты либо медленный, либо неточный, либо и то и другое.

Почему без Auto Layout ты теряешь время

Проблема не в одном действии — она в том, что эти действия повторяются десятки раз за день и накапливаются.

Что именно ты делаешь руками

Пройдись по своему обычному дню в Figma. Если макет сделан фиксированными фреймами, ты регулярно:

  • Меняешь текст в кнопке — и подгоняешь её ширину под новый текст
  • Добавляешь пункт в список — и сдвигаешь всё что ниже на нужное количество пикселей
  • Меняешь заголовок карточки на длиннее — и переверстываешь карточку вручную
  • Подгоняешь отступы между элементами, считая разницу в инспекторе
  • Переделываешь мобильную версию, потому что десктопная не «растягивается» обратно
  • Чинишь сетку после того, как кто-то двинул один блок и не вернул на место

Каждое из этих действий — секунды или минуты. Но за неделю набегает столько, что хватило бы на отдельный экран.

Почему это бьёт не только по скорости

Ручная вёрстка — это ещё и источник микро-ошибок, которые потом всплывают на ревью или в продакшене:

  • Отступ 14 вместо 16, потому что глаз не заметил
  • Кнопки разной высоты в одном флоу
  • Текст, который в реальных данных вылезает за контейнер, потому что в макете была короткая строка
  • Несогласованные паддинги между похожими карточками

Разработчик смотрит на это и задаёт правильный вопрос: «так 14 или 16?». И ты тратишь ещё час, чтобы свериться.

Что такое Auto Layout простыми словами

Если убрать терминологию: Auto Layout — это правила, по которым фрейм сам решает, как расположить и какого размера сделать содержимое. Ты задаёшь направление (горизонталь или вертикаль), отступы между элементами, паддинги внутри контейнера — и дальше фрейм работает как живой блок, а не как картинка.

Поменял текст в кнопке — она сама стала шире. Добавил карточку в список — соседи сдвинулись. Растянул фрейм — содержимое перераспределилось по правилам, а не поехало.

По сути это та же модель, что у CSS Flexbox в вебе. И это не случайность: Auto Layout специально сделан так, чтобы дизайн-файл вёл себя похоже на то, что потом соберёт разработчик. Чем ближе твой макет к реальному поведению интерфейса, тем меньше расхождений на стыке.

Три вещи, которые меняются сразу

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

  • Правки занимают секунды, а не минуты. Длиннее текст — фрейм подстроился. Добавил блок — соседи разъехались.
  • Адаптив перестаёт быть отдельным проектом. Один компонент с правильными правилами растяжения работает и на 1440, и на 375.
  • Дизайн-система становится возможной. Без Auto Layout компоненты ломаются от любого изменения контента. С ним — живут.

Главные анти-паттерны, по которым видно «до Auto Layout»

На ревью эти признаки видно за минуту. Если узнаёшь у себя хотя бы три — пора чинить процесс, а не отдельный макет.

  • Кнопки разной ширины, у которых текст одинаковой длины
  • Карточки в одной сетке отличаются по высоте на 2–4 пикселя
  • При смене языка (например, на немецкий) макет рассыпается
  • Чтобы добавить пункт в меню, ты копируешь старый и двигаешь все остальные руками
  • Мобильная версия — это не «то же самое уже», а отдельный файл, который живёт своей жизнью
  • В макете идеально, в проде — паддинги «почему-то» другие

Быстрый чек: насколько ты зависим от ручной вёрстки

Открой один свой текущий экран и попробуй:

  • Удвой длину заголовка. Макет выжил?
  • Добавь два пункта в список. Пришлось ли двигать что-то руками?
  • Растяни фрейм по ширине на 200 пикселей. Содержимое перераспределилось или поехало?
  • Замени иконку на чуть большую. Соседи подстроились?

Если хотя бы на один пункт ответ «нет» — этот экран будет стоить тебе времени при каждой правке. И правок будет много.

Как перевести существующий макет на Auto Layout

Главная ошибка при переходе — попытаться обернуть весь экран в один большой Auto Layout-фрейм и надеяться, что станет лучше. Не станет. Начинать нужно снизу, с самых мелких блоков, и собирать вверх.

Шаг 1: атомы

Найди самые маленькие повторяемые элементы — кнопка, инпут, чип, иконка с подписью, строка списка. Заверни каждый в Auto Layout. Задай паддинги внутри (а не отступы вокруг текста), направление, gap между иконкой и лейблом. На этом уровне почти всегда нужен Hug по ширине и высоте — элемент должен подстраиваться под контент, а не наоборот.

Шаг 2: молекулы и блоки

Дальше собираешь карточки, секции, тулбары. Здесь появляется выбор: что внутри тянется (Fill), а что остаётся фиксированным. Типичная карточка: аватар Fixed, текстовый блок Fill, кнопка действий Hug. Если на этом этапе компонент уже корректно реагирует на длинный текст — двигайся выше.

Шаг 3: экран целиком

Внешний фрейм экрана задаёт направление (обычно вертикаль), скролл-зоны, фиксированные хедер и футер. Содержимое — Fill по ширине, Hug по высоте. После этого пройди тест «растяни-сожми»: дёрни ширину фрейма в обе стороны и посмотри, где что-то едет.

Типичные ошибки при внедрении

Auto Layout «для галочки»

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

Слишком много вложенности

Пять-семь уровней Auto Layout внутри одной карточки. Поправить отступ становится квестом: ищешь, на каком уровне он живёт. Если ловишь себя на этом — вынеси внутренности в отдельный компонент и упрости иерархию.

Путаница Hug / Fill / Fixed

Самый частый источник «почему оно не растягивается». Короткое правило:

  • Hug — размер по содержимому. Кнопки, чипы, иконки с подписью.
  • Fill — занять всё доступное место. Поля ввода в форме, основной контент рядом с сайдбаром.
  • Fixed — жёстко заданное значение. Аватары, иконки, ширина сайдбара.

Если кнопка не растёт под длинный текст — она, скорее всего, Fixed. Если поле ввода не тянется на всю ширину — Hug вместо Fill.

Забытые min/max

Кнопка с Hug при коротком тексте схлопывается до неприлично узкой. Карточка с Fill при широком экране становится нечитаемой. Min width на кнопке и max width на текстовом блоке решают это в одно действие — но про них стабильно забывают.

Сценарии, на которых видно профит

Карточка с переменным контентом

Лента из карточек, где у одной короткий заголовок, у другой — четыре строки. Без Auto Layout это шесть отдельных макетов. С ним — один компонент, который растёт по высоте, а соседи в сетке подстраиваются.

Форма с динамическими полями

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

Адаптив без копии файла

Десктоп и мобайл собраны на одних компонентах с правильными Fill/Hug. Меняешь ширину родительского фрейма с 1440 на 375, и сетка из трёх колонок превращается в одну — без отдельного «мобильного макета», который потом разъезжается с десктопным.

Вопросы для ревью макета

Перед тем как отдать макет в разработку или на ревью, прогони его по списку:

  • Если удвоить любой текст — макет выживет?
  • Если подставить реальные данные из API (с длинными именами, пустыми полями, отсутствующими аватарами) — что сломается?
  • Все ли паддинги заданы через Auto Layout, а не «на глаз» отступом между слоями?
  • Кнопки одного типа имеют одинаковую высоту во всех состояниях?
  • Есть ли min/max там, где контент может сильно меняться?
  • Можно ли изменить один токен отступа и обновить всю систему — или придётся править руками?

Если на ревью кто-то двигает блок и весь экран рассыпается — это не «он сломал», это макет был хрупким.

Короткий итог сегмента

Auto Layout не магия и не «фича для перфекционистов». Это способ перенести часть логики интерфейса прямо в макет, чтобы он перестал быть картинкой и стал моделью поведения. Внедряется снизу вверх, проверяется растяжением и реальными данными, ломается на путанице Hug/Fill/Fixed — и окупается с первого же раунда правок.

Продвинутые сценарии: где Auto Layout перестаёт быть «удобством»

До этого момента всё, что мы разбирали, относилось к одному макету: карточка, форма, экран. На этом уровне Auto Layout экономит часы. Но настоящий выигрыш появляется тогда, когда макет перестаёт быть личным файлом и становится частью системы — с компонентами, вариантами, локализациями, дев-режимом и AI, который генерирует разметку поверх твоих фреймов.

Варианты компонентов и состояния

Кнопка с пятью состояниями (default, hover, active, disabled, loading) и тремя размерами — это 15 вариантов. Без Auto Layout каждый из них живёт своей жизнью: padding чуть-чуть разный, иконка сдвинута на пиксель, в loading состоянии текст почему-то прыгает.

С Auto Layout правило другое: padding, gap и min-height задаются на уровне базового компонента, состояния меняют только цвет, тень и содержимое слотов. Если потом дизайн-система решит сделать кнопку на 2px компактнее — это один токен, а не 15 ручных правок.

Слоты и композиция

Когда карточка должна уметь принимать внутрь произвольный контент (иконку, превью, ещё одну карточку), Auto Layout даёт честный механизм слотов: пустой Fill-фрейм с фиксированной логикой отступов, в который через instance swap или просто заменой содержимого подставляется что угодно. Карточка сама подстраивается под высоту вложенного.

Анти-паттерн — делать «универсальную» карточку из 12 скрытых слоёв, которые включаются галочками. Через месяц никто не помнит, что куда включается, и проще собрать новую.

Локализация и длинные языки

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

Проверка простая: возьми самый длинный перевод (или просто прогони текст через «удлинитель» на 40%) и подставь во все ключевые экраны. Должно растягиваться, переноситься, оборачиваться — без ручных правок. Для RTL добавь зеркалирование направления Auto Layout и посмотри, не разъехались ли иконки.

AI-генерация и MCP: где Auto Layout критичен

Сейчас всё больше команд подключают Figma к LLM-агентам через MCP или генерируют интерфейсы из макета напрямую в код. И здесь видно очень чётко: модель читает структуру фрейма, а не картинку.

Фрейм без Auto Layout для агента — это набор слоёв с координатами. Он сгенерирует разметку, но без понимания, что должно растягиваться, а что — оставаться по контенту. На выходе — статичный JSX, в котором всё прибито гвоздями.

Фрейм с правильным Auto Layout читается как готовая иерархия flex-контейнеров: direction, gap, padding, Fill/Hug превращаются в flex, gap, padding, flex: 1 и width: fit-content почти один к одному. Сгенерированный код сразу адаптивный.

Практический вывод: если вы внедряете AI-генерацию или dev-режим всерьёз, аудит Auto Layout — это не косметика, а условие, чтобы результат был пригоден к использованию.

Риски, про которые стоит помнить

  • Агент уверенно сгенерирует «правдоподобную» разметку даже по кривому макету — проверять придётся глазами, а не доверием к выводу.
  • Скрытые слои внутри Auto Layout попадают в генерацию как условный рендер. Если их там десятки — код становится нечитаемым.
  • Названия фреймов модель использует как подсказки. Frame 247 и CardHeader / Title дают радикально разное качество кода.

Как объяснить решение команде

Внедрение Auto Layout всегда упирается не в Figma, а в людей: продакт не понимает, зачем тратить спринт на «переразметку», разработчик скептичен, второй дизайнер привык к своему способу.

Аргументы, которые работают

  • Для продакта: сократится время на правки контента и копирайта — не нужно ждать дизайнера ради смены заголовка.
  • Для разработчика: макет становится близок к flex-разметке, меньше вопросов «а как это должно вести себя при X».
  • Для дизайн-лида: один источник правды для отступов и размеров, изменения через токены, а не ручной обход файлов.
  • Для себя: меньше скучной работы по выравниванию пикселей, больше времени на собственно дизайн.

Чего не стоит обещать

Что всё станет быстрее «сразу». Первые недели будут медленнее: переучивание, переразметка старых файлов, споры на ревью. Профит виден на горизонте проекта, не одного экрана.

Чеклист зрелости Auto Layout в команде

  • Все базовые компоненты дизайн-системы собраны на Auto Layout, без исключений.
  • Отступы и размеры заданы переменными/токенами, а не числами в свойствах.
  • На ревью есть явный пункт «проверили растяжение и длинный текст».
  • Новый дизайнер за первую неделю получает короткий гайд по Hug/Fill/Fixed принятый в команде.
  • Dev-режим или MCP-интеграция отдают разработчику осмысленные значения flex/gap/padding.
  • Локализация и тёмная тема не требуют отдельных копий макетов.

Если по половине пунктов «нет» — у команды есть Auto Layout как фича, но нет его как практики.

Короткий итог сегмента

Auto Layout масштабируется от одной кнопки до всей дизайн-системы и до пайплайна с AI-генерацией кода. На уровне команды его ценность не в красивых макетах, а в том, что макет становится предсказуемым: для локализации, для дев-режима, для агента, для нового человека в проекте. Всё, что делает интерфейс системой, а не картинкой, работает только если под ним лежит честная разметка.

Анти-паттерны, которые видно на любом ревью

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

Фиксированная ширина там, где должен быть Fill

Самая частая ошибка после первой недели с Auto Layout. Дизайнер ставит карточке ширину 320 и идёт дальше. На макете 1440 всё ок, на 1280 — обрезается, на 1600 — белая дыра справа. Правило простое: если контейнер живёт внутри сетки или родителя — почти всегда Fill, а не фиксированное число.

Семь уровней вложенности ради одного отступа

Когда внутри карточки лежит фрейм, внутри него ещё фрейм, внутри — ещё, и так до текста, это признак, что человек добавлял Auto Layout как обёртку каждый раз, когда что-то «не вставало». Проверка: можно ли удалить промежуточный контейнер без потери визуального смысла? Если да — он лишний.

Spacer-фреймы вместо gap

Пустые прямоугольники высотой 16 между блоками — наследие времён до Auto Layout. Сейчас это просто шум: ломает выравнивание при смене gap через переменную, путает агентов и dev-режим, мешает на ревью.

Absolute position как костыль

Внутри Auto Layout можно отдельным слоям включить Absolute position. Иногда это законно — бейдж в углу аватара, например. Но если в макете десяток absolute-элементов, скорее всего, разметка собрана не туда, и человек просто «прибил» то, что не вставало по флексу.

Padding руками вместо токенов

Когда у одной карточки padding 16, у соседней 14, у третьей 18 — это не дизайн-нюанс, это отсутствие системы. На реальном продукте такие отступы расползаются за квартал в несовместимый зоопарк.

Один большой Auto Layout вместо иерархии

Экран, собранный одним вертикальным фреймом, в котором подряд идут хедер, фильтры, таблица и футер — формально работает. Но любая нелинейная задача (зафиксировать хедер, сделать sidebar) требует переразметки с нуля. Иерархию лучше заложить сразу, даже если кажется, что «пока не нужно».

Вопросы для ревью макета

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

  • Что произойдёт с экраном, если текст в заголовках вырастет в полтора-два раза?
  • Какие фреймы стоят на Fixed и есть ли для каждого внятное обоснование?
  • Совпадают ли отступы и размеры с токенами дизайн-системы, или где-то проставлены вручную?
  • Названия фреймов читаются как иерархия компонентов, или там Frame 128?
  • Сколько уровней вложенности? Можно ли сократить без потери смысла?
  • Что будет с разметкой на минимальной и максимальной ширине из брейкпоинтов?
  • Если переключить язык на длинный (немецкий, финский) — где первым сломается?
  • Сколько в макете absolute-слоёв и почему они absolute?
  • Если разработчик откроет dev-режим, он получит осмысленные flex/gap/padding или мусор?

Эти вопросы не для того, чтобы валить макет на ревью. Они для того, чтобы автор сам прошёлся по ним до ревью и закрыл очевидное.

Чеклист перед отправкой макета в разработку

  • Нет фиксированных ширин у контейнеров, которые должны тянуться.
  • Нет spacer-фреймов — все отступы через gap и padding.
  • Все отступы и размеры взяты из переменных, а не вбиты числом.
  • Вложенность Auto Layout не глубже, чем оправдано иерархией.
  • Все ключевые состояния (длинный текст, пустое состояние, ошибка, загрузка) проверены прямо в макете.
  • Названия фреймов и компонентов осмысленные.
  • Макет проверен хотя бы на двух брейкпоинтах.
  • Локализация и RTL не разваливают разметку.

Практический итог

Auto Layout перестаёт быть фичей Figma в тот момент, когда команда договаривается о его правилах: что такое Fill, что такое Fixed, где живут отступы, как называются фреймы, что считается признаком плохой разметки. До этой договорённости каждый дизайнер строит свой маленький мир, и часы уходят не на дизайн, а на выравнивание чужих слоёв и объяснения разработчику, что должно тянуться.

После — макет начинает работать как код: предсказуемо реагирует на контент, переживает локализацию, читается агентами и людьми одинаково. И тогда фраза «должно занимать минуты» становится не лозунгом, а нормальным фоном работы.

$ cd ../ ← назад к Figma и макеты