Перейти к содержимому

HTML-тег <svg>

Тег <svg> используется в качестве контейнера для графики SVG.

SVG (Scalable Vector Graphics) — это язык для двумерной графики на основе XML с поддержкой анимации и интерактивности. Для рисования изображений он использует простые геометрические фигуры (круг, линии, полигон и т. д.).

svg example

DANGER

Атрибут xmlns требуется только для внешнего элемента <svg> в автономных SVG-документах. Он не требуется для внутренних элементов <svg> или в HTML-документах.

Синтаксис <svg>

Тег <svg> всегда пишется парами. Содержимое размещается между открывающим (<svg>) и закрывающим (</svg>) тегами.

Пример использования HTML-тега <svg>:

HTML-тег <svg>

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <div style="display:flex; flex-flow:row wrap;">
      <svg width="180" height="180">
        <rect x="20" y="20" rx="20" ry="20" width="100" height="100" style="fill:lightgray; stroke:#1c87c9; stroke-width:4;"/>
      </svg>
      <svg width="200" height="200">
        <circle cx="100" cy="70" r="60" stroke="#1c87c9" stroke-width="4" fill="lightgray"/>
      </svg>
      <svg width="200" height="200">
        <polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lightgray; stroke:#1c87c9; stroke-width:4; fill-rule:evenodd;"/>
      </svg>
    </div>
  </body>
</html>

Пример использования HTML-тега <svg> для рисования эллипса:

Пример использования HTML-тега <svg> для рисования эллипса:

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <svg width="400" height="200">
      <ellipse cx="100" cy="50" rx="100" ry="50" fill="#1c87c9" />
    </svg>
  </body>
</html>

Различия между SVG и Canvas

На первый взгляд, и SVG, и Canvas выполняют одну и ту же задачу — рисуют векторную графику с использованием координатных точек. Однако между ними есть различия. Рассмотрим их.

SVG — это язык описания 2D-графики в формате XML, тогда как Canvas используется для рисования 2D-графики в реальном времени (с помощью JavaScript).

SVG похож на программу «draw». Графика представляет собой набор инструкций для каждой фигуры, и любую часть любой фигуры можно изменить. Графика ориентирована на объекты (фигуры).

Canvas похож на программу «paint». Как только пиксели попадают на экран, рисунок готов. Изменять фигуры можно только перезаписывая их другими пикселями. Графика ориентирована на пиксели.

SVG основан на XML, что означает, что каждый элемент доступен в DOM-дереве SVG. В SVG нарисованная фигура запоминается как объект. В Canvas браузер забывает нарисованную форму сразу же после её отрисовки. Если вам нужно внести изменения в рисунок, его придётся рисовать заново.

Атрибуты

АтрибутЗначениеОписание
baseProfilenone (default), full, basic, tinyОписывает минимальный профиль языка SVG, который, по мнению автора, необходим для корректного отображения содержимого. Не поддерживается после SVG2.
contentScriptTypecontent-typeУказывает язык скриптов по умолчанию для данного фрагмента документа. Не поддерживается после SVG2.
contentStyleTypecontent-typeОпределяет язык таблиц стилей по умолчанию, используемый фрагментом SVG. Не поддерживается после SVG2.
heightlength, percentageОпределяет высоту элемента SVG.
preserveAspectRationone, xMinYMin, xMidYMin, xMaxYMin, xMinYMid, xMidYMid, xMaxYMid, xMinYMax, xMidYMax, xMaxYMax, meet (default), sliceОпределяет, как фрагмент SVG должен деформироваться, если он встроен в контейнер с другим соотношением сторон.
versionnumberОпределяет версию SVG, используемую для внутреннего содержимого элемента. Не поддерживается после SVG2.
viewBoxlist-of-numbersОпределяет границы области просмотра SVG для текущего фрагмента SVG.
widthlength, percentageОпределяет ширину элемента SVG.
xlength, percentageОпределяет координату x контейнера SVG. Не влияет на внешние элементы SVG.
ylength, percentageОпределяет координату y контейнера SVG. Не влияет на внешние элементы SVG.

Практика

Каково назначение тега SVG в HTML?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.