Хотя type="color" - это не то, что нужно большинству веб-разработчиков в их повседневном дизайне, это своего рода элемент управления вводом, который присутствует повсюду, и его поддержка еще не популярна в основных браузерах и платформах.

Имея немного дополнительного времени, я решил попробовать свои силы в настраиваемом компоненте ввода, который можно использовать для ввода цветов. Это не так необычно, как то, что реализовано в Chrome или Firefox, но это действительно простой компонент, который позволяет вам вводить цвет в любом формате (шестнадцатеричный, rgb (), rgba (), прозрачный или именованный цвет - и даже градиенты) и показывает вы предварительный просмотр этого цвета.

HTML: определение структуры компонентов

Что касается структуры компонентов, нам нужно что-то действительно простое. Мой взгляд на эту тему следующий:

  • Внешний <div> контейнер, который держит все вместе.
  • Два <div> контейнера внутри, которые используют FlexBox для создания удобного макета.
  • Один элемент <input> внутри первого контейнера, в который пользователь может ввести текст.
  • Один цветной элемент <div>, который будет предварительно просматривать цвет, вводимый пользователем.

CSS: Делаем все красивым

В своей реализации я использовал около 30 строк CSS. Что делает мой код, по сути, следующее:

  • Настройте макет для компонента с помощью FlexBox. Два внутренних контейнера <div> имеют соотношение 19: 1.
  • Примените базовый стиль к элементу <input>, чтобы элемент по умолчанию выглядел немного красивее.
  • Придайте элементу предварительного просмотра <div> базовый стиль, чтобы он выглядел как элемент предварительного просмотра цвета.

JavaScript: создание динамических компонентов и события

Заключительная часть - использовать Javascript, чтобы воплотить нашу идею в жизнь. Я решил сделать свой компонент модульным, поэтому я могу использовать одну функцию для преобразования любого <div> элемента на моей странице в компонент, который я только что создал. Вышеупомянутая функция выполняет следующие действия примерно в 15 строках JavaScript:

  • Добавьте соответствующий класс в контейнер <div>.
  • Заполните контейнер соответствующим HTML-кодом.
  • Обновите элементы внутри него, чтобы они имели соответствующие id.
  • Добавьте прослушиватель событий для события ввода в поле <input>, чтобы элемент предварительного просмотра <div> реагировал на изменения ввода.

Вот и все. Вот как выглядит компонент:

И вот некоторые из поддерживаемых форматов значений (которые, по сути, являются любым допустимым значением background в CSS):

Полный код компонента можно найти здесь, а также Демо Codepen, если вам так удобнее. Я также обнаружил, что этот компонент совместим с Bootstrap (и, возможно, с другими фреймворками CSS) и выглядит вполне прилично без каких-либо изменений в его CSS, поэтому вы можете добавить его в любой и все свои проекты.

Спасибо за внимание! Если вам понравилась эта статья, хлопните в ладоши или 50 - все зависит от вас!