Back

Как OpenUI формирует веб-компоненты

Как OpenUI формирует веб-компоненты

Если вы когда-либо создавали кастомный выпадающий список, всплывающую подсказку или popover с нуля, вы знаете цену вопроса: десятки строк JavaScript, ручная настройка ARIA-атрибутов, логика клавиатурной навигации и несовместимости браузеров, которые нужно исправлять. OpenUI существует для того, чтобы устранить эту работу на уровне платформы.

OpenUI — это рабочая группа сообщества W3C, а не библиотека компонентов или фреймворк. Её цель — выявить распространённые UI-паттерны в вебе, изучить, как существующие дизайн-системы их реализуют, и работать напрямую с производителями браузеров для стандартизации совместимых, доступных решений на нативном уровне.

Ключевые выводы

  • OpenUI — это рабочая группа сообщества W3C, которая стандартизирует распространённые UI-паттерны как встроенные функции браузера, снижая потребность в кастомных JavaScript-реализациях.
  • Popover API, Invoker Commands API и кастомизируемый элемент <select> уже доступны в браузерах как прямой результат работы OpenUI.
  • Предложения, такие как Interest Invokers, Focusgroup и улучшения combobox, показывают, куда движется платформа дальше.
  • Прежде чем использовать сторонний компонент, проверьте, что браузер теперь поддерживает нативно — этот список растёт с каждым годом.

Что на самом деле делают веб-стандарты OpenUI

Основная идея проста: если каждая команда пересоздаёт одно и то же меню выбора, popover или combobox с помощью кастомного JavaScript, значит что-то пошло не так на уровне платформы. OpenUI документирует эти паттерны, предлагает спецификации и продвигает нативные браузерные реализации, чтобы разработчики перестали изобретать велосипед заново.

Группа фокусируется на элементах управления, которые либо полностью отсутствуют в HTML, либо существуют в слишком ограниченной форме для стилизации или расширения — таких как <select>, popovers, меню, combobox и всплывающие подсказки.

Практические функции, уже доступные в браузерах

Popover API для веб-интерфейсов

Popover API — один из наиболее прямых результатов влияния OpenUI. Он предоставляет разработчикам нативный атрибут popover, который обрабатывает поведение показа/скрытия, рендеринг на верхнем слое и автоматическое закрытие из коробки — без JavaScript для базовых функций.

<button popovertarget="menu">Open Menu</button>
<div id="menu" popover>Menu content here</div>

Это заменяет паттерны, которые ранее требовали кастомной блокировки фокуса, управления z-index и обнаружения кликов вне элемента.

Invoker Commands API для декларативного управления UI

Invoker Commands API расширяет это ещё дальше и недавно достиг базовой поддержки во всех основных браузерах. Используя атрибуты command и commandfor, кнопки могут декларативно запускать действия на целевых элементах — переключать popovers, открывать диалоги или воспроизводить медиа — без обработчиков событий.

<button commandfor="my-dialog" command="show-modal">Open Dialog</button>
<dialog id="my-dialog">Dialog content</dialog>

Это переносит логику управления UI из JavaScript в HTML, делая взаимодействия более читаемыми, удобными в поддержке и доступными по умолчанию.

CSS для кастомизируемого элемента Select

Элемент <select> всегда было крайне сложно стилизовать. Работа OpenUI над кастомизируемым элементом select меняет это. С помощью appearance: base-select браузеры открывают внутреннюю структуру select для CSS-таргетинга. Псевдоэлемент ::picker(select) позволяет стилизовать контейнер выпадающего списка напрямую.

select {
  appearance: base-select;
}

select::picker(select) {
  border: 1px solid #ccc;
  border-radius: 8px;
  padding: 4px;
}

Эта функция всё ещё экспериментальная и в настоящее время лучше всего использовать её как прогрессивное улучшение, но она представляет значительный сдвиг: стилизованные select без кастомного компонента или JavaScript-обёртки.

Что всё ещё в разработке

Не всё, что исследует OpenUI, уже реализовано. Несколько предложений активны, но ещё не стандартизированы:

  • Interest Invokers — запуск popovers при наведении или фокусе без JavaScript
  • Focusgroup — декларативная клавиатурная навигация по группе элементов, заменяющая ручную логику перемещения tabindex
  • Улучшения combobox — нативный, стилизуемый паттерн combobox для замены распространённой комбинации <input> + кастомный listbox

За этим стоит следить. Они показывают, куда движется платформа, даже если поддержка браузеров сегодня ограничена.

Заключение

Веб-стандарты OpenUI постепенно сокращают случаи, когда вам нужен кастомный компонент или реализация с большим количеством JavaScript. Popover API, Invoker Commands API и CSS для кастомизируемого элемента select уже можно использовать. Предложения, всё ещё находящиеся в разработке — Interest Invokers, Focusgroup, combobox — показывают направление.

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

Часто задаваемые вопросы

Да. Popover API поддерживается во всех основных браузерах, включая Chrome, Edge, Safari и Firefox. Он нативно обрабатывает поведение показа/скрытия, рендеринг на верхнем слое и автоматическое закрытие. Для старых браузеров, которым не хватает поддержки, вы можете использовать полифил или простой JavaScript-фолбэк, но базовое покрытие достаточно широкое для большинства продакшен-случаев.

Popover API специально обрабатывает поведение показа/скрытия popover. Invoker Commands API более универсален. Он позволяет кнопкам декларативно запускать действия на любом целевом элементе, используя атрибуты command и commandfor. Это включает открытие диалогов, переключение popovers и управление воспроизведением медиа — всё без написания JavaScript-обработчиков событий.

Не полностью. Значение appearance base-select и псевдоэлемент picker в настоящее время реализованы в браузерах на основе Chromium, в то время как другие движки всё ещё экспериментируют или обсуждают поддержку. Поддержка Safari и Firefox всё ещё в процессе. Если вам нужна согласованная кросс-браузерная стилизация элементов select сегодня, лучше всего работает подход прогрессивного улучшения: используйте base-select там, где он поддерживается, и возвращайтесь к стандартной стилизации в других местах.

Не полностью, но сокращает разрыв. OpenUI нацелен на наиболее распространённые паттерны, такие как popovers, selects и диалоги, которые каждая библиотека пересоздаёт. По мере расширения нативной браузерной поддержки случаи, когда вам нужна сторонняя абстракция, будут сокращаться. Для сложных, сильно кастомизированных компонентов библиотеки всё ещё предлагают ценность, но базовый уровень продолжает расти.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay