[Перевод] Однажды у нас будет полностью настраиваемый select
Сегодня я хочу рассмотреть предложенную функцию HTML, которая может в итоге заменить множество пользовательских компонентов ввода на основе Позвольте мне начать с CSS. CSS — это фантастика, потому что уже более 25 лет он позволяет нам решать, как должны выглядеть наши веб-сайты. Но так было не всегда. До появления CSS вы могли определять только структуру своих страниц, а браузеры определяли их внешний вид. Перенесемся в настоящее, CSS не просто существует, он стал чрезвычайно универсальным. У нас есть grid«ы, CSS-переменные, преобразования через transform и многое другое, и все это довольно хорошо работает в разных браузерах. Основной принцип CSS остается неизменным: стили — это подсказки. То, как выглядят веб-сайты, зависит от предпочтений пользователей, браузеров и веб-разработчиков. Но, возможно, в вашей дизайн-системе ваш select имеет очень специфические стили. Тени вокруг списка, особые настройки отступов… или ваш select содержит больше, чем просто строки текста, например флаги с названиями стран или аватары с именами пользователей. Элемент Элемент Когда вы используете Источник: Anatomy of the selectmenu В CSS Shadow Parts 1, который в настоящее время находится в стадии рабочего черновика (Working Draft) (т. е. еще не является полноценным стандартом), вводится новый псевдоэлемент, позволяющий стилизовать части теневых корней: Подождите, разве Shadow DOM не был чем-то специфичным для веб-компонентов? Да. Но то, как С помощью Или, может быть, вы хотите изменить внешний вид стрелки: ( Вы также сможете стилизовать selectmenu в зависимости от того, открыто оно или закрыто, используя псевдокласс Или, может быть, вам нужен другой маркер, когда selectmenu открыто: Разные иконки в открытом и закрытом состояниях Также будет псевдокласс Вы также можете заменить части, показанные выше, на свою собственную разметку. Части, показанные выше, представлены как «слоты», что означает, что вы можете добавить свою собственную древовидную структуру в разметку и использовать её для замены какой-либо части. Например, вот как вы замените иконку чем-то другим: Все, что находится внутри этого В принципе, В настоящее время selectmenu находится в стадии «инкубации» в Open UI Community Group и разрабатывается в Chromium за флагом. А что насчет других браузеров и браузерных движков? Я не уверен, что произойдет в Safari или Webkit, но люди из Firefox (Mozilla) присоединяются к призывам Open UI. Цитата из «The Declarative Web» посвящённая видению компании Mozilla открытости веба: [в Интернете встроенные элементы управления] часто недостаточно оформлены и имеют несовместимую внутреннюю структуру в разных браузерах, что затрудняет их визуальное согласование с остальной частью веб-страницы. Мы хотим заполнить эти пробелы и рады видеть, что благодаря стараниям OpenUI уже есть успехи в этой области. Чтобы Итак, вкратце: Вы можете поиграть с
.
CSS это круто
не позволит вам сделать всё это на CSS. Здесь на сцене появляется
.Части selectmenu
— это новый элемент HTML, предложенный Open UI Community Group. Он еще не попал в спецификацию HTML, но его прототип находится в Chromium. Вы можете проверить это, включив флаг «Experimental Web Platform Features» (перейдите на страницу about: flags и найдите этот флаг).
, вы обнаружите, что оно состоит из разных частей: — корневой элемент
— кнопка, нажав на которую, вы откроете select
— текущее выбранное значение
— стрелка, которая находится в кнопке
— всплывающее окно, которое открывается при нажатии на кнопку — параметры в списке (как и в обычном
)
— необязательный способ группировки опций (как и в обычном
)
Стилизация selectmenu
Стилизация частей
::part()
.
реализован в браузере, похоже на веб-компонент. Вы можете смотреть на него как на веб-компонент, который поставляется с браузером.::part
вы можете стилизовать различные части так, как они описаны выше, например, чтобы стилизовать список, вы должны написать: selectmenu::part(listbox) {
box-shadow: 3px 3px 3px 3px hotpink;
}
selectmenu::part(marker) {
box-shadow: 3px 3px 3px 3px hotpink;
}
еще не добавлен в объяснение selectmenu, но это было утверждено на собрании Open UI)Состояние стилей
:open
: selectmenu {
border: 2px solid black;
}
selectmenu:open {
border-color: hotpink;
}
selectmenu::part(marker) {
// regular
}
selectmenu::part(marker):open {
// open
}
:closed
для стилизации закрытого состояния. Это было бы эквивалентно :not(:open)
. Псевдоклассы:open
и :closed
определены в Element Display State section of Selectors, Level 4.Кастомизация, выходящая за рамки простых стилей
div
будет использовано вместо стандартной иконки на кнопке, чтобы открыть selectmenu.
позволит вам делать подобные вещи с каждой из частей, чтобы вы могли заменить кнопку или опции. Это дает разработчикам большую власть, а вместе с ней и ответственность. Итак, предостережение: вложение неправильных элементов в части selectmenu, может быстро привести к «HTMHell». Например, что, если вы поместите в опцию больше, чем просто текст — скажем, аватары —, но браузеры и вспомогательные технологии ожидают только текст? Или что, если вы поместите кнопку в опцию? Подобные вложенные интерактивные элементы рискуют нарушить работу конечных пользователей в случаях, когда браузер или вспомогательные технологии не смогут волшебным образом исправить это, поэтому будьте осторожны.Текущий статус
стало реальностью, ему нужно будет перейти к стандартам, а затем получить реализацию в браузерах. Пока сложно сказать, когда это произойдет.Резюме
— это новое предложение, которое добавит новый элемент управления на веб-платформу, который по умолчанию похож на , но может быть оформлен и настроен практически любым способом, который вы хотите. Меня особенно радует возможность использовать
::part()
для стилизации частей, и слегка беспокоит возможность полной замены частей, поскольку это может нарушить доступность, если заменить её неправильными вещами.
сегодня в Microsoft Edge Canary или Google Chrome Canary и сообщить о проблемах в репозитории Open UI.