SVG

Параметры области просмотра в SVG-документе

Проанализируйте параметры ViewBox в SVG-документе.

Бесплатный лимит - 1,00 МБ. Свыше лимита - 50 ₽.

Координаты
и пропорции

Показывает значения viewBox, ширину, высоту и соотношение сторон SVG.

SVG
ViewBox
Превью

Разбор области просмотра

Загрузите SVG-файл, чтобы увидеть viewBox, размеры и пропорции области.

Результат
—
После обработки здесь появится результат.

Параметры области просмотра в SVG-документе определяют геометрические границы и начальную точку отсчета, внутри которых отрисовывается векторная графика. Онлайн-инструмент Qivrora предназначен для быстрого анализа разметки: он выполняет просмотр значений атрибута viewBox и проводит точную оценку размеров области SVG. На вход подается исходный код или векторный файл. В результате обработки пользователь получает наглядную раскладку координат и линейных габаритов видимого холста.

Согласно спецификациям W3C (SVG 1.1 и SVG 2), атрибут viewBox выступает базовым механизмом задания внутренней пользовательской системы координат, называемой user space, для всего векторного документа. Эта система создает виртуальную сетку, к которой привязаны все геометрические примитивы, контуры и текстовые элементы внутри файла, независимо от физических размеров экрана или контейнера на веб-странице.

Проверка значений viewBox требуется при верстке адаптивных интерфейсов, сборке иконочных спрайтов и устранении проблем с некорректным кадрированием графики. Если координаты области просмотра заданы с ошибкой, часть векторного рисунка может оказаться за пределами видимой зоны или получить нежелательные пустые отступы по краям. Инструмент извлекает числовые данные напрямую из структуры документа и позволяет сразу сопоставить заявленные габариты холста с параметрами отображения.

Анализ SVG ViewBox

Синтаксис и структура параметров атрибута viewBox

Атрибут viewBox задается непосредственно в открывающем корневом теге <svg> , а также может применяться внутри вложенных структурных контейнеров, таких как <symbol> и <view> . Важная синтаксическая деталь - чувствительность к регистру символов: в стандарте XML-разметки атрибут должен записываться строго с заглавной буквой «B» (camelCase). Написание в нижнем регистре ( viewbox ) в изолированных векторных файлах может игнорироваться парсерами некоторых графических движков.

Значение атрибута представляет собой текстовую строку, содержащую строгую последовательность из четырех чисел типа <number> : min-x (в технической документации и DOM-свойствах также обозначается как minX ), min-y ( minY ), width и height . Числа разделяются пробелами, запятыми или их комбинацией (например, запятой с последующим пробелом). В качестве значений допускаются целые числа, десятичные дроби (разделителем целой и дробной части всегда служит точка) и экспоненциальная запись, но без указания каких-либо единиц измерения, таких как px или % .

<svg viewBox="0 0 240 120" xmlns="http://www.w3.org/2000/svg">
  <!-- Векторные элементы -->
</svg>

Каждый из четырех числовых аргументов отвечает за отдельную геометрическую характеристику области просмотра:

Позиция и параметр Техническое обозначение Физический смысл в координатной сетке Допустимые значения
1. min-x ( minX ) X offset Горизонтальная координата верхнего левого угла области просмотра. Определяет смещение координатной сетки (offsets) по оси абсцисс. Любое число типа <number> (положительное, отрицательное, 0).
2. min-y ( minY ) Y offset Вертикальная координата верхнего левого угла области просмотра. Определяет смещение координатной сетки по оси ординат. Любое число типа <number> (положительное, отрицательное, 0).
3. width Ширина Линейный размер видимой области по горизонтали, выраженный в пользовательских единицах (user units). Строго положительное число (> 0) для отображения; 0 блокирует рендеринг; отрицательные значения недопустимы.
4. height Высота Линейный размер видимой области по вертикали, выраженный в пользовательских единицах (user units). Строго положительное число (> 0) для отображения; 0 блокирует рендеринг; отрицательные значения недопустимы.

Координаты смещения и линейные габариты

Первая пара чисел - min-x и min-y - фиксирует начальную точку отсчета видимого прямоугольника. Эти параметры работают как горизонтальное и вертикальное смещение (X offset и Y offset), указывая, в какой именно точке пространства user space находится верхний левый угол кадра. В большинстве базовых иконок и иллюстраций эти параметры равны 0 0 , что совмещает начало области просмотра с началом координат самого холста. Однако при экспорте из сложных макетов или при работе с нестандартным позиционированием min-x и min-y часто принимают дробные или отрицательные значения.

Вторая пара параметров - width (ширина) и height (высота) - задает протяженность области просмотра вправо от точки min-x и вниз от точки min-y . Эти линейные размеры измеряются исключительно в абстрактных пользовательских единицах (user units). Таким образом, запись viewBox="10 -20 300 150" формирует рабочую зону, которая начинается в координате X = 10, Y = -20 и простирается на 300 единиц по ширине (до координаты X = 310) и на 150 единиц по высоте (до координаты Y = 130).

Ограничения и пограничные состояния

При проверке исходного кода векторного документа особое внимание уделяется валидности третьей и четвертой позиций в списке аргументов. Для параметров width и height действуют строгие правила обработки:

  • Отрицательные значения для ширины или высоты (например, viewBox="0 0 -100 100" ) являются синтаксической ошибкой. В соответствии со спецификацией, атрибут с отрицательным линейным размером признается недействительным и не применяется к документу.
  • Значение, равное нулю ( width="0" или height="0" ), не считается синтаксической ошибкой, но приводит к полной блокировке рендеринга элемента и всего его вложенного содержимого. Поскольку площадь видимой зоны при умножении на ноль исчезает, графический движок прекращает отрисовку ветки документа.

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

Соотношение пользовательской системы координат и области Viewport

Оценка размеров векторного документа неразрывно связана с сопоставлением двух независимых пространственных систем: внешней области отображения (SVG viewport) и внутренней координатной сетки, формируемой через viewBox (user space). Если внутренняя система отвечает за логическую компоновку объектов на бесконечном холсте (SVG canvas), то viewport представляет собой прямоугольное окно в браузере, через которое пользователь видит итоговое изображение.

Габариты области viewport задаются непосредственно в атрибутах width и height самого тега <svg> либо переопределяются внешними правилами CSS. Эти размеры (dimensions) могут указываться как в абсолютных единицах измерения (пикселях px , пунктах pt , сантиметрах cm , миллиметрах mm ), так и в относительных величинах (процентах % , единицах шрифта em , rem или единицах окна браузера vw , vh ). В отличие от них, пространство viewBox оперирует только безразмерными пользовательскими единицами (user units), которые обретают физический размер на экране только после проекции на конкретный viewport.

Перевод пользовательских единиц в экранные величины

Взаимодействие между SVG-холстом и внешним контейнером строится на динамическом пересчете координат. Когда атрибут viewBox отсутствует в разметке, действует базовое правило прямого соответствия: одна пользовательская единица (user unit) приравнивается к одной единице верхнего уровня - обычно к одному CSS-пикселю окна отображения.

При наличии viewBox жесткая привязка 1:1 разрывается. Координатные границы (coordinate boundaries), заданные параметрами внутренней ширины и высоты, натягиваются на доступную площадь окна viewport. В результате вес одной пользовательской единицы в пикселях становится переменной величиной, зависящей от соотношения габаритов контейнера и параметров внутренней сетки. Если размеры контейнера заданы в процентах, физический эквивалент каждого user unit пересчитывается при любом изменении ширины или высоты родительского HTML-блока.

Различия между внешним окном отображения и внутренним пространством документа наглядно проявляются при сравнении их базовых характеристик:

Характеристика Область отображения (SVG viewport) Внутреннее пространство (viewBox / user space)
Способ объявления в коде Атрибуты width и height элемента <svg> или свойства CSS Третий и четвертый параметры внутри строки атрибута viewBox
Используемые единицы измерения Абсолютные ( px , mm , in ) и относительные ( % , em , vw ) Абстрактные безразмерные пользовательские единицы (user units)
Роль в отображении графики Определяет реальное место, занимаемое картинкой на веб-странице Задает внутренний масштаб и границы видимого участка SVG-холста
Зависимость от внешней верстки Может изменяться при ресайзе окна браузера или смене стилей контейнера Остается фиксированным в коде документа независимо от размера экрана

Математический принцип вычисления коэффициента масштабирования

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

В базовом сценарии, когда пропорции внешнего окна и внутренней области совпадают, математический расчет коэффициента масштабирования выполняется путем деления линейных размеров viewport (приведенных к пикселям) на соответствующие значения из viewBox :

  • Горизонтальный коэффициент масштабирования: scaleX = viewportWidth / viewBoxWidth .
  • Вертикальный коэффициент масштабирования: scaleY = viewportHeight / viewBoxHeight .

Полученный результат применяется ко всем геометрическим свойствам вложенных элементов. Например, если для тега <svg> задана ширина width="400px" и высота height="200px" , а атрибут области просмотра имеет вид viewBox="0 0 100 50" , расчет покажет четырехкратное увеличение по обеим осям: 400 / 100 = 4 и 200 / 50 = 4 . При таком коэффициенте (scale = 4) каждая внутренняя пользовательская единица займет на экране ровно 4 пикселя.

Такой расчет позволяет точно определить реальные экранные габариты любой внутренней фигуры до ее отрисовки: линия длиной 25 пользовательских единиц при коэффициенте 4 растянется на 100 пикселей, а при обратной ситуации (например, при viewportWidth = 100px и viewBoxWidth = 400 , где scale = 0.25 ) сожмется до 6.25 пикселя. Понимание этой математической пропорции дает возможность контролировать четкость линий, предсказывать поведение векторной графики в адаптивных сетках и избегать размытия при дробных коэффициентах трансформации.

Оценка размеров и пропорций с учетом preserveAspectRatio

В реальных условиях верстки соотношение сторон ( aspect ratio ) заданного окна отображения практически никогда не совпадает с пропорциями внутренней сетки viewBox . Когда значения горизонтального ( scaleX ) и вертикального ( scaleY ) коэффициентов масштабирования различаются, возникает геометрический конфликт: браузеру необходимо решить, растягивать ли векторную графику непропорционально или сохранить исходные пропорции элементов, компенсировав разницу пустыми полями либо обрезкой краев.

Для управления этим поведением используется атрибут preserveAspectRatio , который указывается в том же теге, что и viewBox . Если этот атрибут явно не прописан в разметке, к документу применяется стандартное значение по умолчанию: xMidYMid meet . Оно гарантирует, что внутренняя область просмотра будет полностью вписана в границы viewport без искажения геометрии и отцентрирована по обеим осям.

Синтаксис и структура атрибута

Полная запись атрибута для сохранения пропорций состоит из двух параметров, разделенных пробелом: preserveAspectRatio="<align> [<meetOrSlice>]" . Исключением является ключевое слово none , которое используется самостоятельно и полностью отключает сохранение пропорций.

Модификаторы масштабирования определяют выбор единого коэффициента трансформации из двух разных значений ( scaleX и scaleY ) или отказ от синхронизации осей:

  • meet (используется по умолчанию) - выбирает меньший из двух расчетных коэффициентов: scale = min(scaleX, scaleY) . Вся область viewBox гарантированно помещается внутрь viewport . Если пропорции не совпадают, вдоль одной из осей образуется свободное пространство, но ни один участок координатной сетки не обрезается.
  • slice - выбирает больший из двух коэффициентов: scale = max(scaleX, scaleY) . Векторный холст масштабируется так, чтобы полностью перекрыть окно отображения без пустых полей. Часть пространства viewBox , выходящая за габариты контейнера по второй оси, отсекается и становится невидимой.
  • none - принудительно отключает выравнивание пропорций. Горизонтальная ось трансформируется по коэффициенту scaleX , а вертикальная - независимо по scaleY . Внутренняя область заполняет viewport целиком, но все фигуры непропорционально сжимаются или растягиваются.

Для наглядного сравнения механики расчета возьмем контейнер viewport размером 400 на 200 пикселей (соотношение 2:1) и квадратную область viewBox="0 0 100 100" (соотношение 1:1). Расчет по осям дает разные коэффициенты: scaleX = 400 / 100 = 4 и scaleY = 200 / 100 = 2 . Итоговые габариты проекции напрямую зависят от выбранного модификатора:

  • При значении meet берется меньший множитель ( scale = 2 ). Область viewBox отрисуется на экране как квадрат 200 на 200 пикселей, оставив 200 пикселей свободного места по ширине контейнера.
  • При значении slice берется больший множитель ( scale = 4 ). Квадратная сетка масштабируется до размеров 400 на 400 пикселей, полностью закрывая ширину окна, при этом 200 пикселей по высоте (100 пользовательских единиц) окажутся за пределами видимой зоны.
  • При значении none коэффициенты 4 и 2 применятся одновременно к своим осям: квадрат превратится в прямоугольник 400 на 200 пикселей.

Параметры выравнивания координатной сетки

Поскольку режимы meet и slice при несовпадении пропорций создают разницу между размерами отмасштабированного viewBox и границами viewport , возникает необходимость позиционирования сетки. За это отвечает параметр <align> , который склеивается из двух указателей - для оси X ( xMin , xMid , xMax ) и для оси Y ( yMin , yMid , yMax ).

Логика работы ключевых слов привязана к совмещению границ двух пространств:

  • xMin и yMin - прижимают левый или верхний край viewBox к соответствующему краю viewport .
  • xMid и yMid - совмещают центральные точки области просмотра и окна отображения по горизонтали или вертикали.
  • xMax и yMax - прижимают правый или нижний край внутренней сетки к правой или нижней границе контейнера.

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

Значение align Позиционирование по оси X Позиционирование по оси Y Поведение при модификаторе meet Поведение при модификаторе slice
xMinYMin По левому краю По верхнему краю Свободное поле остается справа или снизу Отсекается правая или нижняя часть сетки
xMidYMin По центру По верхнему краю Поля равномерно по бокам или снизу Обрезка равномерно слева и справа либо снизу
xMaxYMin По правому краю По верхнему краю Свободное поле остается слева или снизу Отсекается левая или нижняя часть сетки
xMinYMid По левому краю По центру Свободное поле справа или равномерно сверху и снизу Обрезка справа либо равномерно сверху и снизу
xMidYMid По центру По центру Равномерные поля по бокам или сверху и снизу Равномерная обрезка краев с двух противоположных сторон
xMaxYMid По правому краю По центру Свободное поле слева или равномерно сверху и снизу Обрезка слева либо равномерно сверху и снизу
xMinYMax По левому краю По нижнему краю Свободное поле остается справа или сверху Отсекается правая или верхняя часть сетки
xMidYMax По центру По нижнему краю Поля равномерно по бокам или сверху Обрезка равномерно по бокам либо сверху
xMaxYMax По правому краю По нижнему краю Свободное поле остается слева или сверху Отсекается левая или верхняя часть сетки

Оценка пропорций с учетом этих параметров применяется при верстке адаптивных фонов, баннеров и сложных интерфейсных компонентов. Например, комбинация xMidYMid slice позволяет векторной иллюстрации работать аналогично CSS-свойству background-size: cover , удерживая композиционный центр в фокусе при любых изменениях ширины экрана, а настройка xMinYMid meet фиксирует логотип строго по левому краю шапки сайта, даже если родительский блок SVG растянут на несколько колонок сетки.

Влияние значений viewBox на кадрирование и отображение элементов разметки

Конфигурация четырех параметров viewBox напрямую определяет, какая именно часть векторного холста попадет в итоговую область рендеринга и как при этом визуально трансформируются дочерние узлы SVG-дерева. Сами геометрические примитивы - <path> , <rect> , <circle> , <ellipse> , <line> , <polyline> и <polygon> - сохраняют свои исходные координаты и размеры в разметке неизменными. Меняется положение и габариты рамки, через которую браузер проецирует эти фигуры на экран. Любая корректировка чисел в viewBox вызывает визуальный сдвиг, масштабирование или обрезку не только заливки фигур, но и их контуров, заданных через свойство stroke-width .

Поскольку толщина обводки stroke-width откладывается в обе стороны от математического пути контура (по 50% внутрь и наружу от линии координат), изменение масштаба области просмотра пропорционально меняет и видимую толщину линий. Если границы примитива проходят вплотную к краям заданного viewBox , внешняя половина обводки оказывается за пределами видимой зоны и отсекается при рендеринге.

Панорамирование холста через смещение координат min-x и min-y

Изменение первых двух параметров атрибута реализует эффект панорамирования - плоскостного сдвига векторного холста относительно неподвижного окна отображения. Механика этого процесса часто кажется обратной интуитивному восприятию, поскольку значения min-x и min-y смещают саму рамку захвата по координатной сетке, а не отдельные графические объекты внутри нее.

Направление визуального сдвига элементов разметки напрямую зависит от знака (положительного или отрицательного), присвоенного начальным координатам:

  • Положительные значения min-x смещают область захвата вправо по оси X, в результате чего все элементы внутри SVG визуально сдвигаются влево.
  • Положительные значения min-y опускают рамку области просмотра вниз по оси Y, заставляя графику на экране подниматься вверх.
  • Отрицательные значения min-x уводят начало координат области просмотра влево от нуля, благодаря чему фигуры на холсте смещаются вправо, а слева от них образуется свободное пространство.
  • Отрицательные значения min-y сдвигают границу захвата вверх в отрицательную плоскость оси Y, что визуально опускает векторные объекты вниз.

Для наглядности можно рассмотреть элемент <circle cx="50" cy="50" r="40" /> , который идеально центрирован при стандартной настройке viewBox="0 0 100 100" . Если изменить параметры на viewBox="25 25 100 100" , верхний левый угол области просмотра переместится в точку (25, 25). Сам круг останется на прежних координатах (50, 50), но относительно нового положения рамки он окажется смещенным в левый верхний угол. При установке отрицательных значений, например viewBox="-25 -25 100 100" , тот же круг визуально сдвинется в правый нижний сектор, так как захватываемая область начнется за 25 единиц до нулевой отметки сетки.

Зуммирование, кадрирование и внутренние отступы при изменении width и height

Вторая пара параметров ( width и height в составе viewBox ) управляет охватом координатного пространства по горизонтали и вертикали. Соотношение этих двух чисел с фактическими габаритами векторных фигур создает эффекты приближения или отдаления (magnification), жесткого кадрирования (обрезки по границам) либо формирования пустых полей (padding) вокруг изображения.

Зависимость между числовыми значениями размеров области просмотра и визуальным отображением дочерних элементов подчиняется обратной пропорции: чем меньше участок пользовательской сетки, который захватывается рамкой viewBox и растягивается на весь контейнер, тем крупнее выглядят попавшие в него примитивы. Напротив, захват обширной координатной зоны приводит к визуальному уменьшению объектов, так как в прежнюю площадь экрана приходится вмещать большее количество пользовательских единиц.

В таблице ниже показано, как различные конфигурации параметров viewBox трансформируют отображение эталонного прямоугольника <rect x="0" y="0" width="100" height="100" stroke-width="4" /> при фиксированном размере окна отображения 200 на 200 пикселей.

Значение атрибута viewBox Математическое изменение области захвата Визуальный эффект (magnification, padding, кадрирование) Поведение примитивов и контуров stroke-width
0 0 100 100 Границы области точно совпадают с координатами фигуры Базовый масштаб отображения (увеличение 2x относительно сетки) Прямоугольник занимает всю площадь, но внешняя половина обводки (2 единицы из 4) отсекается по периметру
0 0 50 50 Уменьшение линейных размеров области просмотра в 2 раза Приближение (zoom in / magnification) и жесткое кадрирование В окне видна только левая верхняя четверть фигуры, увеличенная в 4 раза; правая и нижняя части полностью обрезаны
0 0 200 200 Увеличение размеров области просмотра в 2 раза относительно габаритов графики Отдаление (zoom out) и появление свободного поля справа и снизу Фигура визуально уменьшается вдвое и занимает левый верхний квадрант; правый и нижний края контура видны целиком
-10 -10 120 120 Сдвиг начальных координат в отрицательную зону и расширение области на 20 единиц Равномерные внутренние отступы (padding) по 10 единиц со всех сторон Незначительное уменьшение масштаба фигуры; вся толщина stroke-width полностью помещается внутри видимой зоны без обрезки
25 25 50 50 Комбинация положительного сдвига и уменьшенного охвата по ширине и высоте Фокусное кадрирование центральной части с двукратным приближением Все края прямоугольника и его контуры отсечены, весь экран заполнен только внутренним фрагментом заливки

Формирование внутренних отступов (padding) за счет одновременного уменьшения min-x / min-y и увеличения width / height является стандартным приемом при подготовке векторной графики. Чтобы добавить симметричное поле шириной P единиц вокруг объекта, начальные координаты уменьшают на величину P , а к ширине и высоте области прибавляют удвоенное значение 2P . Такой пересчет расширяет видимую зону равномерно во всех четырех направлениях, предотвращая нежелательное кадрирование выступающих углов у <polygon> или <polyline> , а также широких обводок у любых примитивов.

Практические сценарии анализа параметров области просмотра

Просмотр значений viewBox и оценка размеров области SVG необходимы при интеграции векторных файлов в пользовательские интерфейсы, сборке иконочных систем и отладке верстки. Визуальные дефекты рендеринга часто связаны не с ошибками в геометрии контуров, а с рассинхронизацией координатных границ (coordinate boundaries) и фактических габаритов фигур.

Диагностика обрезанных краев и учет толщины обводки

Распространенный дефект при экспорте иконок из графических редакторов - усечение внешних контуров по периметру области просмотра. В спецификации SVG линия обводки ( stroke ) откладывается симметрично в обе стороны от математического пути ( <path> ) или границы геометрического примитива. Половина значения stroke-width уходит внутрь фигуры, а вторая половина - наружу.

Если опорные точки фигуры лежат точно на границе coordinate boundaries , внешняя половина контура выходит за пределы видимой зоны и отсекается. Например, при размещении окружности с центром в точке (12, 12) и радиусом 12 внутри области viewBox="0 0 24 24" добавление обводки stroke-width="2" приведет к тому, что реальные габариты объекта составят 26×26 единиц (от -1 до 25 по обеим осям). В результате верхний, нижний, левый и правый края кольца окажутся плоскими из-за обрезки на 1 единицу с каждой стороны.

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

  • Расширение границ viewBox с учетом половины толщины контура: для обводки в 2 единицы параметры меняют с 0 0 24 24 на -1 -1 26 26 .
  • Сохранение исходного viewBox="0 0 24 24" с уменьшением радиуса самой окружности до 11 единиц, чтобы внешний край обводки точно вписался в лимит 24×24 .

Проверка координатной сетки при сборке SVG-спрайтов

При объединении множества иконок в единый SVG-спрайт каждый отдельный векторный объект оборачивается в контейнер <symbol> с собственным уникальным идентификатором id , а вывод графики на страницу осуществляется через тег <use> . Корректное отображение элементов спрайта напрямую зависит от того, задан ли атрибут viewBox для каждого отдельного <symbol> .

<svg style="display: none;">
  <symbol id="icon-search" viewBox="0 0 24 24">
    <circle cx="11" cy="11" r="8" stroke-width="2"/>
    <line x1="21" y1="21" x2="16.65" y2="16.65" stroke-width="2"/>
  </symbol>
</svg>

<svg width="32" height="32">
  <use href="#icon-search"></use>
</svg>

В процессе аудита спрайтов проверка значений viewBox решает следующие прикладные задачи:

  • Стандартизация базовой сетки иконок: если часть символов в наборе имеет область 0 0 16 16 , а другая часть - 0 0 24 24 или 0 0 512 512 , при вставке через <use> в однотипные контейнеры визуальная плотность деталей и толщина линий без масштабируемой обводки будут различаться.
  • Устранение конфликтов вложенных координат: если у тега <symbol> пропущен собственный viewBox , браузер использует систему координат внешнего контейнера <svg> , внутри которого находится <use> . Это приводит к непредсказуемому смещению или кадрированию иконки при попытке изменить размеры внешнего окна отображения.
  • Выявление смещенных артбордов: при экспорте из многостраничных макетов в атрибут viewBox символа могут попасть глобальные координаты монтажной области (например, viewBox="1240 850 24 24" ). Хотя сама графика при этом отображается, редактировать или анимировать дочерние элементы внутри такой смещенной сетки неудобно.

Отладка адаптивной верстки и inline SVG

При внедрении векторной графики непосредственно в HTML-код страницы (inline SVG) для создания адаптивного поведения (responsive SVG) у корневого тега <svg> часто удаляют жестко заданные атрибуты width и height . В этом случае управление габаритами передается таблицам стилей CSS, а элемент масштабируется относительно родительского HTML-блока. Чтобы браузер мог вычислить высоту элемента пропорционально его ширине, в разметке обязательно должен присутствовать корректный viewBox .

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

Наблюдаемая проблема в верстке Причина в параметрах SVG Способ устранения в разметке
Изображение не масштабируется через CSS и сохраняет фиксированный размер Отсутствует атрибут viewBox , при этом заданы жесткие width и height в пикселях Добавить viewBox="0 0 W H" со значениями исходной ширины и высоты, после чего удалить атрибуты width и height или задать их через CSS
Контейнер <svg> схлопывается по высоте или растягивается на стандартные 300×150 пикселей Атрибуты width , height и viewBox полностью отсутствуют в корневом теге Определить фактические габариты внутренней графики и прописать их в атрибут viewBox
Вокруг логотипа или иконки появляются пустые поля, мешающие выравниванию по сетке Значения width и height в viewBox значительно превышают реальный размер векторных фигур Скорректировать все четыре параметра viewBox по границам фактического контура объекта

Сверка заявленной области с фактической рамкой getBBox

Заявленные в атрибуте viewBox размеры не всегда совпадают с пространством, которое реально занимают векторные примитивы. Внутри документа могут оставаться пустые поля, скрытые декоративные слои или смещенные группы элементов. В объектной модели документа (DOM) для определения истинных границ содержимого используется интерфейс SVGGraphicsElement и его встроенный метод getBBox() .

Вызов element.getBBox() в браузерной среде возвращает объект DOMRect с четырьмя свойствами: x , y , width и height . Эти числа описывают ограничивающую рамку (bounding box) - минимальный прямоугольник в пользовательской системе координат, в который полностью помещаются все дочерние геометрические фигуры элемента.

Сравнение параметров текущего viewBox со значениями ограничивающей рамки bounding box применяется для точной подгонки холста под графику (плотного кадрирования):

  • Если viewBox равен 0 0 500 500 , а метод getBBox() для корневой группы элементов возвращает { x: 120, y: 80, width: 260, height: 140 } , то вокруг изображения присутствует избыточное пустое пространство. Замена атрибута на viewBox="120 80 260 140" полностью уберет пустые поля без необходимости пересчитывать координаты каждого отдельного тега <path> .
  • По спецификации SVG метод getBBox() вычисляет габариты исключительно по математическим центрам контуров и геометрии заливки, игнорируя толщину обводки ( stroke-width ), внешние маркеры и фильтры размытия. Поэтому при выравнивании viewBox строго по значениям getBBox() к полученным координатам необходимо вручную добавить отступ, равный половине максимальной толщины обводки крайних элементов.

Нужен другой
инструмент для SVG?

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

Все инструменты изображений