0

Как изменить цвет заливки SVG, использованного в качестве фона в формате base64?

26

У меня есть проект, в котором я использую SVG, загружаемый в CSS следующим образом:

background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2222px%22%20height%3D%2238px%22%20viewBox%3D%220%200%2022%2038%22%20enable-background%3D%22new%200%200%2022%2038%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%3E.style0%7Bfill%3A%09%23f47216%3B%7D%3C/style%3E%3Cpath%20d%3D%22M2.643%2038c-0.64%200-1.282-0.231-1.79-0.699c-1.074-0.988-1.143-2.661-0.154-3.735l13.13-14.258L0.664%204.4%20c-0.967-1.094-0.865-2.765%200.229-3.732s2.765-0.864%203.7%200.229L19.37%2017.592c0.898%201%200.9%202.545-0.035%203.542L4.588%2037.1%20C4.067%2037.7%203.4%2038%202.6%2038z%22%20class%3D%22style0%22/%3E%3C/svg%3E');

У меня есть несколько состояний при наведении, чтобы выделить элемент, изменяя цвет заливки стрелки.

На данный момент я просто применяю те же данные SVG, меняя часть с заливкой (fill%3A%09%23f47216%3B%7D%3C, где f47216 — это цвет) на нужный новый цвет. Это работает достаточно хорошо. Однако мне хотелось бы узнать, есть ли, возможно, более оптимальный способ достижения этого эффекта.

1 ответ(ов)

0

Вы можете использовать SVG в качестве маски в CSS, что является эффективной альтернативой, если вам нужны монохромные иконки. Вместо того чтобы использовать SVG как фоновое изображение и кодировать его в base64, попробуйте следующий подход. Вы можете изменить цвет фона, и также применять переходы при взаимодействии с мышью. Вот пример кода:

/* Или с префиксом -webkit */
mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" xml:space="preserve"><path d="M11.432 9.512a.636.636 0 0 1 0 .918L2.12 19.742a.636.636 0 0 1-.458.201.637.637 0 0 1-.46-.201l-1-.998C.068 18.609 0 18.459 0 18.285s.068-.329.199-.461l7.854-7.852L.199 2.118A.638.638 0 0 1 0 1.66c0-.174.068-.327.199-.46l1-.998A.634.634 0 0 1 1.66 0c.172 0 .325.068.458.201l9.314 9.311z"/></svg>');
mask-size: auto 12px;
mask-repeat: no-repeat;
transition: background-color 200ms;
background-color: #ff0000;

Обратите внимание на несколько важных моментов:

  • Свойство mask-image не содержит код в base64, оно просто начинается с data:image/svg+xml;utf8,.
  • Свойства маски CSS по сути аналогичны свойствам фона в CSS. Вы можете изучить документацию и заметить, что с помощью масок можно добиться очень многого, и они могут заменить фоновые изображения в различных сценариях.

Для более подробного кода и демонстрации, смотрите этот fiddle: https://jsfiddle.net/o25beLqj/.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь