04 мая 2025 г.·6 мин

Переиспользуемые UI‑компоненты: именование, варианты и правила расположения

Задайте чёткие правила именования, вариантов и компоновки для повторно используемых UI‑компонентов, чтобы команды быстро создавали согласованные экраны в любом визуальном редакторе.

Переиспользуемые UI‑компоненты: именование, варианты и правила расположения

Почему согласованность экранов ломается в визуальных редакторах

Визуальные редакторы позволяют быстро выпускать экраны. Но именно скорость скрывает постепенный дрейф внешнего вида и поведения интерфейса. Когда над проектом работают несколько человек, мелкие решения складываются: один добавляет padding 12px, другой ставит 16px, третий копирует старую кнопку с другого экрана.

Как правило, симптомы видны рано: почти‑дубликаты компонентов, отступы, меняющиеся между экранами, и немного разные слова для одной и той же операции (Сохранить, Отправить, Подтвердить). Состояния тоже расходятся: у одной формы есть явный экран загрузки, у другой — нет. Сообщения об ошибках отличаются, «быстрые правки» появляются на одной странице и не возвращаются в общую библиотеку.

Так возникает UI‑долг. Каждая несогласованность кажется незначительной, но со временем продукт теряет доверие. Команды замедляются: люди тратят время на поиск «правильной» версии, сравнение экранов и исправление мелочей на этапе ревью.

Библиотека компонентов в визуальном редакторе — это набор общих строительных блоков (кнопки, поля, карточки, заголовки, пустые состояния), к которым все обращаются вместо постоянного воссоздания. В платформе вроде AppMaster это обычно означает создание повторно используемых UI‑блоков прямо в редакторе, а затем согласование правил их именования, конфигурации и размещения, чтобы экраны оставались единообразными, даже если разные люди их строят.

Цель не в том, чтобы убрать креативность. Речь о том, чтобы повседневные части были предсказуемы и выборы делались осознанно. Четыре рычага, которые предотвращают дрейф: ясное именование, разумные варианты, базовые правила компоновки (отступы, выравнивание, сетки) и привычки команды, которые поддерживают библиотеку по мере роста приложения.

Что должно быть повторно используемым компонентом (а что — нет)

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

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

Набор‑минимум обычно покрывает большинство экранов: кнопки, поля ввода, карточки, заголовки страниц и пара типов модалок (подтверждение и форма).

Практичное правило извлечения упрощает решения: если вы используете один и тот же UI 2–3 раза, или он критичен для бренда и должен быть идентичным — вынесите его. Если встречается единожды — оставьте локальным.

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

Держите компонент сфокусированным: одна штука — одна задача. «Карточка пользователя», которая ещё управляет правами, статусом биллинга и админ‑действиями, становится трудной для повторного использования. Лучше разделить: карточка только для отображения, отдельные кнопки действий и статусы — в виде чипов.

Правила именования, которые остаются читабельными под давлением

Когда команда быстро шлёт релизы, первые спотыкающиеся — это имена. Кто‑то дублирует «Button2», другой создаёт «CTA Button», третий использует «BlueButton». Через неделю никто не знает, что переиспользовать, и создаётся новая копия. Так библиотека превращается в кучу почти‑дубликатов.

Простой шаблон помогает оставаться последовательными даже в усталости: Component - Part - State. Большинству компонентов не нужны все три части, но порядок остаётся единым.

Используйте слова, которые люди действительно говорят. Если команда называет элемент «Customer card», не переименовывайте его в «CRM Tile». Если в продукте он называется «Plan», не зовите его «SubscriptionBox». Простая лексика выигрывает, потому что её легче искать.

Одно правило предотвращает много путаницы: не смешивайте «как выглядит» и «для чего служит» в одном уровне именования. Выберите один подход. Если именуете по назначению — избегайте цветовых слов. Если по визуалу — не используйте бизнес‑значение. Именование по назначению обычно масштабируется лучше.

Примеры, которые легко сканировать в списке компонентов:

  • Button - Primary
  • Button - Secondary - Disabled
  • Input - WithLabel
  • Card - Compact
  • Modal - ConfirmDelete

Определите форматирование один раз и зафиксируйте его: Title Case или sentence case, пробелы вокруг дефисов, никаких аббревиатур, если они не универсальны (например, "URL"). В визуальных редакторах, где много участников, такие мелочи сохраняют библиотеку читабельной по мере её роста.

Варианты: как дать выбор без хаоса

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

Начните с нескольких измерений вариантов, которые покрывают реальные потребности. Для многих компонентов достаточно трёх: размер (S/M/L), назначение (primary/secondary/danger) и состояние (default/hover/active). Если новая опция не вписывается в эти измерения — сделайте новый компонент, а не «ещё один вариант».

Дефолты важнее, чем кажется. Новые экраны должны выглядеть корректно даже если человек просто перетащил компонент и ничего не поменял. Задайте безопасные значения по умолчанию (например, size=M, intent=primary, state=default), чтобы скорость не превращалась в случайный стиль.

Для каждого компонента с вариантами пропишите и соблюдайте:

  • Поддерживаемые измерения и допустимые значения (не делайте длинный список)
  • Значения по умолчанию
  • Что никогда не меняется между вариантами (padding, шрифт, радиус скругления, расстояние до иконки)
  • Обязательные состояния: disabled и loading, плюс error, если возможен сбой
  • Когда создавать новый компонент вместо добавления варианта

Пример: у вас есть кнопка «Submit» в портале клиента. Если один человек сделает «Wide Submit Button», а другой — «Rounded Submit Button», дрейф появится быстро. С правилами остаётся один компонент Button. Разрешены размер и назначение, запрещён кастомный padding и радиус, а состояние «Loading» определено единообразно (показывать спиннер, блокировать клики), чтобы поведение было одинаковым везде.

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

Правила компоновки: отступы, выравнивание и сетки, которых все придерживаются

Устранить разрыв в состояниях UI
Добавьте состояния загрузки, неактивности и ошибок один раз, чтобы поведение оставалось предсказуемым.
Попробовать

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

Начните с шкалы отступов и запретите всё прочее. Выберите небольшой набор (например, 4, 8, 12, 16, 24) и относитесь к нему как к клавишам: можно сыграть много мелодий, но только на этих клавишах. Если кто‑то просит «18px», это обычно сигнал, что компонент или сетка настроены неверно.

Чётко определите, что означает каждый тип отступа:

  • Padding — внутри компонента и должен оставаться одинаковым на всех экранах.
  • Gap — промежуток между элементами внутри контейнера (строки формы, элементы тулбара).
  • Margin — внешнее пространство вокруг компонента; используйте экономно.
  • Предпочитайте gap вместо сложенных margin, чтобы не получить удвоенный отступ при вложенности.

Правила выравнивания убирают бесконечные правки «сдвинуть чуть‑чуть». Хороший дефолт: выравнивание по левому краю для текста, метки и поля по одной вертикальной линии, основные действия — в одном месте (например, внизу‑справа в модалке и справа в футере формы). Для строк с большим объёмом текста используйте базовую линию. Центрируйте только строки с иконками.

Сетки не обязаны быть сложными, но они должны быть. Решите число колонок и ширины gutter, пропишите, что происходит на меньших экранах (даже простое «12 колонок на десктопе, одна колонка на мобильных» помогает). Установите ширины контейнеров и точки перелома один раз, затем стройте экраны внутри этих ограничений.

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

Токены стиля: шрифты, цвета и основы доступности

Токены стиля — это общие выборы, которые используют все. Когда токены ясны, повторно используемые UI‑компоненты остаются согласованными даже при разных строителях экранов.

Начните с типографики как единого источника правды. Выберите небольшую шкалу размеров шрифтов, веса и межстрочного интервала, и придерживайтесь её. Большинству команд хватает нескольких шагов (например: body, small, caption, title и page heading). Поместите эти значения в одно место, чтобы новый текст начинался с одинаковых дефолтов.

Цвета лучше называть по смыслу, а не по коду краски. «Primary» означает главное действие. «Success» — успех, «warning» — внимание. Избегайте названий вроде «blue‑500», если команда не привыкла к палитрам.

Основы доступности, которые предотвращают проблемы в будущем:

  • Обеспечьте достаточный контраст текста на фоне.
  • Делайте области касания достаточно большими для большого пальца, а не только для курсора мыши.
  • Пишите сообщения об ошибках так, чтобы они объясняли, что случилось и что делать дальше.
  • Не полагайтесь только на цвет для передачи статуса.

Токены должны напрямую связываться с вариантами компонентов. Вариант кнопки, например Primary или Danger, должен подставлять утверждённые токены (цвет, бордер, стиль текста), а не вводить единичный стиль.

Держите список токенов коротким, чтобы люди действительно им пользовались. Хороший тест: может ли кто‑то за 5 секунд выбрать нужный токен? Если нет — объединяйте или удаляйте.

Простой стартовый набор может включать типографику (text.body, text.small, text.title), цвета (color.primary, color.success, color.warning, color.danger), отступы (space.8, space.16, space.24), радиусы (radius.sm, radius.md) и фокус (focus.ring).

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

Начать с одного рабочего процесса
Сначала стандартизируйте один рабочий поток, затем спокойно расширяйте библиотеку.
Начать создание

Библиотека компонентов — это не про «идеальный дизайн», а про удаление ежедневных микро‑решений. Когда все берут одни и те же блоки, экраны остаются согласованными, даже если их строят разные люди.

Практическая вёрстка на 5 шагов

  1. Проведите аудит имеющегося: возьмите 5–10 реальных экранов и отметьте повторяющиеся дубликаты: кнопки, поля, заголовки секций, карточки и пустые состояния.

  2. Выберите небольшой первый набор для стандартизации. Цель — топ‑10 блоков, которые встречаются везде и вызывают наибольшее рассогласование. Для многих команд это кнопки, поля, dropdown, диалоги, заголовки таблиц и карточки.

  3. Пропишите правила до того, как строить. Коротко: имя компонента, когда его использовать, разрешённые варианты и правила компоновки вокруг него (отступы, выравнивание, ширина).

  4. Перебудьте один раз, затем заменяйте постепенно. Создайте новые компоненты в визуальном редакторе и зафиксируйте согласованные варианты. Меняйте старые копии экран за экраном — не пытайтесь переработать всё в одном спринте.

  5. Введите лёгкую проверку. Один человек (в ротации по неделям) проверяет новые компоненты и варианты. Цель не в преследовании — а в предотвращении случайных ответвлений.

Как выглядит «достаточно хорошо»

Вы поймёте, что всё работает, когда дизайнер или PM скажет: «Используйте стандартную карточку с компактным заголовком», и два сборщика экрана выдадут одинаковый результат. Это и есть эффект: меньше одноразовых решений, меньше тонких несоответствий и быстрее создание экранов.

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

Распространённые ошибки, которые замедляют и рассогласовывают UI

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

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

Одна типичная ловушка — создание near‑duplicates вместо добавления варианта. Кому‑то нужна «primary button, но чуть выше» — и он дублирует компонент. Через неделю другой дублирует уже эту копию. В итоге три кнопки выглядят почти одинаково, но ведут себя по‑разному, и каждое изменение превращается в охоту.

Ещё одна проблема — чрезмерно настраиваемый компонент: один мегакомпонент с десятками переключателей. Он кажется гибким, но становится непредсказуемым. Люди перестают ему доверять и делают «только для этого случая» версии, что сводит на нет всю идею переиспользования.

Ошибки в компоновке наносят не меньше вреда. Самая большая — смешивание ответственности: компонент управляет внешними margin, а экран добавляет свои. В результате получаются случайные зазоры, меняющиеся от страницы к странице. Простое правило: компоненты задают внутренний padding, экраны контролируют расстояние между компонентами.

Проблемы, которые появляются первыми: правила именования ломаются при спешке, состояния добавляются поздно (loading, empty, error), одноразовые правки закрепляются, и разные люди решают одинаковую раскладку по‑разному.

Быстрый чеклист согласованности для каждого нового экрана

Перед тем как добавить что‑то новое, потратьте 60 секунд на проверку базового набора. Экран может выглядеть нормально, но тихо ломать систему — и такие небольшие нарушения быстро накапливаются, если несколько человек работают параллельно.

  • Именование: Каждый компонент следует согласованному шаблону (например, Form/Input, Form/Input.HelperText, Table/RowActions). Если имя не поможет быстро найти и поставить компонент, переименуйте его сейчас.
  • Владелец + цель: У каждого общего компонента есть владелец (человек или команда) и одно‑предложное описание, когда его использовать.
  • Только шкала отступов: Все padding, gap и margin используют утверждённые шаги шкалы. Если вы вводите число «потому что так лучше выглядит», остановитесь и выберите ближайший шаг.
  • Состояния включены: Ключевые интерактивные элементы включают loading и error, а не только счастливый путь. Подумайте о disabled‑кнопке, ошибке поля, пустом списке, повторной попытке.
  • Не изобретайте новых стилей: Стройте экран из существующих токенов и компонентов. Если нужен новый цвет, размер шрифта, радиус или тень — оформляйте это как запрос в систему, а не правку на уровне экрана.

Пример: двое людей делают одну и ту же фичу — с правилами и без

Использовать токены, которым доверяет команда
Создайте токены стиля для типографики и цветов, чтобы команда перестала копировать стили.
Попробовать создание

Майя и Леон работают в команде поддержки. Им нужны два экрана: список тикетов (для быстрого сканирования) и страница деталей тикета (для действий). Они разделили работу и строят в визуальном редакторе.

Без правил каждый делает «карточку» по‑своему. Майя использует белую карточку с тонкой рамкой и тенью. Леон делает серую карточку без рамки, но с увеличенным padding. На одном экране основная кнопка закруглённая, на другом — квадратная или просто текстовая ссылка. Статус отображается в виде точки на одном экране и в виде метки‑пилюли на другом. На странице деталей поля не выровнены, потому что метки имеют разную ширину, и форма кажется шаткой.

Ревью превращается в спор о стилях, и простое обновление (например, добавить «Приоритет») требует вмешательства во множество одноразовых макетов.

С правилами они стартуют с общих повторно используемых компонентов в небольшой библиотеке: TicketCard для структуры и отступов, StatusBadge для стилей статусов и контраста, ActionBar для согласованных основных действий.

Список использует компактный вариант TicketCard для ключевых полей и превью. Страница деталей — развернутый вариант для полного описания, таймлайна и дополнительных полей. Структура остается одинаковой, а вариант управляет тем, что показывать.

Лучшее, что вы не увидите: меньше комментариев на ревью, меньше вопросов «почему это по‑другому?» и более быстрые изменения позже. Когда команда переименовывает «Closed» в «Resolved» и меняет цвет, они меняют StatusBadge один раз, и оба экрана обновляются одновременно.

Как поддерживать согласованность со временем (и следующие шаги)

Согласованность — не разовая настройка. Как только больше людей начинают строить экраны, мелкие «для этой страницы» решения множатся, и библиотека начинает дрейфовать.

Простой процесс изменений позволяет команде двигаться и не превращать каждую правку кнопки в дебат:

  • Предложить: что меняется и зачем (новый компонент, вариант, переименование, депрекейт)
  • Проверить: дизайнер или владелец UI смотрит на именование, правила отступов и базовую доступность
  • Утвердить: ясное да/нет, с короткой заметкой, если изменение ограничено одним потоком
  • Выпустить: обновить общую библиотеку и объявить об изменении в одном месте

Решения должны иметь место хранения. Короткий документ «UI rules» достаточно, если в нём прописаны конвенции именования, официальный список вариантов (что есть и чего нет) и список «не делать» (например: «Не создавайте вторую ‘Primary Button’ с другим padding»).

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

Рефакторьте, когда видите один и тот же паттерн дважды (например, две команды сделали немного разные пустые состояния). Оставляйте одноразовый элемент, если он действительно уникален, срочен и вряд ли повторится.

Если вы работаете в AppMaster, практический следующий шаг — стандартизировать один рабочий поток (например, «Создать тикет»), а затем расширять. Редакторы UI в AppMaster облегчают совместное использование компонентов между экранами, а appmaster.io — полезная отправная точка, если вам нужна no‑code альтернатива, которая поддерживает полноценные приложения, а не только макеты.

Вопросы и ответы

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

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

Как решить, что должно быть повторно используемым компонентом, а что — разовым элементом?

Хорошее правило — вынести в компонент то, что вы используете два–три раза подряд или то, что должно выглядеть и работать одинаково везде (например, основные действия или поля форм). Если элемент действительно одноразовый, привязан к конкретному экрану или меняется ежедневно — оставьте его локальным.

Какое правило именования лучше всего работает, когда несколько человек создают экраны?

Выберите один простой шаблон именования и держитесь его, например: "Component - Part - State". Используйте слова, которыми команда реально пользуется в разговоре, и избегайте имен, завязанных на цвет (например, "BlueButton"), — когда стиль меняется, такие имена вводят в заблуждение.

Сколько вариантов у компонента — это уже хаос?

Ограничьте варианты только теми отличиями, которые действительно повторяются во многих местах, например: размер, назначение (primary/secondary/danger) и состояние. Всё остальное лучше держать заблокированным, чтобы люди не подправляли компоненты под каждый экран и не создавали дрейф. Если новая просьба не вписывается в существующие измерения вариантов, скорее всего это новый компонент.

Как остановить дрейф отступов между экранами?

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

Нужны ли токены стиля, или можно просто копировать стили по ходу?

Да, нужны — и лучше именованные по смыслу, а не по коду цвета. Пусть команда выбирает "primary" или "danger", а не придумывает новые оттенки. Компоненты должны подтягивать токены (цвет, типографика) — тогда "Primary Button" всегда будет выглядеть одинаково везде.

Какие состояния UI должны быть стандартизированы в компонентах?

Убедитесь, что у каждого общего интерактивного компонента есть как минимум состояния disabled и loading, а для случаев возможных ошибок — ещё и error. Если состояния не стандартизированы, экраны будут казаться несогласованными даже при похожем внешнем виде, что увеличит количество правок на ревью.

Почему "мега‑компоненты" — плохая идея в визуальном редакторе?

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

Как сохранять библиотеку согласованной со временем, не превратив всё в бюрократию?

Лёгкий механизм контроля: один ответственный (в ротации, например, каждую неделю) проверяет новые компоненты и варианты на предмет именования, правил отступов и базовых требований к доступности. Цель — предотвращать случайные ответвления, а не устраивать бюрократию. Это быстрее и дешевле, чем потом сливать near‑duplicates.

Как я могу реализовать этот подход конкретно в AppMaster?

В AppMaster создайте повторно используемые UI‑блоки в веб‑ и мобильных редакторах, стандартизируйте их имена, конфигурации и правила размещения, чтобы другие могли уверенно их переиспользовать. Практический путь — сначала стандартизировать один рабочий поток (например, «Создать тикет»), а затем расширять библиотеку по мере принятия шаблонов. appmaster.io остаётся полезной точкой отсчёта, если нужна no‑code платформа, которая поддерживает реальные приложения, а не только макеты.

Легко начать
Создай что-то невероятное

Экспериментируйте с AppMaster с бесплатной подпиской.
Как только вы будете готовы, вы сможете выбрать подходящий платный план.

Попробовать AppMaster