- SVG in HTML
- Embed SVG Directly Into HTML Pages
- Example
- My first SVG
- COLOR PICKER
- Report Error
- Thank You For Helping Us!
- How to Use SVG Images in CSS and HTML – A Tutorial for Beginners
- Why should you use SVG images?
- How to download the SVG image used in this tutorial
- How to use SVG images in CSS and HTML
- 2. How to use SVG as a CSS background-image
- 4. How to use an SVG as an You can also use an HTML element to add SVG images to a webpage using the code syntax below:
You use the data attribute to specify the URL of the resource that you'll use by the object, which is the SVG image in our case.
You use the width and height to specify the size of the SVG image.
Again, below is a demo for you to explore. 😃
Using the is supported across all browsers that support SVG.
5. How to use SVG as an
Even though this isn't advisable, you can also add an SVG image using an as seen in the demo below.
Just keep in mind, though, that s can be difficult to maintain and will be bad for your site's Search Engine Optimization (SEO).
Using also defeats the purpose of the Scalable in the name Scalable Vector Graphics because SVG images added with this format are not scalable.
6. How to use SVG as an
The HTML element is another way to use an SVG image in HTML and CSS using this syntax: .
Keep in mind, however, that this method has limitations, too. According to MDN, most modern browsers have deprecated and removed support for browser plug-ins. This means that relying upon is generally not wise if you want your site to be operable on the average user's browser.
Below is a demo of using the HTML element to add an SVG image.
Conclusion
I hope you were able to learn about the different ways of using SVG images in CSS and HTML. This will hopefully guide you towards choosing the right method when adding SVG images to a website.
If you have any questions, you can send me a message on Twitter, and I'll be happy to answer every single one.
Используем SVG на сайте
Оставим за скобками вопрос о целесообразности использования SVG на сайте. Каждый сам для себя должен определить полезность этой технологии. Тем более что эта тема поднималась уже неоднократно.
Сейчас мы рассмотрим методы встраивания SVG, их плюсы и минусы, а так же возможности манипулирования элементами SVG.
Статья рассчитана в первую очередь на тех, кто до сих пор не использует векторную графику на своих сайтах, но очень хочет быть одной ногой в
будущемнастоящем.
Для любопытных сразу приведу сводную таблицу:Иконочный шрифт IMG, background-image Object Inline CSS Манипуляции Частично 1 Нет Частично 2 Да JS манипуляции Частично 1 Нет Да Да SVG анимации Нет Да Да Да Интерактивные SVG анимации Нет Нет Да Да 1 Можно менять цвет, размер, выравнивание и прочее стили обычного текста
2 Стили должны быть прописаны или в самом SVG файле, или подключены внешним стилем в SVG в начале файла:По правде говоря стили прописанные внутри SVG так же будут работать и при использовании тега IMG или background-image, но в этом нет никакого смысла.
Иконочный шрифт
Плюсы и минусы такого подхода:
+ иконка ведет себя как символ шрифта, и все параметры настраиваются так же через CSS (размер, цвет, выравнивание и прочее);
+ единственный способ работающий в IE 8 без дополнительных манипуляций;
– все элементы SVG файла объединяются в один символ, поэтому управлять им при помощи CSS или JS можно только как единым целым;
– поддерживаются только одноцветные иконки;
– при сбое загрузки шрифта у пользователя либо не отобразятся иконки совсем, либо, при совпадении кодов иконок с символами юникода, отобразятся соответстующие символы.SVG как OBJECT
К сожалению (или к счастью) codepen и jsfiddle блокируют загрузку внешних object в целях безопасности.
Встраивание выглядит следующим образом:Объект встраивает элмемент атрибута data наподобие iframe, добавляя внутрь себя разметку подключаемого файла, поэтому к элементам можно обращаться при помощи JS, но не совсем обычным образом:
Стоит отметить что в CSS стили для SVG элементов отличаются от стандартных, полный список стилей поддерживаемых SVG можно посмотреть тут. SVG ведет себя не как обычное изображение, его нельзя непропорционально трансформировать, задавая ширину и высоту. Объект внутри будет занимать максимальную площадь и центрироваться в контейнере: Но объект можно трансформировать используя CSS например так: IE 8 и ниже не поддерживают SVG от слова «совсем» поэтому, если среди пользователей вашего сайта есть эта специфичная аудитория стоит озаботиться проверкой и заменой svg на растровое изображение. Сделать это можно множеством способов, например используя Modernizr добавлять .no-svg класс для body: Плюсы и минусы такого подхода: + можно использовать внешний CSS файл для управления стилями; + поддерживаются SVG анимации и фильтры; + поддерживаются интерактивные анимации; – для IE 8 и ниже необходима замена на растровое изображение. SVG в IMG или background-image Оба способа встраивания чем-то похожи на встраивание при помощи тэга object, например нельзя менять пропорции изменением ширины и высоты контейнера, но имеют больше ограничений. Подключаемые в SVG внешние стили не будут работать, обратиться к элементам через JS так же не получится. Интерактивные анимации в SVG тоже не сработают. А проблемы с IE 8 и ниже так же остаются. Но SVG анимации будут работать, в обоих случаях. В случае с IMG втраивание выглядит как обычная картинка: В случае с background-image как обычный блок: Так же при помощи background-image можно использовать спрайты, как с png изображениями, а менять размер можно при помощи background-size: background-size: 90px 150px; Учитывая что процент людей c экранами device-pixel-ratio которых выше 1 и их устройства не поддерживают svg стремится к нулю(если такие вообще есть), то можно использовать медиа выражения для подключения svg, только для них, а для остальных использовать png версию: .icon < background-image: url("icon.png"); >@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (-o-device-pixel-ratio: 3/2), only screen and (min-device-pixel-ratio: 1.5) < .icon < background-image: url("icon.svg"); >> Плюсы и минусы этих подходов: + поддерживаются SVG анимации и фильтры; + в случае с background-image можно использовать SVG спрайты; – нельзя менять свойства элементов SVG через CSS или JS; – не поддерживаются интерактивные анимации; – для IE 8 и ниже необходима замена на растровое изображение. Inline SVG В этом варианте SVG код, получить который можно открыв любой SVG файл текстовым документом, встраивается непосредственно в код страницы. Несомненно такая конструкция ухудшает читаемость кода, и увеличивает его объем, но открываются новые возможности. Например имея набор иконок в SVG файле, можно использовать их повторно простой конструкцией вида: где some_svg_element_id id элемента внутри исходного SVG файла. К отдельно взятому элементу можно, например, применять SVG трансформации: Но если внутри исходного SVG к элементу была применена интерактивная анимация, например по клику, как в демо выше, то при дублировании объекта анимация будет срабатывать на всех элементах одновременно. SVG анимации и фильтры это тема для отдельной статьи, поэтому ограничусь лишь примером SVG фильтра (подробнее о SVG фильтрах), и примером SVG анимации (подробнее о SVG анимациях). С обесепечением работоспособности для IE 8 и ниже все несколько сложнее, чем в других вариантах. Необходимо добавить дополнительную разметку: Плюсы и минусы этого подхода: + никакой подгрузки внешних файлов; + доступны манипуляции с элементами SVG через CSS и JS; + поддерживаются SVG анимации и фильтры; + поддерживаются интерактивные анимации; + возможность повторного использования элементов; – загрязняется код страницы; – для IE 8 и ниже необходима дополнительная разметка, и замена на растровое изображение. Заключение Каждый из способов хорош по своему, и в зависимости от обстоятельств можно использовать любой из них. Эта статья в первую очередь мой путь по освоению нюансов SVG, и надеюсь многим она будет так же полезна. P.S. Всем добра и котиков. Источникvar object = document.getElementById("’object’"); //получаем элмент object var svgDocument = object.contentDocument; //получаем svg элемент внутри object var svgElement = svgDocument.getElementById("some_id_in_svg"); //получаем любой элемент внутри svg svgElement.setAttribute("fill", "black"); //меняем атрибуты выбранного элемента
- SVG в IMG или background-image
- Inline SVG
- Заключение
SVG in HTML
You can embed SVG elements directly into your HTML pages.
Embed SVG Directly Into HTML Pages
Here is an example of a simple SVG graphic:
Sorry, your browser does not support inline SVG.
and here is the HTML code:
Example
My first SVG
- An SVG image begins with an
- The width and height attributes of the
- The element is used to draw a circle
- The cx and cy attributes define the x and y coordinates of the center of the circle. If cx and cy are not set, the circle’s center is set to (0, 0)
- The r attribute defines the radius of the circle
- The stroke and stroke-width attributes control how the outline of a shape appears. We set the outline of the circle to a 4px green «border»
- The fill attribute refers to the color inside the circle. We set the fill color to yellow
- The closing tag closes the SVG image
Note: Since SVG is written in XML, all elements must be properly closed!
COLOR PICKER
Report Error
If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:
Thank You For Helping Us!
Your message has been sent to W3Schools.
Top Tutorials
Top References
Top Examples
Get Certified
W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.
How to Use SVG Images in CSS and HTML – A Tutorial for Beginners
SVG stands for Scalable Vector Graphics. It is a unique type of image format for vector-based graphics written in Extensible Markup Language (XML).
In this tutorial, I will explain why you’d want to use SVG images and how you can use them in CSS and HTML.
Why should you use SVG images?
There are a number of reasons to use SVG images, some of which are:
- SVG images do not lose their quality when zoomed or resized.
- They can be created and edited with an IDE or text editor.
- They are accessible and animatable.
- They have a small file size and are highly scalable.
- And they can be searched, indexed, scripted, and compressed.
Now let’s see how you can actually work with SVG images.
How to download the SVG image used in this tutorial
If you want to work with the SVG image I’ve used in this tutorial, follow the steps (and diagram) below to download it.
- Go to unDraw.
- Change the background color to yellow.
- In the search box, search for the word happy.
- Click on the image named Happy news.
- On the pop-up window, click on the Download SVG to your projects button.
If you followed the steps above correctly, the SVG image should be on your computer now.
Now, open the SVG image in your favorite IDE or text editor. Rename it to happy.svg or whatever name you prefer.
How to use SVG images in CSS and HTML
There are several different ways to use SVG images in CSS and HTML. We will explore six different methods in this tutorial.
1. How to use an SVG as an
This method is the simplest way to add SVG images to a webpage. To use this method, add the element to your HTML document and reference it in the src attribute, like this:
Assuming you downloaded the SVG image from unDraw and renamed it to happy.svg, you can go ahead and add the code snippet above into your HTML document.
If you did everything correctly, your webpage should look exactly like the demo below. 👀
When you add an SVG image using the tag without specifying the size, it assumes the size of the original SVG file.
For instance, in the demo above, I didn’t modify the size of the SVG image, so it assumed its original size (which was a width of 915.11162px and a height of 600.53015px ).
Note: to change the original size, you have to specify the width and height with CSS as you can see in the demo below. You can also update the original width and height directly.
Even though we can change the size of SVG images added via the tag, there are still some restrictions if you want to make major style changes to the SVG image.
2. How to use SVG as a CSS background-image
This is similar to adding SVG to an HTML document using the tag. But this time we do it with CSS instead of HTML as you can see in the code snippet below.
SVG images can be written directly into the HTML document using the tag. To do this, open the SVG image in VS code or your preferred IDE, copy the code, and paste it inside the When you use SVG inline in the HTML document, it reduces load time because it serves as an HTTP request. Using this method lets you perform more customization as opposed to using either the You can also use an HTML You use the data attribute to specify the URL of the resource that you'll use by the object, which is the SVG image in our case. You use the width and height to specify the size of the SVG image. Again, below is a demo for you to explore. 😃 Using the is supported across all browsers that support SVG. 5. How to use SVG as an Even though this isn't advisable, you can also add an SVG image using an as seen in the demo below. Just keep in mind, though, that s can be difficult to maintain and will be bad for your site's Search Engine Optimization (SEO). Using also defeats the purpose of the Scalable in the name Scalable Vector Graphics because SVG images added with this format are not scalable. 6. How to use SVG as an The HTML element is another way to use an SVG image in HTML and CSS using this syntax: . Keep in mind, however, that this method has limitations, too. According to MDN, most modern browsers have deprecated and removed support for browser plug-ins. This means that relying upon is generally not wise if you want your site to be operable on the average user's browser. Below is a demo of using the HTML element to add an SVG image. I hope you were able to learn about the different ways of using SVG images in CSS and HTML. This will hopefully guide you towards choosing the right method when adding SVG images to a website. If you have any questions, you can send me a message on Twitter, and I'll be happy to answer every single one. Оставим за скобками вопрос о целесообразности использования SVG на сайте. Каждый сам для себя должен определить полезность этой технологии. Тем более что эта тема поднималась уже неоднократно. Сейчас мы рассмотрим методы встраивания SVG, их плюсы и минусы, а так же возможности манипулирования элементами SVG. Статья рассчитана в первую очередь на тех, кто до сих пор не использует векторную графику на своих сайтах, но очень хочет быть одной ногой в 1 Можно менять цвет, размер, выравнивание и прочее стили обычного текста По правде говоря стили прописанные внутри SVG так же будут работать и при использовании тега IMG или background-image, но в этом нет никакого смысла. Плюсы и минусы такого подхода: К сожалению (или к счастью) codepen и jsfiddle блокируют загрузку внешних object в целях безопасности. Стоит отметить что в CSS стили для SVG элементов отличаются от стандартных, полный список стилей поддерживаемых SVG можно посмотреть тут. Но объект можно трансформировать используя CSS например так: IE 8 и ниже не поддерживают SVG от слова «совсем» поэтому, если среди пользователей вашего сайта есть эта специфичная аудитория стоит озаботиться проверкой и заменой svg на растровое изображение. Сделать это можно множеством способов, например используя Modernizr добавлять .no-svg класс для body: Плюсы и минусы такого подхода: Оба способа встраивания чем-то похожи на встраивание при помощи тэга object, например нельзя менять пропорции изменением ширины и высоты контейнера, но имеют больше ограничений. В случае с background-image как обычный блок: Так же при помощи background-image можно использовать спрайты, как с png изображениями, а менять размер можно при помощи background-size: Учитывая что процент людей c экранами device-pixel-ratio которых выше 1 и их устройства не поддерживают svg стремится к нулю(если такие вообще есть), то можно использовать медиа выражения для подключения svg, только для них, а для остальных использовать png версию: Плюсы и минусы этих подходов: В этом варианте SVG код, получить который можно открыв любой SVG файл текстовым документом, встраивается непосредственно в код страницы. Например имея набор иконок в SVG файле, можно использовать их повторно простой конструкцией вида: где some_svg_element_id id элемента внутри исходного SVG файла. К отдельно взятому элементу можно, например, применять SVG трансформации: Но если внутри исходного SVG к элементу была применена интерактивная анимация, например по клику, как в демо выше, то при дублировании объекта анимация будет срабатывать на всех элементах одновременно. Плюсы и минусы этого подхода: Каждый из способов хорош по своему, и в зависимости от обстоятельств можно использовать любой из них.
3. How to use inline SVG images
element in your HTML document.
or
background-image
methods.4. How to use an SVG as an
element to add SVG images to a webpage using the code syntax below:
Conclusion
Используем SVG на сайте
будущем настоящем.
Для любопытных сразу приведу сводную таблицу:
Иконочный шрифт IMG, background-image Object Inline CSS Манипуляции Частично 1 Нет Частично 2 Да JS манипуляции Частично 1 Нет Да Да SVG анимации Нет Да Да Да Интерактивные SVG анимации Нет Нет Да Да
2 Стили должны быть прописаны или в самом SVG файле, или подключены внешним стилем в SVG в начале файла:Иконочный шрифт
+ иконка ведет себя как символ шрифта, и все параметры настраиваются так же через CSS (размер, цвет, выравнивание и прочее);
+ единственный способ работающий в IE 8 без дополнительных манипуляций;
– все элементы SVG файла объединяются в один символ, поэтому управлять им при помощи CSS или JS можно только как единым целым;
– поддерживаются только одноцветные иконки;
– при сбое загрузки шрифта у пользователя либо не отобразятся иконки совсем, либо, при совпадении кодов иконок с символами юникода, отобразятся соответстующие символы.SVG как OBJECT
Встраивание выглядит следующим образом: Объект встраивает элмемент атрибута data наподобие iframe, добавляя внутрь себя разметку подключаемого файла, поэтому к элементам можно обращаться при помощи JS, но не совсем обычным образом:
var object = document.getElementById("’object’"); //получаем элмент object var svgDocument = object.contentDocument; //получаем svg элемент внутри object var svgElement = svgDocument.getElementById("some_id_in_svg"); //получаем любой элемент внутри svg svgElement.setAttribute("fill", "black"); //меняем атрибуты выбранного элемента
SVG ведет себя не как обычное изображение, его нельзя непропорционально трансформировать, задавая ширину и высоту. Объект внутри будет занимать максимальную площадь и центрироваться в контейнере:
+ можно использовать внешний CSS файл для управления стилями;
+ поддерживаются SVG анимации и фильтры;
+ поддерживаются интерактивные анимации;
– для IE 8 и ниже необходима замена на растровое изображение.SVG в IMG или background-image
Подключаемые в SVG внешние стили не будут работать, обратиться к элементам через JS так же не получится. Интерактивные анимации в SVG тоже не сработают. А проблемы с IE 8 и ниже так же остаются.
Но SVG анимации будут работать, в обоих случаях.
В случае с IMG втраивание выглядит как обычная картинка:background-size: 90px 150px;
.icon < background-image: url("icon.png"); >@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (-o-device-pixel-ratio: 3/2), only screen and (min-device-pixel-ratio: 1.5) < .icon < background-image: url("icon.svg"); >>
+ поддерживаются SVG анимации и фильтры;
+ в случае с background-image можно использовать SVG спрайты;
– нельзя менять свойства элементов SVG через CSS или JS;
– не поддерживаются интерактивные анимации;
– для IE 8 и ниже необходима замена на растровое изображение.Inline SVG
Несомненно такая конструкция ухудшает читаемость кода, и увеличивает его объем, но открываются новые возможности.
SVG анимации и фильтры это тема для отдельной статьи, поэтому ограничусь лишь примером SVG фильтра (подробнее о SVG фильтрах), и примером SVG анимации (подробнее о SVG анимациях).
С обесепечением работоспособности для IE 8 и ниже все несколько сложнее, чем в других вариантах. Необходимо добавить дополнительную разметку:
+ никакой подгрузки внешних файлов;
+ доступны манипуляции с элементами SVG через CSS и JS;
+ поддерживаются SVG анимации и фильтры;
+ поддерживаются интерактивные анимации;
+ возможность повторного использования элементов;
– загрязняется код страницы;
– для IE 8 и ниже необходима дополнительная разметка, и замена на растровое изображение.Заключение
Эта статья в первую очередь мой путь по освоению нюансов SVG, и надеюсь многим она будет так же полезна.
P.S. Всем добра и котиков.