Як правильно змінити колір елемента SVG? | robot_dreams
Для відстеження статусу замовлення - авторизуйтесь
Введіть код, який був надісланий на пошту Введіть код із SMS, який був надісланий на номер
 
Код дійсний протягом 2 хвилин Код з SMS дійсний протягом 2 хвилин
Ви впевнені, що хочете вийти?
Сеанс завершено
На головну
Практика: Як правильно змінити колір елемента SVG?

Практика: Як правильно змінити колір елемента SVG?

2 перевірених способи

SVG — це масштабована векторна графіка (англ. Scalable Vector Graphics). Розробники вебсайтів найчастіше використовують цей формат для іконок та логотипів, а також для створення інтерактивних та анімованих графічних елементів сайту. Свою популярність він здобув завдяки малому розміру файлів і можливості масштабувати зображення без втрати якості. Крім того, SVG — це текстовий формат, який індексується пошуковими системами та може допомогти із SEO-просуванням сайту. 

Завдяки своїм перевагам SVG-зображення стали невіддільною частиною сучасного вебдизайну. В цьому матеріалі ми розглянемо декілька методів для зміни кольору SVG-елементів, оскільки така потреба виникає доволі часто. 

Зміна кольору SVG-зображення на сайті може знадобитися з декількох причин:

1. Адаптація до дизайну сайту. Зміна кольору SVG-елементів підлаштовує їх під палітру сайту.

2. Підтримка темної/світлої теми. Параметри SVG-елементів можна легко змінювати відповідно до обраної теми на пристрої.

3. Покращення користувацького досвіду (UX). SVG-зображення може змінювати колір під час взаємодії з користувачем. Наприклад, за наведення курсора іконка змінює відтінок. Або ж колір SVG-елемента сповіщає про успіх (зелений) виконаної операції або помилку (червоний).

4. Оптимізація коду й підвищення продуктивності сайту. Можна динамічно змінювати властивості одного SVG-елемента замість дублювання графіки.

Як змінити колір SVG-елемента

1. За допомогою fill і stroke

Кожен SVG-елемент має атрибути fill і stroke. Атрибут fill визначає колір внутрішньої частини елемента, а stroke — його контуру. Змінити значення цих атрибутів можна у два способи: статично в текстовому редакторі або динамічно за допомогою CSS.

  • Зміна в текстовому редакторі

Оскільки SVG — це текстовий формат на основі XML, змінити його параметри можна в текстовому редакторі. Для цього:

Відкрийте SVG-файл у текстовому редакторі, наприклад, Notepad або Visual Studio Code.

1. Знайдіть потрібний код у файлі.

2. Наприклад, маємо червоне коло з чорним контуром:

<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />

3. Змініть значення атрибутів fill і stroke. Наприклад, зробіть коло зеленим, а колір контуру залишіть без змін:

<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="green" />

4. Збережіть файл у тому самому форматі .svg.

Задавати колір можна як його назвою (red, green, white), так і відповідним шістнадцятковим значенням. Наприклад, #FFFFFF для білого або #FF0000 для червоного. В інтернеті ви знайдете безліч таблиць з відтінками кольорів та їхніми відповідними HEX-кодами.

Цей спосіб зміни кольору доволі простий і не потребує коригування зображення в графічному редакторі. Проте таким чином ви не зможете динамічно змінювати властивості SVG-елемента. Тому пропонуємо розглянути наступний метод.

  • Зміна за допомогою CSS

Щоб змінити колір SVG-елемента за допомогою CSS, зображення потрібно вставляти як вбудований (inline) елемент. Тобто внести код SVG безпосередньо до HTML-документа.

Щоб отримати код SVG-зображення, відкрийте його в текстовому редакторі. Також переглянути код можна під час збереження SVG-файлу, якщо ви працюєте з Adobe Illustrator. Для цього натисніть SVG Code….

Наприклад, у нас є червоне коло, код якого потрібно додати в HTML-файл.

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
  <circle  stroke="black" stroke-width="3" fill="red" />
</svg>

Для зміни кольору використайте ті самі атрибути, що й у минулому методі: fill або stroke.

circle {
  fill: green;
}

У цьому прикладі колір кола змінюється на зелений.

<style>
 circle {
   fill: green;
 }
</style>

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
  <circle  stroke="black" stroke-width="3" fill="red" />
</svg>

Також можна змінювати колір контуру, його ширину та інші властивості SVG-елемента. Якщо хочете використовувати зовнішні таблиці стилів, зберігайте CSS-код окремим файлом і підставляйте його в HTML тегом link.

/*збережено як style.css*/

circle {
  fill: green;
}
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>

    <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
        <circle  stroke="black" stroke-width="3" fill="red" />
    </svg>
 </body>
</html>

2. За допомогою filter

Іноді виникає потреба підставити SVG-елемент як файл замість вбудованого коду. В такому разі fill або stroke не працюють. На допомогу прийде CSS-властивість filter. Вона застосовує до зображення такі графічні ефекти:

  • blur() — розмиття;
  • brightness() — зміна яскравості;
  • contrast() — зміна контрасту;
  • drop-shadow() — додавання тіні;
  • grayscale() — зміна зображення у відтінки сірого;
  • hue-rotate() — зміна загального відтінку;
  • invert() — інвертування кольорів;
  • opacity() — зміна прозорості;
  • saturate() — зміна насиченості кольорів;
  • sepia() — зміна кольорів у тон сепія.

Щоб змінити колір зображення:

1. Підставте SVG-елемент через тег <img> та задайте йому клас.

<img src="circle.svg" class="circle"/>

2. Перетворіть HEX-код бажаного кольору на CSS-фільтр. Зробити це можна тут. Зверніть увагу, що наведений приклад працює для зображень чорного кольору з прозорим фоном.

Приклад фільтра для кольору #FF0000 (червоний):

filter: invert(13%) sepia(100%) saturate(5260%) hue-rotate(1deg) brightness(97%) contrast(117%);

3. Додайте CSS-фільтр у клас.

.circle {
  filter: invert(13%) sepia(100%) saturate(5260%) hue-rotate(1deg) brightness(97%) contrast(117%);
}

Порядок написання аргументів фільтра (invert, sepia, saturate тощо) має значення. Кожен з них почергово застосовується до зображення, змінюючи його властивості. Поекспериментуйте з ними, щоб краще зрозуміти принцип роботи CSS-фільтра.

Отже, якщо вам потрібно динамічно змінювати колір SVG-зображень, додавати інтерактивні графічні елементи та розробляти сучасні вебсторінки, без CSS не обійтись. А от чи змінювати параметри через атрибути fill і stroke або ж за допомогою CSS-фільтрів, залежить винятково від ваших потреб та підходу до реалізації проєктів.

Ще статті