Анализ применения SVG в качестве background-image / Хабр
В последнее время все чаще появляются статьи, в которых авторы рекомендуют использовать SVG для backgroud-image. Действительно, применение SVG приносит большую пользу. Во всех прочитанных статьях очень вскользь упоминалось про производительность отрисовки SVG, что это более затратная операция, так как браузеру необходимо каждый раз заново отрисовывать растр.
И вот в один прекрасный день, открыв одно веб-приложение, я заметил, что мой браузер безумно «пожирает» память — одна вкладка «ела» около 600 МиБ. На МacBook с ретиной дела обстояли еще хуже. С этого момента началось расследование, куда же течет память. Кому интересно, добро пожаловать под кат.
Первым, на что я обратил внимание, был рост памяти при открытии одного попапа, в котором отрисовывались всего 20 элементов с иконками. Сделав профайлинг в chrome, я сделал вывод, что дело не в javaScript, не в CSS, и не в HTML.
Однако я заметил, что чем меньше присутствует элементов с иконками, тем меньше памяти расходуется. Посмотрев, откуда берутся иконки, я увидел, что они взяты из спрайта размером 2000px х 500px. После подмены SVG спрайта на PNG спрайт с такими же размерами, случилось чудо — использование памяти вернулось в разумные рамки. Порассуждав, легко прийти к выводу, что на каждую маленькую иконку отрисовывался большой битмап, на который и расходовалась память.
Прочитав спецификацию по SVG и большое количество различных статей (ссылки в конце статьи), я решил попробовать задавать размер SVG не в px, а в em. В итоге, как я и ожидал, с относительными единицами объем потребляемой памяти оказался приблизительно равным тому, как если бы использовался png-спрайт.
Ниже приведена таблица потребления памяти в chromium на моей машине при отрисовке 16 иконок:
| SVG, размеры заданы в em | 9 216k | демо |
| SVG, размеры заданы в px | 101 600k | демо |
| PNG, малый размер холста | 7 748к | демо |
| PNG, большой размер холста | 10 060k | демо |
Какие же выводы можно сделать? Возможны два варианта.
Список статей, которые рекомендую почитать на тему SVG:
coding.smashingmagazine.com/2012/01/16/resolution-independence-with-svg
habrahabr.ru/post/141654
www.broken-links.com/2012/08/14/better-svg-sprites-with-fragment-identifiers
www.w3.org/TR/SVG
smus.com/canvas-vs-svg-performance
UPD: И так, в ходе общих исследований было выяснено, что такое поведение присутствует в chromium-based браузерах. В браузерах firefox, opera, ie похожий эффект не наблюдается. В комментариях верно указано, что объем памяти зависит от размера холста, а не от единиц измерения. Но единицы измерения могут повлиять на маштабируемость SVG, так что выбирайте единицы под вашу задачу. Спасибо всем за замечания и проведенные тесты в других браузерах.
UPD: Баг закрыт, исправлен в canary build.
Как изменить цвет фонового изображения SVG с помощью CSS
При создании веб-сайта дизайнеры часто используют изображения PNG или JPEG в качестве фона. Однако изменить цвет этих изображений может быть сложно, особенно если изображение маленькое или имеет много деталей. Одним из решений является использование фонового изображения SVG. Изображения SVG состоят из векторной графики, что означает, что их размер можно легко изменить, а их цвета можно изменить с помощью CSS. В этой статье мы покажем вам, как изменить цвет фонового изображения SVG с помощью CSS. Мы также дадим несколько советов по созданию собственных изображений SVG.
В этой статье я покажу вам, как изменить цвет изображения SVG с помощью CSS или Javascript. Для каждого SVG существует файл XML, структура которого показана ниже. Свойство CSS fill можно использовать для непосредственного нацеливания на элемент пути или элемент многоугольника структуры SVG; другой способ — использовать файл в качестве фонового изображения.
Если вы используете значок изображения или логотип изображения sVG и хотите изменить цвет, это может быть сложно, поскольку использование свойства CSS, такого как цвет фона или цвет для файлов SVG, не работает. Мое решение — создать новый класс для изменения цвета значка SVG.
В процессе редактирования заполните [fill=currentColor] тегом svg и убедитесь, что к нему не добавлены другие свойства заливки. Ключевое слово
Изображение SVG можно использовать в качестве фонового изображения в CSS точно так же, как изображение PNG, JPG или GIF. Магия SVG усиливается, что позволяет сохранить четкость, а также обеспечивает гибкость.
I и звездочка — это класс иконок и звездочек, которые нужно добавить в наш HTML, написав I и создав класс иконок и звездочки. Поскольку внутри этих элементов I нет содержимого, нам нужно добавить ширину и высоту, чтобы они поместились в любом месте. Таким образом, мы также можем включить встроенный блок. Все специальные символы в этом файле должны быть закодированы, чтобы сделать его более совместимым с разными браузерами. Вместо копирования и вставки я собираюсь использовать этот декодер URL-адресов для создания URL-адреса. Разметка будет вставлена в мой файл, и я смогу закодировать. Теперь я могу использовать разметку в своем CSS благодаря этой новой разметке. На следующем шаге я буду использовать закодированные
Однако прозрачные фоны не требуются стандартом SVG; они могут быть полезны для создания более полированного изображения.
Вы можете использовать любые ПА с прозрачным фоном, если они вам подходят; Firefox, например, их поддерживает. Если вы хотите, чтобы ваши методы использовались другими, обязательно включите их в свою документацию.
Плюсы и минусы файлов Svg
Если изображение не слишком детализировано, файл можно более эффективно преобразовать в векторный формат. Изображения можно отображать в любом масштабе с помощью файлов векторной графики, тогда как растровые изображения требуют файлов большего размера для уменьшенных версий, тогда как файлы векторной графики содержат достаточно информации для их отображения в любом масштабе. Поскольку форматы PNG и SVG поддерживают прозрачность, они прекрасно подходят для создания логотипов и графики для Интернета. Несмотря на это, растровый прозрачный файл может выиграть от PNG. Если вы работаете с пикселями и прозрачностью, PNG — лучший вариант. Хотя Skia может декодировать и отображать изображения с помощью
JPG.
SVG в фоновом режиме CSS | Могу ли я использовать… Таблицы поддержки для HTML5, CSS3 и т. д.
Могу ли я использовать
Поиск?
SVG в фонах CSS
— CRГлобальное использование
98,68% + 1,12% знак равно 99,8%
Метод использования изображений SVG в качестве фона CSS
Chrome
- 4: Частичная поддержка
- 5 — 107: поддержано
- 108: поддержан
- 109 — 111: поддержано
Safari
- 00% — Not supported»> 3.1: не поддерживается
- 3.2–4: частичная поддержка 9009 5 0–4: поддерживается0 16.1: Supported
- 16.2 — TP: Supported
Firefox
- 2 — 3.6: Not supported
- 4 — 23: Partial support
- 24 — 106: Supported
- 107: Supported
- 108 — 109: Поддерживается
Opera
- 9: не поддерживается
- 9,5 — 91: Поддержано
- 92: Поддержано
IE
- 5.5 — 8: Не поддерживает
- 10% — Supported»>
- 5.5 — 8: Не поддерживает
- 9005 9001 9001 9001 9001 9001 9001 9001 9005 9005 9. 9005 9005 9005 9001 9005 9005 9005 9005 9005 9005 9005 9001 9001 9001 9001 90011112.
- 108: Supported
- 3.2 — 4.1: Partial support
- 4.2 — 16.0: Supported
- 16.1: Supported
- 4 — 18.0 : Поддерживается
- 19.0: Поддерживается
- все: Частичная поддержка
- 00% — Partial support»> 10 — 12.1: Частичная поддержка 9:10055 7 200055
- 13,4: поддержан
- 2,1 — 2,3: не поддерживается
- 3 — 4.4.4: поддерживает
- : 70055
- 3 — 4.4.4: поддержал
- : 70055
- 3 — 4.4.4: поддержал
- : 70055
- 3 — 4.4.4: поддержал
- : 70055
3 — 4.4.4: поддержал- : 70055
- 3 — 4.4.4: поддержал
- 2. 9005 4.1222.5.5 — 8: не поддерживает0055
Chrome for Android
Safari on iOS
Samsung Internet
Opera Mini
Opera Mobile
UC Browser для Android
Browser Android
