У меня есть некоторый контент на странице, который служит глобальным фоном. Я поместил спрайт (div
с background-image: url(...)
, меняя кадры, модифицировав background-position
) поверх спрайта, используя position: absolute
. Спрайт представляет собой PNG с альфа-каналом.
Теперь я пытаюсь добавить оттенок этому изображению (зеленоватый, голубоватый или другой).
Я изучил подобные вопросы, и, по-видимому, единственными возможными решениями являются:
- Создайте
div
поверх спрайта с желаемым цветом в качестве егоbackground-color
, желаемой интенсивностью оттенка в качествеopacity
и исходным изображением спрайта в видеmask-image
(и установитеmask-type: alpha
). Хотя на бумаге это должно работать, на практике это не так - этот новыйdiv
просто невидим :( - Используйте
mix-blend-mode
для наложения цветногоdiv
и укажите что-то вродеmultiply
илиoverlay
. Он дает отличные результаты, пока глобальный фон черный. Если это что-то другое - оно включается в расчеты, и оверлейdiv
тоже модифицирует его, создавая окрашенный прямоугольник вместо окрашенного спрайта... - Используйте фильтр SVG, как описано в ответе здесь: https://stackoverflow.com/a/30949302/306470. Я еще не пробовал это, но для этой задачи он кажется излишне сложным. Меня также беспокоит производительность, сильно ли это замедлит работу, если на экране одновременно будет несколько тонированных спрайтов? Если у кого-то был опыт с этим, пожалуйста, напишите здесь :)
- Подготовьте тонированную версию спрайта, используя невидимый
canvas
. Звучит еще сложнее, имеет недостаток в том, что нужно тратить время на подготовку тонированной версии спрайта, но должен ли он работать так же быстро, как и исходный спрайт после его подготовки? Однако реализация должна быть довольно сложной. Чистое решение CSS было бы намного лучше...
Я что-то упускаю? Есть ли другие варианты? Или я должен пойти с № 3 или № 4?
filter: hue-rotate(Xdeg)
изменить значение X в соответствии с вашими требованиями. - person Akshay   schedule 14.11.2020