SVG — е векторен формат за изображения, базиран на XML, разработен от консорциума W3C. За разлика от растерните формати JPEG и PNG, SVG съхранява математическо описание на фигури: линии, криви, окръжности и текст. Това позволява мащабиране на изображението до всякакъв размер без загуба на качество. Според MDN Web Docs, 2025, SVG се поддържа от всички съвременни браузъри и се използва за икони, илюстрации, анимации и графики. В уеб разработката SVG се превърна в стандарт за адаптивни интерфейси благодарение на малкия си размер и възможността за стилизиране чрез CSS.
Основни
SVG — формат за векторна графика, базиран на XML, който се появява през 2001 г. като препоръка на W3C. За разлика от растерните формати, SVG описва изображението чрез геометрични примитиви: точки, линии, криви и многоъгълници. SVG файлът е обикновен текстов XML документ, който може да се чете, редактира и компресира със стандартни инструменти.
Архитектурата на SVG включва няколко ключови концепции. viewBox определя виртуална координатна система, независима от действителните размери на елемента. Например viewBox="0 0 100 100" създава квадратна мрежа 100×100, в която всички координати са фиксирани. При промяна на ширината или височината на контейнера, съдържанието се мащабира пропорционално.
Според W3C SVG 2 Specification, съвременната версия на SVG поддържа градиенти, маски, филтри, текст с произволно позициониране, интерактивност чрез JavaScript и анимация чрез CSS и SMIL. SVG е интегриран в DOM като пълноценен HTML елемент, което позволява програмно управление на всеки графичен примитив.
В мобилната разработка SVG се използва и в iOS чрез UIGraphicsImageRenderer и в Android чрез VectorDrawable — и двата формата конвертират подобни на SVG описания в хардуерно ускорени растери на GPU.
SVG 1.0 става препоръка на W3C през 2001 г., SVG 1.1 през 2003 г., SVG 2.0 е в процес на разработка от 2012 г. Основното нововъведение в SVG 2 е по-дълбока интеграция с CSS, поддръжка на compositing и blending modes, както и възможност за използване на SVG в HTML без namespace префикси.
Въпреки че SVG 2 все още не е достигнал статут на Препоръка, съвременните браузъри вече поддържат по-голямата част от функционалността му. Chrome, Safari, Firefox и Edge имат почти пълна поддръжка на SVG 1.1 и значителна част от SVG 2.
SVG предоставя набор от елементи за описание на двуизмерна графика. Всеки елемент има атрибути, които определят неговата позиция, размер и визуален вид. Атрибутите могат да бъдат зададени като XML атрибути или чрез CSS свойства.
Елементът path — най-мощният и гъвкав SVG елемент. Атрибутът d съдържа последователност от команди: M (moveTo), L (lineTo), C (cubic Bezier curve), Q (quadratic Bezier curve), A (arc), Z (close path). Всяка команда има абсолютна или относителна форма (главна или малка буква).
SVG поддържа и групиране на елементи чрез <g>. Групата наследява визуални атрибути (fill, stroke, transform) на всички дъщерни елементи. Това позволява прилагане на единен стил върху цял набор от фигури и управление на тяхната позиция чрез един transform.
Основната разлика между SVG и растерните формати (JPEG, PNG, WebP) — начинът на съхранение на информация. Растерът съхранява цвета на всеки пиксел в мрежа с фиксиран размер. SVG съхранява математически команди за възпроизвеждане на фигури. Тази разлика определя всички предимства и недостатъци на форматите.
| Характеристика | SVG | Растер (PNG/JPEG) |
|---|---|---|
| Мащабиране | Без загуба на качество | Загуба на качество при увеличение |
| Размер на файл | Малък за прости форми | Зависи от резолюцията |
| Редактиране | Текстово, чрез код | Изисква графичен редактор |
| CSS стилизиране | Пълна поддръжка | Не |
| Анимация | CSS + SMIL | Само GIF или APNG |
| Снимки | Не е подходящо | Идеално |
| Икони/логота | Идеално | Излишно |
| Поддръжка на браузъри | 96%+ | 100% |
Според HTTP Archive, 2025, 68% от уебсайтовете използват SVG за икони, 34% за илюстрации и 22% за логота. Средният размер на SVG икона е 0.5–2 KB, докато растерна икона с подобно качество е 5–20 KB в PNG формат.
За снимки и сложни растерни изображения SVG не е подходящ — размерът на XML описанието ще надвиши размера на еквивалентен JPEG. Препоръчителна област на приложение на SVG: икони, логота, илюстрации, схеми, графики, елементи на интерфейс с адаптивен дизайн.
SVG — оптимален избор за елементи на интерфейса, които трябва да изглеждат остри на Retina екрани и при произволен мащаб на браузъра. Растер — за снимки, сложни текстури и изображения с милиони цветове, където векторното описание би било неоправдано сложно.
Хибриден подход — комбинация от SVG за елементи на интерфейса и WebP/AVIF за фотографско съдържание — дава най-добрия баланс между качество и производителност при зареждане на страницата.
Inline SVG — е вграждане на SVG маркировка директно в HTML документа, а не като отделен файл чрез <img> или background-image. Предимството на inline SVG е, че SVG елементите стават част от DOM и могат да бъдат стилизирани чрез CSS, управлявани чрез JavaScript и анимирани без допълнителни заявки към сървъра.
За разлика от <img src="icon.svg">, където SVG е изолиран в shadow DOM, inline SVG наследява цветовете и шрифтовете на родителския документ. Това позволява, например, промяна на цвета на икона при задържане на мишката чрез CSS псевдоклас :hover без зареждане на отделен файл за всяко състояние.
Според CSS-Tricks, inline SVG е препоръчителният начин за използване на икони в съвременни уеб приложения. CSS свойствата fill, stroke, stroke-width се прилагат директно върху SVG елементи. За персонализиране чрез CSS е важно в оригиналния SVG да не са зададени fill и stroke като inline атрибути — в противен случай CSS не може да ги презапише.
SVG-спрайтовете решават проблема с кеширането: всички икони се събират в един файл, браузърът го зарежда веднъж, а отделните икони се свързват чрез <use> с посочване на id на необходимия елемент вътре в спрайта.
CSS анимация на SVG — най-разпространеният и ефективен начин за анимиране на векторна графика в браузъра. CSS свойства като transform, opacity и fill се прилагат към SVG елементи по същия начин, както към HTML елементи. За анимация по произволен път се използва CSS свойството offset-path.
SMIL (Synchronized Multimedia Integration Language) — вграден в SVG механизъм за анимация, независим от CSS. Елементите <animate>, <animateTransform> и <animateMotion> позволяват анимиране на всякакви SVG атрибути без JavaScript и CSS. SMIL анимацията е гарантирано синхронизирана с честотата на кадрите на браузъра.
Според MDN Web Docs, SMIL се поддържа от всички съвременни браузъри, но CSS анимацията се счита за по-предвидима и ефективна. Основният сценарий за SMIL — анимация на атрибути, които не са достъпни чрез CSS, например d (path) на елемента <path>.
JavaScript + requestAnimationFrame дава максимален контрол върху анимацията на SVG. Уеб разработчиците използват библиотеките GSAP и Anime.js за сложни последователности от анимации с времеви линии и easing функции, които са трудни за реализиране чрез чист CSS.
Първи пример — проста икона на къщичка с използване на основни SVG елементи. Всички фигури са rect и polyline:
<!-- Inline SVG icon -->
<svg viewBox="0 0 100 100" width="48" height="48" xmlns="http://www.w3.org/2000/svg">
<rect x="20" y="50" width="60" height="40" fill="#4A90D9" />
<rect x="35" y="65" width="30" height="25" fill="#fff" />
<polyline points="10,50 50,15 90,50" fill="none" stroke="#4A90D9" stroke-width="6" />
</svg>
Втори пример — анимация на въртене на лоудър чрез CSS. Използва се <circle> с атрибут stroke-dasharray за създаване на прекъснат контур:
<!-- CSS animated spinner -->
<svg class="spinner" viewBox="0 0 50 50" width="40" height="40">
<circle cx="25" cy="25" r="20" fill="none"
stroke="#4A90D9" stroke-width="4"
stroke-dasharray="125.6 31.4" />
</svg>
<style>
.spinner circle {
animation: spin 1.5s linear infinite;
transform-origin: center;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
</style>
Трети пример — анимация на path чрез библиотеката GSAP за плавно рисуване на контур. GSAP работи с атрибута stroke-dashoffset, създавайки ефект на появяване на линия:
// Начертаване на път с GSAP
import gsap from "gsap";
const path = document.querySelector("#myPath");
const length = path.getTotalLength();
gsap.set(path, {
strokeDasharray: length,
strokeDashoffset: length
});
gsap.to(path, {
strokeDashoffset: 0,
duration: 2,
ease: "power2.out"
});
Често задавани въпроси
SVG е формат за изображения, който съхранява не пиксели, а математически фигури: линии, кръгове, правоъгълници и криви. Затова SVG изображение може да се увеличи до всякакъв размер — ще остане ясно. SVG файлът е текстов XML код, който може да се редактира във всеки редактор на код.
SVG заема по-малко място (0.5–2 KB срещу 5–20 KB за PNG), не губи качество на Retina екрани, поддържа анимация и стилизиране чрез CSS. За икони на интерфейса SVG е стандартът. PNG е по-подходящ за снимки и изображения със сложни цветови преходи.
Използвайте inline SVG без атрибути fill в маркировката, след това задайте fill в CSS: svg:hover path { fill: red; }. Ако SVG е свързан чрез <img>, цветът не може да се промени чрез CSS — използвайте inline SVG или SVG-спрайт с <use href="#id">.
viewBox е виртуална координатна система на SVG, независима от действителните размери на елемента. Формат: viewBox="minX minY width height". Например, viewBox="0 0 100 100" създава координатна мрежа 100×100. Всички вътрешни координати се определят спрямо тази мрежа и автоматично се мащабират при промяна на размера на контейнера.
Да. SVG поддържа CSS анимация (keyframes, transition) и SMIL — вграден механизъм за анимация с елементи <animate>, <animateTransform> и <animateMotion>. SMIL позволява анимиране на атрибути, които не са достъпни чрез CSS, например path на елемента <path>.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също