Как вставить svg в html
Перейти к содержимому

Как вставить svg в html

  • автор:

Как правильно вставлять SVG

Есть несколько способов вставки SVG-изображения. Выбор одного из них зависит от задач, которые стоят перед верстальщиком.

SVG — это формат векторной графики, дословно: масштабируемая векторная графика. МВГ? SVG! В векторных форматах хранится не само изображение, а инструкция по его построению по точкам и кривым.

�� Сегодня вам бесплатно доступен тренажёр по HTML и CSS.

В растровых форматах информация о конкретном числе точек изображения плотно упакована в бинарный кирпич. В него бесполезно заглядывать и менять его можно только в редакторах графики.

�PNG IH�aV PLTE�������0� IDAcZ�d���� �W= S�3�o;���]P ���IEND�B`�~ 

Формат SVG тоже можно создавать и менять в редакторах графики, например, в Illustrator или Figma. Но ещё он текстовый, а значит его можно открыть как HTML или CSS в любом редакторе кода.

SVG — это как отдельная HTML-страница. Когда вставляете SVG, вы, на самом деле, вставляете не просто картинку, а целую страницу. Со своей системой координат, вьюпортом, стилями, скриптами и удивительными особенностями.

Если смотреть на SVG как на отдельную страницу — становится понятнее, какой способ вставки вам нужен.

Первый способ

Первый и самый простой — элемент , который размещается прямо в HTML-коде. Это эффективный способ загрузить любую картинку — браузеры заранее знают по HTML-коду, что она есть и начинают её подгружать.

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

Такой способ лучше всего подходит контентным изображениям, которым не нужно взаимодействие: логотипы, графики, схемы.

Второй способ

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

.picture

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

Третий способ

Третий способ — вставить содержимое SVG-файлов прямо на страницу, как любые другие теги. При таком способе подключения можно управлять стилями SVG через CSS.

С таким SVG можно делать то же, что и с обычными HTML-элементами: стили, скрипты. Можно, например, менять цвет заливки при наведении или даже анимировать векторное изображение.

.navigation-icon

width — ширина в пикселях или процентах.

height — высота в пикселях или процентах.

viewBox — положение и размер области просмотра.

Значение fill отвечает за цвет изображения.

SVG гораздо больше, чем просто формат графики — это мы с вами уже поняли. Если хотите закопаться глубже, почитайте SVG — учебное руководство от MDN Web Docs.

В итоге: способов множество и все чем-то хороши. Выбирайте подходящий под ваши задачи.

Материалы по теме

  • Как проектировать, создавать и анимировать SVG
  • Как сделать интерактивную SVG-диаграмму
  • Форматы изображений для веба

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Как размещать svg в html

я новичок изучаю веб своими силами и у меня вылезло несколько вопросов по поводу использования svg на странице html.

1. Как правильно вставлять svg в html?

  1. Вставить svg инлайново(просто вставить весь код svg в html).
  2. Если иконок больше одной, то отдельно и вставлять их в html где они используются.
  3. Вставлять с помощью object, iframe, embed.
  4. Собрать все иконки в спрайт и вытаскивать их с помощью use.

2. Где хранить спрайт?

В html или отдельным файлом спрайтом. Умею вытаскивать иконки из спрайта, если он весь лежит в html или даже если он лежит отдельным файлом.svg где-нибудь в картинках. Уметь то умею но как делать это. А если быть точнее, то где хранить спрайт чтобы не было проблем с кэшированием или какие там проблемы еще бывают…

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

3. Использовать внешние стили или писать их внутри svg?

Отслеживать
задан 24 янв 2023 в 10:10
28 1 1 серебряный знак 5 5 бронзовых знаков
Возможный дубликат вопроса: С помощью какого тега лучше всего добавлять svg
24 янв 2023 в 17:16

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Как правильно, мне сказать сложно. Поэтому скажу как делаю я ).

Делаю несколько спрайтов, объединяя по какой-нибудь своей логике, и скидываю в /images/icons/ .
Подключаю через use .

Вроде как это один способов, который позволяет кэширование.
Также позволяет использовать указание некоторых svg-параметров через css.

Отслеживать
ответ дан 24 янв 2023 в 10:33
656 4 4 серебряных знака 6 6 бронзовых знаков

Знаю несколько способов а какой будет правильный что бы потом не было ни вопросов, ни проблем с той, же интерактивностью (анимацией если придется анимировать).

#1. object

Лучший способ, чтобы реализовать анимацию, интерактивность, стилизацию, масштабирование это:

Этим способом можно добавлять как один файл SVG, так и несколько иконок, объединенных в спрайт. Этой теме посвящен раздел с меткой — svg-спрайт

#2. Инлайн добавление кода SVG в HTML

Если иконок немного и код svg компактный, то вполне допустим этот способ для реализации анимации и всего остального:

Ниже код анимации шестеренок с кнопками пуска и остановки вращения.

                              GO   STOP   

#3. Использование тега.

Так как браузеры могут отрисовывать по своим правилам SVG документы, то это дает возможность загружать картинки внутри тегов .

Это может быть хорошим методом, если вы хотите полностью отделить SVG код и скрипт на вашей главной странице. Однако манипуляции SVG изображениями с главной страницы при помощи JavaScript будут немного сложнее.

#4. Другие способы добавления SVG, которые делают анимацию, стилизацию невозможной

Можно, как обычно для любого другого изображения задать ширину, высоту.

По соображениям безопасности при этом способе добавления SVG браузеры отключают скрипты, связывания и другие типы интерактивности, когда они добавляются на страницу, кроме того IE10 , Edge , Safari , Chrome не принимают стили, если они определены в отдельном файле таблицы стилей.

Для покраски изображений остается только один способ: фильтры SVG и CSS

Ниже примеры изменения цвета при наведении:

 img:not(:hover) < transition: 2s; filter: saturate(0%); -webkit-filter: saturate(0%); >img:hover  
 .img:hover  

О других способах добавления SVG в HTML здесь

Как верстальщику работать с SVG

Узнаём про векторную графику, добавляем svg-картинки к HTML и творим всякое-разное с их цветом.

Максим Васянович

Максим Васянович

Автор статей по программированию. Преподаватель, ментор, выпускник Skillbox. Фрилансер, веб-разработчик

Помимо привычных растровых форматов (JPG, PNG, GIF), в веб-разработке широко применяют векторный — SVG.

Что такое SVG

SVG (сокращение от Scalable Vector Graphics — «масштабируемая векторная графика») — это вид графики, которую создают с помощью математического описания геометрических примитивов (линий, кругов, эллипсов, прямоугольников, кривых и так далее), которые и образуют все детали будущего изображения.

То есть в этом формате хранится не сама картинка, а инструкции для её построения по точкам и кривым. Они написаны на языке разметки SVG, расширяющем XML.

Достоинства SVG

Прелесть SVG раскрывает масштабирование. Если увеличить растровое изображение сверх 100%-ного размера — проявляется пикселизация: отдельные точки превращаются в одноцветные блоки пикселей, границы областей становятся ступенчатыми, и в целом картинка выглядит негладко, некрасиво.

Если же увеличить векторное изображение — все его детали останутся чёткими, то есть их видимое разрешение не уменьшится. Поэтому svg-картинки отображаются на самых больших разрешениях без потери качества — и просто идеальны для адаптивных сайтов.

У svg-графики есть ещё одно достоинство. Её можно открывать как HTML или CSS и менять в любом редакторе кода, и даже на лету. Подробнее об этом ниже.

И наконец, при прочих равных SVG весит намного меньше растровых изображений.

Недостатки SVG

Их мало. Во-первых, SVG не поддерживается очень старыми браузерами, а во-вторых, не используется для фотографий.

Как подключить SVG к html-странице

Есть три варианта добавления векторной графики. У каждого свои показания к применению.

Через тег

Здесь всё так же, как и с растровой графикой:

Как вставить svg в html

Тег-обёртка для отображения векторной графики на странице.

Время чтения: 8 мин

Открыть/закрыть навигацию по статье

  1. Кратко
  2. Пример
  3. Как пишется
    1. Контейнер svg
    2. Обводка stroke
    3. Заливка fill
    1. background-image
    2. Вставка в HTML
    1. Учебные руководства
    2. Документация MDM Web Docs
    1. Алёна Батицкая советует

    Контрибьюторы:

    • Светлана Коробцева ,
    • Сергей Большаков

    Обновлено 8 сентября 2022

    Кратко

    Скопировать ссылку «Кратко» Скопировано

    SVG — векторный формат графики, доступный в вебе. Формат основан на технологии XML.

    До появления SVG мы могли использовать только растровые изображения: форматы JPG, PNG. Но растровые изображения имеют ряд недостатков:

    • Растровые изображения плохо поддаются масштабированию. Это стало особенно актуальным с появлением ретина экранов.
    • Растровые изображения, как правило, весят существенно больше, чем их svg-собратья.
    • Растровые изображения можно редактировать только при помощи графических редакторов, в то время как svg-изображения представляют собой читаемый код.
    • Растровые изображения статичны. SVG внутри себя может содержать CSS-стили или JS-скрипты.

    Пример

    Скопировать ссылку «Пример» Скопировано

    Для сравнения посмотрим на PNG и SVG версии одного и того же изображения:

    Увеличенное в масштабе png-изображение

    Как вы видите, второй вариант выглядит великолепно в отличие от первого. Это нам на руку при работе с адаптивными сайтами и с сайтами, которые должны круто смотреться на экранах с повышенной плотностью пикселей (так называемые ретина-экраны).

    Заглянем в исходный код svg-картинки:

      xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 24 24">  d block-code__original-line"> 114.001.001A2 2 0 0117 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 0110 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 013 12z" />  svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 24 24" > path d="M16 12a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 0117 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 0110 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 013 12z" /> svg>      

    Не пугайтесь большому количеству странных цифр. Это описание координат каждой из точек изображения. Если вам нет необходимости редактировать SVG, то не обязательно понимать эти цифры.

    Как пишется

    Скопировать ссылку «Как пишется» Скопировано

    Чаще всего svg-иконки или изображения вам будет предоставлять дизайнер или вы сможете найти их на различных стоках:

    Вам редко придётся писать или менять файл с SVG руками, поэтому тут мы рассмотрим только те обязательные части, с которыми вы должны будете взаимодействовать при необходимости.

    Контейнер svg

    Скопировать ссылку «Контейнер svg» Скопировано

    SVG не может быть записано без оборачивающего парного тега svg . Так браузер поймёт, что читать этот код нужно по особым правилам и отрисует картинку на странице.

    Обводка stroke

    Скопировать ссылку «Обводка stroke» Скопировано

    Мы можем управлять толщиной и цветом линии, которая будет соединять все перечисленные точки svg-изображения. Причём можно задать один общий атрибут stroke для контейнера , а можно задавать его каждому отдельному вложенному элементу, сделав обводку разных частей картинки разного цвета.

    Подробнее об атрибуте stroke

    Заливка fill

    Скопировать ссылку «Заливка fill» Скопировано

    Мы можем задать заливку нарисованной фигуры или оставить её прозрачной, только с обводкой. Если решите залить фигуру, то для этого используйте атрибут fill .

    Подробнее об атрибуте fill

    Как подключать

    Скопировать ссылку «Как подключать» Скопировано

    Есть несколько способов подключения svg-изображения к веб-странице. Каждый из них имеет свои преимущества и недостатки.

    Скопировать ссылку «img» Скопировано

    Самый простой способ — использовать тег и указать путь до svg-картинки в значении атрибута src .

       img class="icon" src="img/svg/dots.svg" alt="dots icon">      

    При таком способе мы можем легко управлять размерами картинки на странице. Но есть и минусы — не получится изменить цвет фона или заливки у самого SVG при помощи CSS.

    background — image

    Скопировать ссылку «background-image» Скопировано

    Если svg-картинка не является контентной, то её без особого труда можно подключить в виде фона для элемента

      Facebook  a href="https://facebook.com" class="icon fb"> Facebook a>      
     .icon  display: block; width: 28px; height: 28px; background-repeat: no-repeat; background-position: center; background-size: contain;> .fb  background-image: url(../img/svg/fb.svg);> .icon  display: block; width: 28px; height: 28px; background-repeat: no-repeat; background-position: center; background-size: contain; > .fb  background-image: url(../img/svg/fb.svg); >      

    В этом случае мы также не имеем возможности управлять стилями SVG через CSS.

    Вставка в HTML

    Скопировать ссылку «Вставка в HTML» Скопировано

    Код SVG можно вставить прямо в HTML-разметку станицы.

        xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 24 24" >  d block-code__original-line"> 114.001.001A2 2 0 0117 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 0110 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 013 12z" />   div class="dots"> svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 24 24" class="dots-icon" > path d="M16 12a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 0117 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 0110 12zm-8 0a3.001 3.001 0 016 0 3.001 3.001 0 01-6 0zm1 0a2 2 0 114.001.001A2 2 0 013 12z" /> svg> div>      

    При таком способе подключения мы можем управлять стилями SVG через стили. Это даёт возможность даже анимировать векторное изображение! ��

     .dots-icon  animation: animation 3s infinite alternate;> @keyframes animation  from  fill: red; > to  fill: green; >> .dots-icon  animation: animation 3s infinite alternate; > @keyframes animation  from  fill: red; > to  fill: green; > >      

    Неприятная особенность: если одна и та же SVG-картинка используется в нескольких местах на сайте, и в какой-то момент вы захотите в ней что-то изменить, то нужно будет найти все вставки и вносить исправления в код. При вставке SVG при помощи или background — image достаточно будет внести изменения в svg-файл и правки применяться ко всем картинкам.

    Атрибуты

    Скопировать ссылку «Атрибуты» Скопировано

    • fill — отвечает за заливку фигуры. Может использоваться как для всего контейнера svg , так и для отдельных частей. Более подробно тут → fill.
    • stroke — отвечает за обводку фигуры. Может использоваться как для всего контейнера svg , так и для отдельных частей. Более подробно тут → stroke.
    • view Box — атрибут, отвечающий за размеры окна отображения. Значением будет 4 цифры: min — x , min — y , width и height . В примере выше у контейнера svg указано следующее view Box = «0 0 24 24» . Значит окно отображения будет начинаться в координатах 0 по оси x и 0 по оси y, а по ширине и высоте будет 24 пикселя. Может указываться как для отдельных элементов, так и для всего контейнера. При помощи этого атрибута можно кадрировать изображение, указывая нужные значения.
    • width и height — атрибуты, указывающие размеры svg-элемента. Значением может быть число без указания единиц измерения, тогда браузер будет воспринимать его как пиксели: width = «100» height = «100» . Можно указать в процентах: width = «100 % » height = «100 % » . Могут указываться как оба сразу, так и по отдельности. Если планируете вставлять SVG в HTML кодом, то отдайте предпочтение атрибуту view Box вместо указания ширины и высоты. Тогда при изменении размеров через CSS картинка будет подстраиваться под размеры с сохранением пропорций.
    • preserve Aspect Ratio — атрибут, значение которого указывает браузеру нужно ли сохранять пропорции при масштабировании изображения. Если значение отличается от none , то состоит из двух частей: первая отвечает за выравнивания, вторая отвечает за пропорции.

    Значения для выравнивания:

    • x Min Y Min , x Mid Y Mid , x Max Y Max — выравнивает изображение по левому верхнему углу, по центру по обеим осям или по правому нижнему углу.

    Значения для обрезки:

    • meet — картинка стремиться уместиться целиком с сохранением пропорций. Чем-то похоже на поведение background — size : contain для фона.
    • slice — изображение пытается заполнить собой всё доступное пространство. Похоже на background — size : cover .

    Подсказки

    Скопировать ссылку «Подсказки» Скопировано

    �� Если захотите внести какие-то сложные правки в SVG, а дизайнера под рукой нет, то можно использовать SVG-Edit, SVG-Edit Online, inkscape или Adobe Illustrator.

    �� Всегда перед использованием SVG в проекте прогоняйте его через оптимизатор SVGO. Он удалит всё ненужное, код станет приятнее и будет меньше весить.

    �� С SVG можно взаимодействовать при помощи JavaScript ��

    Документация и руководство по SVG

    Скопировать ссылку «Документация и руководство по SVG» Скопировано

    Учебные руководства

    Скопировать ссылку «Учебные руководства» Скопировано

    • Перевод руководства от MDM Web Docs — SVG — учебное руководство;
    • Руководство от W3C с отличными иллюстрациями — An SVG Primer for Today’s Browsers..

    Документация MDM Web Docs

    Скопировать ссылку «Документация MDM Web Docs» Скопировано

    • Справочник SVG элементов;
    • Справочник SVG атрибутов;
    • Общий список ссылок на ресурсы по SVG от MDM Web Docs SVG. Документация MDM Web Docs.

    На практике

    Скопировать ссылку «На практике» Скопировано

    Алёна Батицкая советует

    Скопировать ссылку «Алёна Батицкая советует» Скопировано

    �� В русскоязычном вебе, пожалуй, нет никого, кто знал бы о формате SVG лучше, чем Йоксель. Очень советую заглянуть на её сайт и изучить подборку полезных ссылок, а также её материалы по этой теме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *