Государственные услуги и образование · Новый ресурс
Дизайн-система Amsterdam.
Используйте реальный контракт открытого компонента Switch от Amsterdam, полную нейтральную тему, доступные подписи и настройки чтения с мгновенным применением.
Нативный переключатель Amsterdam CSS4.4.0, исходная нейтральная тема и поведение приложения; фирменные ресурсы не используются. · Справочник по реализации
02
Справочник по дизайн-системе Amsterdam
Изучены реализация CSS и React4.4.0; проверена граница между фирменными токенами и ресурсами. Все значения темы в предварительном просмотре созданы специально для этого примера.
Дизайн-система Amsterdam: компонент и тема оформления отдельно
Корректно используйте слой с открытым исходным кодом
Amsterdam публикует компонент CSS отдельно, поэтому его контракт классов можно реализовать вне React. Таблица стилей зависит от пользовательских свойств CSS; если подключить её без полной темы оформления, важные размеры и цвета останутся неопределёнными. Поэтому в этом примере таблица стилей нативного переключателя используется вместе с полной исходной нейтральной конфигурацией.
В репозитории пакеты с открытым исходным кодом отделены от фирменных ресурсов. У изученного пакета токенов 4.3.0 есть собственное лицензионное уведомление, исключающее его из лицензии открытого исходного кода. Для Amsterdam Sans, значков и логотипа города также действуют особые ограничения. В этом руководстве они упоминаются только для контекста: мы не распространяем эти ресурсы и не утверждаем, что общедоступная загрузка из npm даёт неограниченные права на использование фирменного оформления.
В справочной таблице перечислены все переменные, используемые в выбранной таблице стилей переключателя. Для ширины, размеров бегунка, ширины границы, цветов, смещения контура, курсора и оформления при наведении заданы явные значения. Это исходные значения для данного примера, а не скопированные токены дизайн-системы Amsterdam. Благодаря этому пример можно воспроизвести, не подбирая недостающие параметры темы наугад.
Ширина дорожки — 50px, размер бегунка — 22px, ширина границы — 3px. Смещение бегунка во включённом состоянии рассчитывается на основе его ширины и ширины границы. Если изменить только ширину дорожки, бегунок может сместиться неправильно; изменяйте связанные размеры вместе и проверяйте оба состояния.
Дизайн-система Amsterdam: структура нативного переключателя
Подпись должна идти сразу после поля ввода
Реализация React создаёт обёртку, поле ввода и пустую связанную подпись. В таблице стилей CSS используются селекторы соседних элементов, чтобы оформлять подпись в зависимости от состояний фокуса, checked и disabled поля ввода. Сохраняйте такой порядок в обычной реализации на HTML: если вставить описание между полем ввода и подписью, эти селекторы перестанут работать.
Настоящее поле ввода — это флажок с role="switch". Оно сохраняет нативное свойство checked и поведение при работе с клавиатурой. Поскольку видимая подпись не содержит текста, укажите доступное имя с помощью aria-label или aria-labelledby. В этом примере используется видимый заголовок настройки, а её пояснение связывается с помощью aria-describedby.
Дизайн-система Amsterdam: настройки применяются сразу
Переключатель меняет текущее представление
В исходном коде компонента Switch задано поведение двоичной настройки с немедленным применением. Предварительный просмотр ему соответствует: увеличение текста меняет размер шрифта в статье, усиление контраста меняет цвет текста и обводку, а уменьшение анимации убирает короткий эффект появления метки. Здесь нет кнопки «Сохранить», которая создавала бы ложное впечатление, будто эти локальные настройки отправляются в сервис учётной записи.
Кнопка «Восстановить настройки по умолчанию» сбрасывает все три встроенных состояния checked и возвращает статье исходные классы. В сообщении о состоянии перечислены включённые настройки. После перехода на другую страницу или перезагрузки ничего не сохраняется. В производственном сервисе настроек можно реализовать сохранение, но нужно указать, на что влияет настройка: на эту страницу, устройство или учётную запись.
Включите «Увеличить текст» и проверьте размер абзаца в статье рядом.
Перейдите к пункту «Усилить контраст» и нажмите пробел, чтобы переключить его с клавиатуры.
Восстановите настройки по умолчанию и убедитесь, что все три переключателя и статья вернулись к исходному состоянию.
Дизайн-система Amsterdam: клавиатура, фокус и анимация
Сохраните доступ к встроенному полю ввода
Стили уменьшают визуальную ширину поля, но сохраняют сам элемент управления. Селектор фокуса задаёт обводку следующей метке. Если заменить поле декоративным div, будут утрачены встроенная семантика формы и доступность с клавиатуры, а поддержку клавиатуры придётся реализовать отдельно. Не применяйте к полю ввода display:none.
Встроенная таблица стилей ограничивает переходы условием prefers-reduced-motion:no-preference. Эффект в статье также учитывает настройку операционной системы независимо от локального переключателя. Пользователю, запросившему уменьшение анимации на системном уровне, не должно требоваться сначала искать дополнительный переключатель, чтобы интерфейс стал спокойнее.
Считайте свойство checked единственным достоверным источником состояния и не придумывайте не связанную с ним визуальную индикацию включения.
Задайте каждой настройке устойчивое имя и свяжите пояснение с полем ввода.
После изменения геометрии или цветов темы проверьте состояния выключенного и включённого переключателя, фокусировки и блокировки.
В примере используется компоновка в два столбца: эффект каждой настройки виден в статье. При ширине менее 700px, заданной для этого приложения, элементы управления располагаются над предварительным просмотром. Максимальная ширина 900px и промежуток 32px — решения для этой компоновки, а не подтверждение наличия общегородского токена сетки.
Для нейтрального шрифта используется Arial. Основной текст набран размером 18px с межстрочным интервалом 1.5; режим увеличенного текста меняет только размер шрифта в статье — на 22px. Это пример настройки приложения, а не замена масштабированию браузера и не утверждение, что именно такие размеры предписаны системой Amsterdam. Длинные подписи переносятся, не уменьшая ширину встроенного переключателя.
Дизайн-система Amsterdam: интеграция с CSS или React
Выберите уровень реализации
В существующем приложении на React проверенный компонент Switch принимает стандартные атрибуты поля ввода и передаёт ref этому полю. Для контролируемого использования задайте checked и onChange; для неконтролируемого можно задать defaultChecked. Компонент не предоставляет хранилище данных приложения или API настроек учётной записи.
Для этого самостоятельного примера на HTML нужен только Switch из библиотеки с открытым исходным кодом CSS. Инструкции по настройке и полный код дополняют его необходимой конфигурацией темы и локальной логикой состояния. Установщик пакета может загрузить проприетарные ресурсы как зависимости; их наличие на диске не даёт права импортировать их или включать в поставку. В образце содержатся только выбранный CSS и его лицензия на открытый исходный код.
Не путайте визуальное сходство с принадлежностью к системе
Городская дизайн-система создана для единообразия и доступности муниципальных цифровых продуктов. Её код с открытым исходным кодом можно изучать и адаптировать в соответствии с лицензией, но к логотипу, проприетарному шрифту и иконкам применяются отдельные условия. В предварительном просмотре используются оригинальный брендинг и нейтральное содержимое, чтобы его не приняли за сервис Amsterdam.
Подтверждённая область применения — один встроенный компонент с полной пользовательской темой и содержательным локальным поведением. Это не полная переработка городской темы. Если реальный продукт использует более широкий пакет CSS, необходимо определить и протестировать все переменные, нужные дополнительным компонентам, а не распространять конфигурацию темы Switch на не связанные с ним элементы управления.
Только CSS с открытым исходным кодом; далее приведены полная оригинальная тема и рабочий пример на HTML. Проприетарные токены и пакеты ресурсов не входят в поставку. В источниках также доступен ZIP-архив полного рабочего примера с точными зависимостями предварительного просмотра и полным документом. Распакуйте архив, выполните команду python3 -m http.server 8080 в этой папке и откройте http://localhost:8080/amsterdam.html. Примеры с модулями нельзя открывать через file://.
bash
npm install @amsterdam/[email protected]
# Copy dist/switch/switch.css into your public assets.
# Load it before the complete original theme configuration below.
# Do not import the proprietary assets or tokens for this neutral example.
Запрос для вашего проекта
Промпт для AI-агента
Используйте Switch из библиотеки CSS с открытым исходным кодом и полной оригинальной темой для Amsterdam. Сохраните структуру wrapper/input/соседняя метка, роль role=switch и доступное имя. Сразу применяйте двоичные настройки и используйте checked как источник состояния. Учитывайте настройку уменьшения анимации и отличайте локальные настройки от сохранённых настроек учётной записи. Не импортируйте проприетарные токены, шрифты, логотипы или иконки без соответствующих прав.
05
Дизайн-система Amsterdam: источники и область применения
Самостоятельный образец на OpenDesign. Фирменные токены Amsterdam, шрифт Amsterdam Sans, официальные иконки и логотип не включены.