Вид Zeyt
Приложение открывается внутри Zeyt, и лучше всего оно выглядит, когда его не отличить от остального Zeyt. Для этого есть набор вида: два файла, которые кладут в пакет приложения. В нём цвета, шрифт и элементы самого Zeyt. Тема берётся из Zeyt, и светлая, и тёмная. Текст растёт вместе с системным размером, а касаться всего удобно: каждый элемент не меньше 44 px. Этим набором сделаны приложения Zeyt.
Подключить#
Скачайте pairx-ui.css и pairx-ui.js, положите их рядом с index.html и подключите в <head>:
<link rel="stylesheet" href="pairx-ui.css">
<script src="pairx-ui.js"></script>Затем, до первого экрана, — PairxUI.start(): он берёт точные цвета открытого Zeyt (ui.theme), отступы (ui.safeArea) и дальше следит за сменой темы.
await PairxUI.start();
render();
pairx.call("app.ready");Без моста — в обычном браузере или в тесте — набор тоже работает: цвета Zeyt берутся по теме системы.
Страница и текст#
<main class="px-page">
<h1 class="px-large-title">Крокодил</h1>
<p class="px-subhead px-muted">Один рисует — остальные угадывают.</p>
</main>.px-page даёт отступы страницы с учётом краёв экрана. Размеры текста — те же, что в Zeyt: .px-large-title, .px-title, .px-title3, .px-headline, .px-body, .px-subhead, .px-footnote, .px-caption. Задавайте свои размеры в rem, а не в px: так текст растёт с Dynamic Type на iPhone и с размером шрифта на Android. Ещё есть цвета: .px-muted, .px-accent, .px-good, .px-destructive.
Списки#
Как на страницах Zeyt — карточка строк, заголовок над ней и пояснение под ней:
<section class="px-section">
<h2 class="px-section-header">Партия</h2>
<div class="px-list">
<div class="px-row">
<div class="px-row-main"><p class="px-row-title">Раундов</p></div>
<span class="px-row-value">8</span>
</div>
<label class="px-row">
<span class="px-row-main"><span class="px-row-title">Подсказки буквами</span></span>
<input type="checkbox" role="switch" class="px-switch" checked>
</label>
<button class="px-row" type="button">
<span class="px-row-main"><span class="px-row-title">Набор слов</span></span>
<span class="px-row-value">Обычные</span>
<span class="px-row-chevron" aria-hidden="true"></span>
</button>
</div>
<p class="px-section-footer">Подсказки открывают буквы слова на 30-й и 45-й секунде.</p>
</section>Строка-кнопка (button.px-row) подсвечивается при нажатии. .px-row--accent и .px-row--destructive окрашивают её название.
Кнопки#
.px-button— главная, во всю ширину; кнопка называет действие: «Начать игру», «Отправить»..px-button--tonal— второстепенная,.px-button--plain— текстом,.px-button--destructive— разрушительная..px-button--small— маленькая рядом со строкой: 36 px на вид, 44 px для касания..px-icon-button— круглая со значком; у неё обязательноaria-label,aria-pressed="true"— выбранный инструмент.
Главное действие экрана удобнее отдать нативной кнопке Zeyt: она стоит над клавиатурой и жестами системы.
Поля и выбор#
.px-field— поле ввода иtextarea..px-chipsс.px-chip[aria-pressed]— категории и фильтры..px-segmentedс кнопкамиrole="radio"иaria-checked— выбор одного из двух-трёх.input.px-switch[role="switch"]— выключатель.
Люди#
row.prepend(PairxUI.avatar({ name: "Анна Смирнова", id: member.id, present: true }));Аватар — инициалы человека на одном из семи цветов Zeyt: у одного человека в приложении всегда один цвет. present ставит зелёную точку, как в «в сети», — для тех, кто сейчас в приложении (context.present, мост 1.2). Несколько аватаров рядом — .px-avatars.
Состояния#
У каждого экрана с данными есть три состояния, а ошибка фонового обновления не стирает уже показанное:
- загрузка —
.px-spinnerили.px-progress; - пусто —
.px-empty: значок, заголовок, пояснение и одна главная кнопка; - ошибка — строка с понятным текстом и кнопкой «Повторить».
Лист#
<dialog class="px-sheet" id="rules">
<div class="px-sheet-grabber" aria-hidden="true"></div>
<h2 class="px-title3">Правила</h2>
…
</dialog>const rules = PairxUI.sheet(document.getElementById("rules"));
rules.open();Лист открывается снизу; нажатие на затемнение его закрывает.
Что ещё в pairx-ui.js#
PairxUI.onTheme(callback)— тема сменилась: например, перерисовать холст.PairxUI.initials(name)— одна-две буквы имени.PairxUI.plural(n, "игрок", "игрока", "игроков")— слово для числа.
Под капотом#
- Шрифт. На Android Zeyt отдаёт приложениям свой шрифт Inter с их же адреса,
/_pairx/fonts/. На iPhone — системный, как в самом Zeyt. Пути под/_pairx/принадлежат Zeyt: файлы приложения с такими путями не откроются. - Размер текста. На Android приложение получает размер шрифта телефона так же, как Chrome: растут буквы, а длины в
rem— нет. Поэтому круги аватаров и круглые кнопки набор растит сам — по переменной--px-zoom. - Цвета — переменные
--px-background,--px-surface,--px-text,--px-muted,--px-line,--px-accent,--px-accent-fill,--px-good,--px-destructive. Используйте их в своих стилях, а не свои цвета, — тогда приложение сменит тему вместе с Zeyt.