Раскладка
Роды раскладки решают, где узлы стоят на экране: подряд, в строку, в коробке, под свёрнутой строкой или одной группой полей. Содержимого у них нет — его кладут внутрь.
Какой род взять#
- Холст — подряд без своего тега. Нужен корень куска экрана или функция, которая возвращает несколько узлов.
- Область — блок со своим тегом и видом. На неё вешают признак, роль, якорь.
- Ряд — узлы в строку с переносом: кнопки выбора, плашки, действия записи.
- Статья — самостоятельный кусок, который можно вынуть из списка: карточка объекта.
- Раскрывашка — свёрнутая строка отвечает «что это», развёрнутая отдаёт содержимое.
- Группа — поля, которые браузер и скринридер считают одним целым.
Не берите область там, где хватает холста: обёртка, которой никто не просил, ломает вертикальный ритм соседей. Равнозначные блоки в колонки раскладывает компонент «Сетка» — о нём ниже, а о колонках и шаге интервалов — на странице Сетка и интервалы.
Холст и Ничего#
Холст печатает детей подряд и не добавляет ни одного тега. Подробно о нём — на странице Холст и узлы.
Холст — группировка без своего тега
первый абзац
второй абзац
HTML = Кит.Холст(
Кит.Примечание("первый абзац"),
Кит.Примечание("второй абзац")).Рендер();Ничего — тот же узел, но для места, где показывать нечего. Его не наполняют.
Ничего — место, где показывать нечего
этот вызов не печатает ничего
HTML = Кит.Ничего().Рендер();Область#
Область — коробка с тегом div. Слово .Вид(…) задаёт её роль на экране: «вставка» — врезка пунктиром внутри формы, «карточки» — колонка карточек, «проза» — чужой документ, набранный типографски, «полоса» — колонка содержимого по центру.
Область — блок со своим тегом, видом и признаком
врезка пунктиром внутри формы
HTML = Кит.Область(Кит.Примечание("врезка пунктиром внутри формы"))
.Вид("вставка").Признак("step", "1").Рендер();Вставка нужна там, где шаг формы надо выделить, но своя секция для него — слишком много.
Вставка с заголовком и лидом
ключ-7f3a-91c2HTML = Кит.Область(
Кит.Надпись("Шаг 2. Ключ доступа").Вид("заголовок"),
Кит.Надпись("Скопируйте ключ: второй раз его не покажут.").Вид("лид"),
Кит.БлокКоманды("ключ-7f3a-91c2")).Вид("вставка").Рендер();Ряд#
Ряд ставит узлы в строку и переносит их, когда строка кончается. Вид у ряда обязателен и идёт первым аргументом, дети — за ним: «выбор» — взаимоисключающие кнопки, «признаки» — плашки, «действия» — кнопки записи, «справа» — ряд у правого края, «строкой» — значок и значение без переноса.
Ряд — элементы в строку с переносом
HTML = Кит.Ряд("выбор",
Кит.Кнопка("Все").Вторичная(),
Кит.Кнопка("Мои").Вторичная()).Рендер();Подпись ряда человеку не видна: она уходит в aria-label. Имя у простого div скринридер не читает, поэтому ряду с подписью ставьте ещё и роль «группа».
Ряд у правого края, с доступным именем
HTML = Кит.Ряд("справа", Кит.Кнопка("Создать проект").Основная().Иконка("плюс"))
.Подпись("Действия списка").Роль("группа").Рендер();Статья#
Статья — лендмарк article: её можно вынуть из списка, и она останется понятной. Этим она и отличается от области.
Статья — кусок, который можно вынуть из списка
Проект «Альфа»
Проект по умолчанию
HTML = Кит.Статья(
Кит.Заголовок(3, "Проект «Альфа»"),
Кит.Примечание("Проект по умолчанию").Вид("описание")).Вид("карточка").Рендер();Из статьи собирают карточку объекта: шапка — область вида «шапка» с именем (заголовок вида «имя»), плашками (область «плашки») и действиями (область «действия»), под ней описание и ряд метаданных. Имя в карточке главное, и сжимается оно последним: плашки и действия держат свою ширину, а имя — одна строка с многоточием, не короче девяти знаков; обрезанное имя скрипт кита показывает целиком подсказкой на наведении. В узкой карточке — колонка сетки, телефон — плашки уходят второй строкой под имя, а действия остаются справа от него.
Карточка объекта — длинное имя, плашка и действие в узкой колонке
Выгрузка сводок по проектам для бухгалтерии.
Выгрузка сводок по проектам для бухгалтерии.
Ячейки = Новый Массив();
Для Каждого Имя Из СтрРазделить("отчёты-по-проектам-за-квартал,сводка,справочник-контрагентов", ",") Цикл
Ячейки.Добавить(Кит.Статья(
Кит.Область(
Кит.Заголовок(3, Кит.Иконка("пакет"), Кит.Ссылка("/проекты/" + Имя, Имя)).Вид("имя"),
Кит.Область(Кит.Плашка("устаревший").Вид("warn")).Вид("плашки"),
Кит.Область(Кит.Кнопка("Настройки").Вторичная().Малая().Иконка("шестерёнка")
.Адрес("/проекты/" + Имя + "/настройки")).Вид("действия")).Вид("шапка"),
Кит.Примечание("Выгрузка сводок по проектам для бухгалтерии.").Вид("описание")).Вид("карточка"));
КонецЦикла;
HTML = Кит.Сетка(Ячейки[0], Ячейки[1], Ячейки[2]).Колонки(3).Рендер();Раскрывашка#
Раскрывашка — нативный details: раскрывается без единой строки скрипта. У неё два холста. Тело — дети узла, свёрнутую строку наполняет слово Шапка(…): с аргументами оно кладёт их в шапку и возвращает саму раскрывашку, без аргументов отдаёт холст шапки.
Раскрывашка — свёрнутая строка наполняется словом Шапка(…)
Ещё три источника
содержимое видно после раскрытия
HTML = Кит.Раскрывашка(Кит.Примечание("содержимое видно после раскрытия"))
.Шапка("Ещё три источника").Вид("врезка").Рендер();В шапку кладут не только текст: значок впереди, плашки состояния за подписью. Дети шапки стоят в строку с зазором 8 px, как в шапке записи реестра, и переносятся вместе, если строке тесно; маркер раскрытия — впереди и поворачивается, когда раскрывашка открыта.
Шапка со значком и плашками
Настройки доставкивключенапрокси задан
Выключенная доставка копит события, но никуда их не шлёт.
HTML = Кит.Раскрывашка(
Кит.Тумблер("delivery", "Доставка уведомлений").Включено(),
Кит.Примечание("Выключенная доставка копит события, но никуда их не шлёт."))
.Шапка(Кит.Иконка("конверт"), "Настройки доставки",
Кит.Плашка("включена").Вид("ok"), Кит.Плашка("прокси задан").Вид("ok"))
.Вид("врезка").Открыть().Рендер();Без слова .Вид(…) раскрывашка печатается панелью с рамкой. Открыть() печатает её сразу развёрнутой: так открывают подробность, которую человек пришёл прочесть.
Раскрывашка, открытая сразу
Подробности
открыта по умолчанию
HTML = Кит.Раскрывашка(Кит.Примечание("открыта по умолчанию"))
.Шапка("Подробности").Открыть().Рендер();Вид «простая» — строка без оформления, например в ячейке таблицы. Маркер раскрытия у неё — тот же шеврон, что у врезки и подробности, а не системный треугольник браузера.
Простая раскрывашка — шеврон, как у остальных
версий: 3
- 1.2.0
- 1.1.0
- 1.0.0
HTML = Кит.Раскрывашка(Кит.Список(Кит.Пункт("1.2.0"), Кит.Пункт("1.1.0"), Кит.Пункт("1.0.0")))
.Шапка("версий: 3").Вид("простая").Рендер();Группа#
Группа — fieldset. Подпись группы — первый аргумент, дети — за ней; подпись видима и печатается легендой первой строкой. Слово .Вид(…): «набор» — группа-переключатель, «простая» — без оформления (существует, чтобы отключать и прятать поля вместе), «раздел» — часть длинной формы.
Группа — набор полей со своей легендой
HTML = Кит.Группа("Видимость",
Кит.Поле("публичный", "Показывать всем").Значение(Истина)).Вид("набор").Рендер();Длинную форму делят разделы. Подпись раздела печатается заголовком, раздел от раздела отделяет черта, вложенные группы внутри раздела — без рамок. Действия собираются одним рядом вне формы: кнопка называет свою форму по якорю (слово ВФорме(…), атрибут form).
Разделы длинной формы и действия одним рядом
Форма = Кит.ФормаБезТокена("/рассылки",
Кит.Группа("Куда отправлять",
Кит.Поле("адрес", "Адрес")).Вид("раздел"),
Кит.Группа("О чём сообщать",
Кит.Группа("Темы",
Кит.Поле("заказы", "Новые заказы").Значение(Истина)
.Подсказка("как только заказ оформлен"))).Вид("раздел"))
.Вид("столбик").Якорь("рассылка-правка");
HTML = Кит.Холст(Форма,
Кит.Ряд("действия",
Кит.Кнопка("Сохранить").Основная().ВФорме("рассылка-правка"),
Кит.Кнопка("Отмена").Вторичная().Адрес("/рассылки"))).Рендер();Сетка#
Сетка — компонент, а не род, но в дереве она ведёт себя как раскладка: каждый ребёнок узла становится своей ячейкой. Число колонок задаёт слово Колонки(…): «авто» или от 1 до 4. Подпись сетки — слово Заголовок(…) — уходит в aria-label.
Сетка: каждый ребёнок — своя ячейка
HTML = Кит.Сетка(
Кит.Плитка("12", "Проектов"),
Кит.Плитка("340", "Ключей"),
Кит.Плитка("4,2 ГБ", "Занято")).Колонки(3).Заголовок("Показатели").Рендер();Гайдлайны#
Код
Ряд = Кит.Ряд("выбор");
Для Каждого Подпись Из СтрРазделить("Все,Мои,Архив", ",") Цикл
Ряд.Добавить(Кит.Кнопка(Подпись).Вторичная());
КонецЦикла;
HTML = Ряд.Рендер();Код
Холст = Кит.Холст();
Для Каждого Подпись Из СтрРазделить("Все,Мои,Архив", ",") Цикл
Холст.Добавить(Кит.Кнопка(Подпись).Вторичная());
КонецЦикла;
HTML = Холст.Рендер();Код
HTML = Кит.Группа("Уведомления",
Кит.Поле("почта", "На почту").ТипЗначения(Тип("Булево")),
Кит.Поле("чат", "В чат").ТипЗначения(Тип("Булево"))).Вид("набор").Рендер();Код
HTML = Кит.Холст(
Кит.Надпись("Уведомления").Вид("метка"),
Кит.Поле("почта", "На почту").ТипЗначения(Тип("Булево")),
Кит.Поле("чат", "В чат").ТипЗначения(Тип("Булево"))).Рендер();Доступность#
- Раскрывашка — нативный
details: клавиатура, фокус и состояние «свёрнуто/развёрнуто» работают без скрипта. Подпись раскрывашки кит вешаетaria-labelна свёрнутую строку. - Легенда группы печатается первым ребёнком
fieldset, как требует HTML: скринридер читает её перед каждым полем группы. - Ряд без видимого заголовка назовите подписью и дайте ему роль «группа»: подпись станет
aria-label, роль —role="group". - Признак (
data-*) — для скрипта, а не для скринридера. Имя признака — латиницей, цифрами и дефисом, иначе он молча не печатается.
Справка#
Кит.Область()src/Классы/холст/Кит.os
Область — коробка на экране: свой блок, свой вид, и на неё можно повесить признак и роль. Тем и отличается от холста, что у неё есть тег. Вид словом: «проза» (чужой документ, набранный типографски) | «карточки» (колонка карточек) | «шапка» | «плашки» | «действия» (части карточки объекта) | «отбор» (полоса применённых плашек над списком) | «вставка» (врезка пунктиром внутри формы: шаг, а не своя секция) | «студия» (работа слева, образец справа) | «работа» / «образец» (колонки студии) | «поле» (рамка поля с меткой и подсказкой вокруг своего управления) | «полоса» (колонка содержимого по центру страницы) | "" (просто блок). Параметры: Р1…Р8 - ЭлементЭкрана, Строка - (необязательные) дети узла; строка — текст. Возвращаемое значение: ЭлементЭкрана
Кит.Ряд()src/Классы/холст/Кит.os
Ряд — элементы в строку с переносом. Вид ряда — его смысл, поэтому он первым аргументом.
Параметры:
Вид - Строка - «выбор» (ряд взаимоисключающих кнопок) | «признаки» (ряд плашек)
| «свёрнутые» (ряд плашек, у которого хвост убран под раскрывашку)
| «справа» (ряд, прижатый к правому краю) | «строкой» (значок и значение
в одну строку, без переноса) | «действия» (кнопки и формы-кнопки одним рядом
с переносом: действия записи в одном месте).
Р1…Р8 - ЭлементЭкрана, Строка - (необязательные) дети узла; строка — текст.
Возвращаемое значение:
ЭлементЭкранаКит.Статья()src/Классы/холст/Кит.os
Статья — самостоятельный кусок страницы: его можно вынуть из списка и он останется понятным. Тем и отличается от области, что это лендмарк, а не просто блок. Вид словом: «карточка» (карточка объекта в списке) | "" (без оформления). Параметры: Р1…Р8 - ЭлементЭкрана, Строка - (необязательные) дети узла; строка — текст. Возвращаемое значение: ЭлементЭкрана
Кит.Раскрывашка()src/Классы/холст/Кит.os
Раскрывашка — свёрнутая строка отвечает «что это», развёрнутая отдаёт содержимое. Шапка наполняется словом Шапка(д…), тело — детьми. Вид словом: «простая» (без единого класса) | «врезка» (карточка в потоке списка) | «подробность» (мелкая строка «подробнее» в ячейке) | «хвост» (свёрнутый остаток ряда плашек) | "" (панель). Параметры: Р1…Р8 - ЭлементЭкрана, Строка - (необязательные) тело раскрывашки; строка — текст. Возвращаемое значение: ЭлементЭкрана
ЭлементЭкрана.Шапка()src/Классы/холст/ЭлементЭкрана.os
Шапка раскрывашки — отдельный холст, который печатается свёрнутой строкой. С аргументами наполняет шапку и возвращает саму раскрывашку. Параметры: Р1 - ЭлементЭкрана, Строка, Неопределено - (необязательный) содержимое шапки, до Р8. Р2 - ЭлементЭкрана, Строка, Неопределено - (необязательный) Р3 - ЭлементЭкрана, Строка, Неопределено - (необязательный) Р4 - ЭлементЭкрана, Строка, Неопределено - (необязательный) Р5 - ЭлементЭкрана, Строка, Неопределено - (необязательный) Р6 - ЭлементЭкрана, Строка, Неопределено - (необязательный) Р7 - ЭлементЭкрана, Строка, Неопределено - (необязательный) Р8 - ЭлементЭкрана, Строка, Неопределено - (необязательный) Возвращаемое значение: ЭлементЭкрана - без аргументов холст шапки; с аргументами — эта раскрывашка.
ЭлементЭкрана.Открыть()src/Классы/холст/ЭлементЭкрана.os
Печатает раскрывашку (и запись реестра) сразу развёрнутой: содержимое видно, пока его не свернули. Возвращаемое значение: ЭлементЭкрана - этот же элемент.
Кит.Группа()src/Классы/холст/Кит.os
Группа полей — то, что браузер и скринридер считают одним целым. Вид словом: «набор» (группа-переключатель, которую можно отключить и спрятать целиком) | «простая» (без оформления: группа существует, чтобы отключать и прятать поля вместе) | «раздел» (часть длинной формы: подпись заголовком, раздел от раздела — чертой, вложенные группы без рамок) | "" (обычная). Параметры: Подпись - Строка - видимая подпись группы; пустая — группа без подписи. Р1…Р8 - ЭлементЭкрана, Строка - (необязательные) поля группы; строка — текст. Возвращаемое значение: ЭлементЭкрана
Кит.Сетка()src/Классы/холст/Кит.os
Сетка равнозначных блоков: КАЖДЫЙ ребёнок узла становится своей ячейкой. Слова:
Колонки, Плотная, ПолныеРяды, Заголовок.
Параметры:
Р1…Р8 - ЭлементЭкрана, Структура - (необязательные) ячейки сетки; Структура первым
аргументом — прежний вид модели без поля Ячейки.
Возвращаемое значение:
ЭлементЭкрана