Государственные услуги и образование · Новый ресурс

Дизайн-система Helsinki.

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

Руководство OpenDesign8 глав24 эталонные записиАвторское руководство по приложению
01

Предварительный просмотр интерфейса дизайн-системы Helsinki

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

Запланируйте послеобеденное мероприятие для развития навыковОткрыть полный пример
Нативные стили hds-core5.2.2 CSS; запасной вариант — Arial, логика приложения реализована отдельно. · Справочник по реализации
02

Справочник по дизайн-системе Helsinki

Пакет hds-core5.2.2 CSS и официальные рекомендации по формам. Нативные стили; запасной вариант — Arial; исходное правило минимального количества выбранных пунктов.

Типографические токены

Источник
Название / правилоЗначение / конфигурацияПрименение
--font-defaultHelsinkiGroteskPro, Arial, sans-serifЗащищённые авторским правом шрифты Helsinki не входят в пакет Core; в примере используется нативный запасной шрифт Arial.
--fontsize-body-s/m/l/xl14 /16 /18 /20pxПри стандартном размере корневого шрифта выбирайте роль, а не произвольный размер для каждого поля.
--fontsize-heading-xxl/xl64 /48pxСамые крупные заголовки.
--fontsize-heading-xl-mobile40pxЯвно заданный токен; предварительный просмотр переключается на значение для 576px по решению приложения.
--fontsize-heading-l/m/s32 /24 /20pxЗаголовки второго уровня.
--lineheight-s/m/l/xl1 /1.2 /1.5 /1.75Множители, а не высота в пикселях.

Интервалы компонентов и макета

Источник
Название / правилоЗначение / конфигурацияПрименение
Component scale2,4,8,12,16,24,32,40,48,56,64,72pxот spacing-4-xs до spacing-5-xl.
Layout scale16,24,32,48,64,96,128pxот spacing-layout-2-xs до spacing-layout-2-xl.
Breakpoints320,576,768,992,1248,1440pxот xs до xxl; объявленные значения токенов сами по себе не создают медиазапросы.
Container widths288,544,720,944,1200pxЭталонная ширина — от xs до xl.
Checkbox geometry24px size;2px border;3px focus outlineАктуальный CSS из Core5.2.2.
Button minimum56px; square cornersРамка толщиной 2px с отступами, заданными через spacing-s/l.

Семантические цвета и палитра

Источник
Название / правилоЗначение / конфигурацияПрименение
Bus#0000bf Тема по умолчанию для выбранного флажка и основной кнопки.
Coat of arms / focus#0072c6 Отдельный оттенок городского синего и роль для фокуса.
Copper#00d7a7 Акцентная палитра; правило оформления заголовка примера.
Error / light#b01038 /#f6e2e6Обратная связь при проверке; её нельзя заменять декоративным оттенком Brick.
Success / light#007a64 /#e2f5f3Роль для подтверждённого результата.
Info / alert#0062b9 /#ffda07Роли для информации и привлечения внимания.
Text / secondary#1a1a1a /#595959black-90 и black-60.

Структура формы и исправление ошибок

Источник
Название / правилоЗначение / конфигурацияПрименение
Selection groupfieldset + legendЛегенда описывает задачу выбора, подписи — варианты.
Vertical itemshds-selection-group__items--verticalНе размещайте длинные варианты в одной горизонтальной строке.
Error summaryNotification error variant with linked error listРазместите сводку под заголовком формы и после неудачной отправки переведите фокус на её заголовок.
Inline errorhds-selection-group__error-textИнструкции-подсказки должны оставаться видимыми во время исправления ошибок.
Application ruleAt least two topicsИсходная проверка сценария, а не настройка флажков HDS по умолчанию.
03

Полное руководство по дизайн-системе Helsinki

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

DESIGN-helsinki.md

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

Скачать руководство

Границы между Core и React дизайн-системы Helsinki

Выберите реализацию, которую действительно используете

HDS предоставляет Core CSS, компоненты React и дизайн-токены. В этом примере используется зафиксированная версия hds-core5.2.2 — именно этот пакет был загружен и изучен. Номер релиза репозитория может отличаться от версии отдельного пакета, поэтому более новый тег репозитория не доказывает, что пример работает на этой версии.

Из этого руководства OpenDesign

Core предоставляет базовые переменные и стили отдельных компонентов. Логика состояния формы приложения, использованная здесь, в него не входит. Выбор, проверка, просмотр и изменение реализованы отдельно в JavaScript на основе нативных элементов ввода HTML и задокументированного шаблона форм HDS.

Прочитать вспомогательную спецификацию

Типографика дизайн-системы Helsinki и границы использования шрифтов

Открыто указывайте резервный шрифт

Переменная шрифта сначала указывает HelsinkiGroteskPro, а затем — Arial и sans-serif. В README для Core прямо сказано, что файлы шрифта Helsinki исключены из-за авторских прав. В предварительном просмотре используется резервный шрифт: ограниченные в использовании шрифты не загружаются и точное фирменное отображение не заявляется.

Базовый токен основного текста — 16px с межстрочным интервалом 1.5. Значение heading-xl — 48px, мобильное значение токена — 40px; в предварительном просмотре переключение происходит на ширине 576px. Это именованные значения, но переменная CSS с точкой останова не создаёт адаптивное поведение автоматически. Явное медиаправило относится к композиции приложения.

Прочитать вспомогательную спецификацию

Две системы интервалов в дизайн-системе Helsinki

Разделяйте интервалы компонентов и ритм страницы

HDS различает последовательность интервалов для компонентов и более крупную последовательность для макета. Первая включает 2, 4, 8, 12, 16 и 24px, а затем значения увеличиваются до 72px. Интервалы макета достигают 128px. Использование spacing-layout-xl между соседними флажками перегрузит группу, хотя переменная задана корректно.

В компоненте флажка заданы элемент управления размером 24px, рамка толщиной 2px и контур фокуса толщиной 3px. Минимальная высота кнопки — 56px, углы прямые. Предварительный просмотр сохраняет эти нативные формы, а форма размещена в контейнере приложения с максимальной шириной 720px — это опубликованное эталонное значение.

Прочитать вспомогательную спецификацию

Роли цветов в форме дизайн-системы Helsinki

Не путайте названия цветов палитры с обратной связью

В теме интерактивных элементов по умолчанию используется Bus blue, а для контура фокуса — Coat of arms blue. Для ошибок предусмотрены отдельный ягодный оттенок и светлая подложка. Акцентный цвет палитры, например Copper, подходит для заголовка, но не должен заменять цветовую роль ошибки лишь потому, что он выглядит выразительнее.

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

Прочитать вспомогательную спецификацию

Анатомия группы флажков в дизайн-системе Helsinki

У группы один вопрос и несколько вариантов ответа

Нативная структура включает fieldset с legend, контейнером вариантов и отдельными обёртками для флажков. Каждый input расположен непосредственно перед своей подписью, поскольку таблица стилей использует эту связь для оформления состояний. Легенда объясняет задачу выбора, а каждая подпись называет один из доступных вариантов.

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

html
<fieldset class="hds-selection-group" aria-describedby="topics-hint">
  <legend class="hds-selection-group__legend">Topics for your afternoon</legend>
  <p id="topics-hint">Choose at least two topics.</p>
  <div class="hds-selection-group__items hds-selection-group__items--vertical">
    <div class="hds-checkbox">
      <input class="hds-checkbox__input" type="checkbox" id="repair" value="Repair and reuse">
      <label class="hds-checkbox__label" for="repair">Repair and reuse</label>
    </div>
    <div class="hds-checkbox">
      <input class="hds-checkbox__input" type="checkbox" id="garden" value="Urban gardening">
      <label class="hds-checkbox__label" for="garden">Urban gardening</label>
    </div>
  </div>
</fieldset>

Справочник по коду

Прочитать вспомогательную спецификацию

Связанные ошибки и исправление в дизайн-системе Helsinki

Сфокусируйте внимание на проблеме, сохранив введённые данные

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

После первой попытки каждое изменение выбора приводит к повторной проверке минимального количества. Когда выбраны две темы, оба сообщения об ошибках исчезают, а выбранные значения сохраняются. При следующей неудачной попытке фокус снова перемещается на заголовок сводки. Правило проверяется и при просмотре; обратная связь на стороне клиента не заменяет серверную проверку в реальном сервисе.

  1. Попробуйте просмотреть форму без выбранных тем и убедитесь, что фокус перемещается на сводку.
  2. Перейдите по ссылке и выберите две темы; убедитесь, что ошибка исчезла.
  3. Откройте локальный просмотр, вернитесь к выбору тем и убедитесь, что оба варианта остались выбраны.

Прочитать вспомогательную спецификацию

Ресурсы и полный пример дизайн-системы Helsinki

Подключайте базовые стили и нужные компоненты

В пакете Core файл base.css отделён от стилей компонентов. Одного base недостаточно: он предоставляет переменные и типографику, но не структуру флажка или уведомления. В настройке указаны точные файлы, используемые в этом примере, поэтому набор ресурсов меньше, чем пакет со всеми компонентами.

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

  • base.css предоставляет цвета, интервалы, типографику и эталонные размеры.
  • Стили checkbox и selection-group задают сгруппированные элементы управления и встроенную обратную связь.
  • Стили notification и button задают подложку сводки ошибок и действия.

Прочитать вспомогательную спецификацию

Что демонстрирует пример дизайн-системы Helsinki

Подробности реализации без неподтверждённых заявлений о сервисе

Предварительный просмотр демонстрирует реальные стили компонентов HDS, фокус при навигации с клавиатуры, исправление ошибок и сохранение данных при ширине экрана 1440, 768 и 390px. Это не заявление о полном аудите доступности. Реальному многоязычному городскому сервису также нужны локализованные подписи, подходящие языковые метаданные, серверные правила и подтверждённый ответ серверной части сервиса.

Исходный код распространяется по лицензии MIT, но на городской шрифт распространяются отдельные ограничения. В этом независимом учебном примере используются вымышленные темы программ, а фирменная айдентика Helsinki отсутствует. Вид примера и локальное состояние нельзя принимать за настоящую регистрацию на мероприятие.

Прочитать вспомогательную спецификацию

Примеры компонентов дизайн-системы Helsinki

Нативная структура группы флажков

fieldset и legend задают вопрос; элементы input и их подписи позволяют выбрать несколько ответов.

html
<fieldset class="hds-selection-group" aria-describedby="topics-hint">
  <legend class="hds-selection-group__legend">Topics for your afternoon</legend>
  <p id="topics-hint">Choose at least two topics.</p>
  <div class="hds-selection-group__items hds-selection-group__items--vertical">
    <div class="hds-checkbox">
      <input class="hds-checkbox__input" type="checkbox" id="repair" value="Repair and reuse">
      <label class="hds-checkbox__label" for="repair">Repair and reuse</label>
    </div>
    <div class="hds-checkbox">
      <input class="hds-checkbox__input" type="checkbox" id="garden" value="Urban gardening">
      <label class="hds-checkbox__label" for="garden">Urban gardening</label>
    </div>
  </div>
</fieldset>

Справочник по коду

Полный сценарий выбора с переходом к связанным ошибкам

Фокус на сводке ошибок, переход к полю для исправления, просмотр, изменение и очистка выбора.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Plan a skills afternoon</title><link rel="stylesheet" href="vendor/hds-core-5.2.2/base.css"><link rel="stylesheet" href="vendor/hds-core-5.2.2/checkbox.css"><link rel="stylesheet" href="vendor/hds-core-5.2.2/selection-group.css"><link rel="stylesheet" href="vendor/hds-core-5.2.2/notification.css"><link rel="stylesheet" href="vendor/hds-core-5.2.2/button.css"><style>*{box-sizing:border-box}body{margin:0;padding:var(--spacing-layout-s) var(--spacing-s);font-family:var(--font-default);color:var(--color-black-90)}main{max-width:720px;margin:auto}h1{margin-top:8px}header{border-top:8px solid var(--color-copper);padding-top:var(--spacing-m)}.hds-selection-group{margin:24px 0}.hds-notification{margin:24px 0}.actions{display:flex;gap:16px;flex-wrap:wrap;margin-top:32px}footer{font-size:14px;line-height:1.5;margin-top:32px;border-top:1px solid var(--color-black-20);padding-top:16px}#review{background:var(--color-silver-light);padding:24px;margin-top:24px}[hidden]{display:none!important}@media(max-width:575px){.heading-xl{font-size:var(--fontsize-heading-xl-mobile)}}button{max-width:100%}</style><main class="text-body"><header><small>COMMUNITY SKILLS · LOCAL PLAN</small><h1 class="heading-xl">Plan a skills afternoon</h1><p>Select at least two topics for an example programme. Nothing is registered or sent.</p></header><form id="form" novalidate><div id="summary" class="hds-notification hds-notification--error" hidden><div class="hds-notification__content"><h2 id="summary-heading" class="hds-notification__label" tabindex="-1">Check your topic selection</h2><div class="hds-notification__body"><ul><li><a href="#repair" id="error-link">Choose at least two topics</a></li></ul></div></div></div><fieldset class="hds-selection-group" aria-describedby="hint field-error"><legend class="hds-selection-group__legend">Topics for your afternoon</legend><p id="hint">Choose two or more. You can change your selection before reviewing the plan.</p><div class="hds-selection-group__items hds-selection-group__items--vertical"><div class="hds-checkbox"><input id="repair" type="checkbox" class="hds-checkbox__input" value="Repair and reuse"><label class="hds-checkbox__label" for="repair">Repair and reuse</label></div><div class="hds-checkbox"><input id="digital" type="checkbox" class="hds-checkbox__input" value="Everyday digital skills"><label class="hds-checkbox__label" for="digital">Everyday digital skills</label></div><div class="hds-checkbox"><input id="garden" type="checkbox" class="hds-checkbox__input" value="Urban gardening"><label class="hds-checkbox__label" for="garden">Urban gardening</label></div></div><div id="field-error" class="hds-selection-group__error-text" hidden>Choose at least two topics.</div></fieldset><p id="count" role="status">0 topics selected.</p><div class="actions"><button class="hds-button hds-button--primary" type="submit">Review local plan</button><button id="reset" class="hds-button hds-button--secondary" type="button">Clear selection</button></div></form><section id="review" hidden tabindex="-1"><h2 class="heading-m">Your selected topics</h2><ul id="selected"></ul><p>This is a local review, not a booking confirmation.</p><button id="change" class="hds-button hds-button--secondary">Change topics</button></section><footer>Native HDS Core5.2.2 styles with Arial fallback. Original selection rule and local review. No Helsinki branding, registration or backend.</footer></main><script>let attempted=false;const boxes=[...document.querySelectorAll('input[type=checkbox]')];const values=()=>boxes.filter(x=>x.checked);function validate(focus=false){const n=values().length;document.querySelector('#count').textContent=n+' topics selected.';const bad=attempted&&n<2;document.querySelector('#summary').hidden=!bad;document.querySelector('#field-error').hidden=!bad;boxes.forEach(x=>{if(bad)x.setAttribute('aria-invalid','true');else x.removeAttribute('aria-invalid')});if(bad&&focus)document.querySelector('#summary-heading').focus();return !bad}boxes.forEach(x=>x.onchange=()=>validate());document.querySelector('#error-link').onclick=e=>{e.preventDefault();boxes[0].focus()};document.querySelector('#form').onsubmit=e=>{e.preventDefault();attempted=true;if(!validate(true))return;const list=document.querySelector('#selected');list.replaceChildren();values().forEach(x=>{const li=document.createElement('li');li.textContent=x.value;list.append(li)});document.querySelector('#form').hidden=true;document.querySelector('#review').hidden=false;document.querySelector('#review').focus()};document.querySelector('#change').onclick=()=>{document.querySelector('#form').hidden=false;document.querySelector('#review').hidden=true;boxes[0].focus()};document.querySelector('#reset').onclick=()=>{boxes.forEach(x=>x.checked=false);attempted=false;validate();boxes[0].focus()};</script></html>

Справочник по коду

04

Настройка агента для дизайн-системы Helsinki

Отправная точка для реализации

Точные пути к ресурсам Core. Проверку и просмотр обрабатывает код приложения; HelsinkiGroteskPro не входит в пакет. В ZIP-архиве полного рабочего примера из раздела «Источники» также находятся точные зависимости для предварительного просмотра и полный документ. Распакуйте архив, запустите в этой папке команду python3 -m http.server 8080, затем откройте http://localhost:8080/helsinki.html. Не открывайте примеры с модулями через file://.

bash
npm install [email protected]
# CSS imports in a bundler:
# import 'hds-core/lib/base.css';
# import 'hds-core/lib/components/checkbox/checkbox.css';
# import 'hds-core/lib/components/selection-group/selection-group.css';
# import 'hds-core/lib/components/notification/notification.css';
# import 'hds-core/lib/components/button/button.css';
# In plain HTML, copy these files into public assets and link base.css first.
# HelsinkiGroteskPro is not bundled; the native font stack falls back to Arial.

Запрос для вашего проекта

Промпт для AI-агента
Используйте base и выбранные стили компонентов CSS из HDS Core5.2.2. Объединяйте связанные флажки с помощью fieldset/legend, сохраняйте подписи и подсказки и применяйте семантические токены ошибок. После неудачной проверки показывайте связанные ошибки под заголовком формы и переводите фокус на заголовок сводки. Повторно проверяйте форму после исправлений, сохраняйте выбранные значения и отличайте локальный просмотр от отправки, подтверждённой сервером.
05

Источники и область применения дизайн-системы Helsinki

Независимый пример OpenDesign. Без ресурса шрифта Helsinki и айдентики сервиса; без регистрации и ответа серверной части.