Как вставить SVG на сайт — img, инлайн, background и что выбрать · Trace Logo's
6 мин чтения 0

Как вставить SVG на сайт — img, инлайн, background и что выбрать

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

Коротко

Логотип и картинки — <img src="logo.svg">: просто, кэшируется, безопасно. Иконки, которые нужно перекрашивать (ховеры, тёмная тема) — инлайн <svg> в HTML. Декор и фоны — background-image в CSS. Спрайты через <use> — когда одинаковых иконок много.

Способ 1. Тег img — дефолтный выбор

код
<img src="/images/logo.svg" alt="Логотип компании" width="140" height="40">

Работает как любая картинка: файл кэшируется браузером, лениво грузится с loading="lazy", не раздувает HTML.

Плюсы: кэширование, простота, безопасность — скрипты внутри SVG в этом режиме не выполняются.

Минусы: нельзя управлять внутренностями из CSS. Перекрасить логотип по ховеру через fill не получится — стили страницы внутрь <img> не проникают.

Всегда указывайте width и height

Без явных размеров некоторые браузеры считают размер SVG уже после загрузки — и вёрстка прыгает. Атрибуты width/height резервируют место заранее и убирают сдвиг макета (тот самый CLS из Core Web Vitals).

Способ 2. Инлайн SVG — полный контроль

Код SVG вставляется прямо в HTML:

код
<button class="btn">
  <svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true">
    <path d="M12 2L2 22h20L12 2z" fill="currentColor"/>
  </svg>
  Отправить
</button>

Плюсы: полное управление из CSS и JS — цвет, анимации, transition по ховеру. Волшебное слово fill="currentColor" заставляет иконку наследовать цвет текста: сменился цвет кнопки — сменилась и иконка, включая тёмную тему автоматически. Плюс ноль сетевых запросов.

Минусы: код не кэшируется (грузится с каждой страницей), раздувает HTML, а повторяющаяся иконка копипастится по всему шаблону.

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

Способ 3. Background‑image в CSS — для декора

код
.hero {
  background-image: url('/images/pattern.svg');
  background-size: cover;
}

Плюсы: кэшируется, декор отделён от контента, работают background-repeat и все фоновые трюки.

Минусы: перекрашивать нельзя (лайфхак: одноцветную иконку можно красить через mask-image + background-color), для скринридеров изображение невидимо — значит, только для декора, не для смысла.

Способ 4. SVG‑спрайт и use — когда иконок много

Все иконки складываются в один файл‑спрайт, а на странице вызываются по id:

код
<svg class="icon"><use href="/sprite.svg#icon-search"/></svg>

Плюсы: один запрос на все иконки, кэшируется, currentColor работает.

Минусы: нужно собирать спрайт (обычно автоматикой в сборке), а с ленивой загрузкой отдельных иконок сложнее.

Когда выбирать: дизайн‑системы и интерфейсы с десятками повторяющихся иконок.

Сводная таблица

imgинлайнbackgroundспрайт
Кэширование
Перекраска из CSS
Доступность (alt)
Не раздувает HTML
Типичный случайлоготипиконки UIдекориконки UI (много)

Безопасность: почему чужой SVG нельзя вставлять инлайном

SVG — это XML, и внутри него могут жить <script>, обработчики событий и внешние ссылки. Через <img> и background браузер это всё игнорирует, а вот инлайн‑вставка выполняет скрипты с полными правами вашей страницы.

Правило

Инлайном вставляйте только SVG, которые вы контролируете: свои или из проверенного источника, прогнанные через оптимизатор (SVGO вычищает скрипты). SVG, загруженный пользователями, — только через <img> и с отдельного домена.

Частые вопросы

Нужен ли фоллбэк в PNG? Нет. SVG поддерживают все браузеры, которые вы встретите в 2026 году. Фоллбэки для IE — археология.

Почему мой инлайн‑SVG огромный на странице? У него, скорее всего, нет атрибута viewBox или заданы гигантские width/height в самом файле. Проверьте, что viewBox есть, а размеры управляются с уровня CSS.

Как анимировать SVG? Инлайн‑вставка + обычные CSS‑анимации на path и группы. Для сложного — библиотеки типа GSAP или Lottie (какая анимация логотипу вообще нужна — разбирали отдельно).

Работает ли lazy loading для SVG? Для <img> — да, обычный loading="lazy". Инлайн‑SVG грузится вместе с HTML и лениво не бывает — ещё один аргумент не инлайнить всё подряд.

Как задать SVG в качестве курсора или favicon? Favicon — да, через <link rel="icon" type="image/svg+xml"> (детали — в статье про фавиконы). Курсор — формально можно (cursor: url(icon.svg)), но поддержка капризная, надёжнее PNG.

Доступность: три атрибута, о которых забывают

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

  • Смысловая картинка (логотип, иллюстрация): в <img> — обычный alt; в инлайн‑SVG — role="img" и <title> первым дочерним элементом:
код
<svg role="img" viewBox="0 0 100 100">
  <title>Логотип компании</title>
  ...
</svg>
  • Декоративная иконка рядом с текстом (иконка в кнопке «Отправить»): наоборот, спрячьте её от скринридера — aria-hidden="true", иначе он прочитает и текст, и описание иконки.
  • Интерактивный SVG (кнопка‑иконка без текста): aria-label на самой кнопке, а SVG внутри — с aria-hidden.

Это три строки кода, которые отделяют аккуратный сайт от сайта, где незрячий пользователь слышит «graphic graphic graphic» вместо навигации.

Производительность: что даёт каждый способ в цифрах

Прикинем на типичной странице с логотипом и 20 иконками:

  • Всё инлайном: +30–60 КБ к каждому HTML‑документу; иконки не кэшируются между страницами. На сайте из 100 страниц пользователь скачает иконки 100 раз.
  • Всё через img: 21 запрос при первом визите, дальше — из кэша. Но 20 запросов на старте — заметная пауза на медленных сетях (HTTP/2 смягчает, но не отменяет).
  • Спрайт + инлайн‑логотип: 1 запрос на все иконки (кэшируется), логотип виден мгновенно без запроса. Обычно это оптимум.

И два усилителя для любого способа: сожмите SVG оптимизатором (минус 30–70% веса — см. статью про оптимизацию SVG) и убедитесь, что сервер отдаёт SVG с gzip/brotli — текстовый формат сжимается в 3–5 раз.

Частый вопрос: SVG‑логотип «прыгает» при загрузке

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

  1. Нет width/height у img — браузер не знает размер до загрузки. Задайте атрибуты.
  2. SVG грузится из CSS‑фона после парсинга стилей — для логотипа в шапке используйте <img> или инлайн.
  3. Логотип зависит от веб‑шрифта (текст в SVG не в кривых) — переведите текст в кривые.

Для первого экрана работает и приём «критический инлайн»: логотип шапки — инлайном (мгновенно), всё остальное — файлами с кэшированием.

Коротко

<img> — для логотипов и картинок, инлайн — для перекрашиваемых иконок, background — для декора, спрайт — для иконок оптом. И никогда не инлайньте SVG из непроверенных источников.

Все SVG в нашем каталоге логотипов — чистый вектор без скриптов и мусора: можно скачать файл для <img> или скопировать код прямо в разметку одной кнопкой.

Библиотека логотипов и эмодзи Скачивайте SVG/PNG бесплатно и экспортируйте в Figma
Открыть каталог