Множество способов динамически раскрашивать значки веб-сайтов

Почти на каждом веб-сайте есть значки, которые меняют цвет, когда вы наводите на них курсор или активируете функцию. Старый добрый способ добиться этого - поменять местами изображения. Для этого нам нужно создать два изображения с одним и тем же значком, но разных цветов и поменять местами их с помощью javascript:

<img src=”my_image.png” id=”my_image”>
<script>
    var myImage = document.getElementById("my_image");
    myImage.onmouseover = mouseOver;
    myImage.onmouseout = mouseOut;
    
    function mouseOver() { 
      myImage.src = "my_image_active.png";
    }
    function mouseOut() { 
      myImage.src = "my_image.png";
    }
</script>

Как это сделать с помощью CSS и фоновых изображений

Используйте ‹DIV› или ‹P› или любой другой элемент по вашему выбору и установите фоновое изображение:

html:
<div class="my_image"><div>
CSS:
.my_image {
  width: 100px;
  height: 100px;
  background-image: url(my_image.png);
  background-repeat: no-repeat;
  background-position: center;
}
.my_image:hover {
  background-image: url(my_image_active.png);
}

Нам по-прежнему нужны два изображения, но код намного проще.

Изменение более чем двух цветов

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

Но что, если бы мы могли добиться этого с помощью простого цвета фона CSS?

Сначала мы делаем изображение прозрачным и просто заливаем его фон, скажем, белым.

HTML:<img src="my_image_inverse.png" id="my_image" />
CSS:
#my_image (
  background-color: red;
}
#my_image:hover (
  background-color: blue;
}

Что делать, если цвет фона нашей страницы изменится?

Работая над своим последним проектом, я столкнулся с этой проблемой. Я создал веб-сайт, имитирующий мобильное приложение для клиентов B2B.

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

Таким образом, цвет значков и фона можно настроить на любое из более чем 16 миллионов значений. Моей задачей было найти решение, охватывающее все варианты. После долгих размышлений я нашел решение:

SVG - это ответ!

Все, что вам нужно сделать, это встроить код SVG в свой HTML, дать ему имя класса CSS и использовать свойство CSS fill:

HTML:
<div>
  <svg class="myIcon" >
    <path d="M0,0h10.195v7.828L8.227,23.555H1.922L0,7.828V0z     M0.352,25.945h9.516v8.414H0.352V25.945z"/>
  </svg>
</div>
CSS:
.myIcon {
  fill: red;
}

Теперь вы можете использовать javascript для изменения значения цвета, например. с помощью палитры цветов или собственного скрипта.

Примечание: это не сработает, если вы используете тег IMG для SVG. Вы не сможете изменить цвет SVG, если сделаете это следующим образом:

<img src="my_icon.svg" class="myIcon" />

Другой способ изменить цвет значка

Если у вас есть набор шрифтов для ваших значков, например шрифт Awesome или шрифт Googles Material, это очень просто: добавьте шрифт и соответствующую таблицу стилей и вставьте код для значка в свой HTML:

HTML:
<i class="fa-solid fa-my-icon"></i>
CSS:
.fa-my-icon {
  color: red;
}

Надеюсь, вы сможете использовать один из вариантов, показанных здесь, для своих собственных веб-проектов.

Удачного кодирования!