- Оригинальный адрес:AN IN-DEPTH SVG TUTORIAL
- Оригинальный автор:flaviocopes.com
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:Starrier
- Корректор:dandyxu,allenlongbaobao
Подробная информация о SVG
SVG — отличный и невероятно мощный формат изображений. Этот учебник дает вам обзор SVG, просто объясняя все, что вам нужно знать.
представлять
Несмотря на стандартизацию в начале 2000-х, SVG (Scalable Vector Graphicsаббревиатура) является горячей темой в последние годы.
SVG годами страдал плохой поддержкой браузеров (особенно IE).
Я нашел эту цитату из книги 2011 года: на момент написания статьи встраивание SVG непосредственно в HTML работало только в последних браузерах. Спустя 7 лет фраза теперь в прошлом, и мы можем смело использовать SVG-изображения.
Теперь мы можем безопасно использовать изображения SVG, если у вас нет большого количества пользователей в IE8 и ниже или на старых устройствах Android. В этом случае еще есть альтернативы.
Частью успеха SVG является тот факт, что мы должны поддерживать различные экраны с разными разрешениями и размерами. SVG отлично решает эту проблему.
Между тем, быстрый спад Flash за последние несколько лет привел к интересу к SVG. Это очень важно для многих вещей, которые Flash делал в прошлом.
SVG — этоvectorФормат файла изображения. Это сильно отличает их от других форматов изображений, таких как PNG, GIF или JPG, которые являются форматами файлов растровых изображений.
Преимущества SVG
Поскольку изображения SVG являются векторными изображениями, вы можетебесконечный зум, и нет проблем с ухудшением качества изображения. Почему это так? Поскольку используются изображения SVGXML-разметкаВстроенный браузер печатает каждую точку и линию, рисуя их, а не заполняя определенные места предопределенными пикселями. Это гарантирует, что изображения SVG могут адаптироваться к разным размерам и разрешениям экрана, даже к тем, которые еще не изобретены.
Поскольку они определены в XML, изображения SVG более компактны, чем изображения JPG или PNG.гибкий,а такжеМы можем взаимодействовать с ними с помощью CSS и JavaScript.. Настройки изображения SVG можноВключатьCSS и JavaScript.
SVG может отображать изображения в векторном стиле намного меньше, чем другие форматы, и в основном используется для логотипов и иллюстраций. Еще один огромный вариант использования — значки. Когда-то преобладавшие иконочные шрифты, такие как FontAwesome, теперь дизайнеры предпочитают использовать изображения SVG, потому что они меньше и позволяют использовать многоцветные значки.
SVG прост, когда дело доходит до анимации, а это действительно крутая тема.
SVG предоставляет некоторые эффекты редактирования изображений, такие как маскирование и обрезка, применение фильтров и многое другое.
SVG — это просто текст, поэтому его можно эффективно сжать с помощью GZip.
Ваше первое изображение SVG
Изображения SVG определяются с помощью XML, а это означает, что если вы хорошо разбираетесь в HTML, SVG будет выглядеть очень знакомо, за исключением того, что в SVG есть теги, подходящие для создания документов (например,p
,article
,footer
,aside
) у нас также есть строительные блоки для векторных диаграмм:path
,rect
,line
и т.п.
Вот пример SVG-изображения:
<svg width="10" height="10">
<rect x="0" y="0" width="10" height="10" fill="blue" />
</svg>
Обратите внимание, как легко читать и понимать изображение: это простой синий прямоугольник размером 10 x 10 пикселей (ячейка по умолчанию).
По большей части вам не нужно писать код SVG, потому что вы можете использовать такие инструменты, как Sketch или Figma, или любой другой инструмент векторной графики, чтобы создать изображение и экспортировать его в формате SVG.
Текущая версия SVG — 1.1, а SVG 2.0 находится в стадии разработки.
Используйте SVG
Браузеры могут сделать это, включив их вimg
SVG Image Чтобы отобразить метку:
<img src="image.svg" alt="My SVG image" />
Как и другие форматы изображения на основе пикселей:
<img src="image.png" alt="My PNG image" />
<img src="image.jpg" alt="My JPG image" />
<img src="image.gif" alt="My GIF image" />
<img src="image.webp" alt="My WebP image" />
Кроме того, SVG настолько уникальны, что их можно включать непосредственно в HTML-страницы:
<!DOCTYPE html>
<html>
<head>
<title>A page</title>
</head>
<body>
<svg width="10" height="10">
<rect x="0" y="0" width="10" height="10" fill="blue" />
</svg>
</body>
</html>
Обратите внимание, что HTML5 и XHTML требуют разного синтаксиса для встроенных изображений SVG. К счастью, XHTML ушел в прошлое, потому что он слишком сложен, но о нем стоит знать, если вам все еще нужно иметь дело со страницами XHTML.
Встроенный SVG в HTLMфункции, которые делают этот формат сценарнымunicorn, поскольку другие изображения не могут этого сделать, для каждого изображения необходимо открывать отдельный запрос для получения формата.
SVG-элемент
В приведенном выше примере вы видитеrect
использование элемента. SVG имеет много разных элементов.
Наиболее часто используются
-
text
: создать текстовый элемент -
circle
: создать круг -
rect
: создать прямоугольник -
line
: создать линию -
path
: создать путь между двумя точками -
textPath
: создает путь между двумя точками и создает текстовый элемент ссылки. -
polygon
: позволяет создавать полигоны любого типа -
g
: один элемент
Координаты начинаются с 0, 0 в верхнем левом углу области рисования ислева направовыражать
x
, сверху донизувыражатьy
.Изображение, которое вы видите, отражает код, показанный выше. использоватьБраузер DevTools, вы можете проверить и изменить их.
text
text
Элемент добавляет текст. Текст можно выделить мышью.x
а такжеy
Определяет начальную точку текста.
<svg>
<text x="5" y="30">A nice rectangle</text>
</svg>
красивый прямоугольникcircle
Дайте определение окружности.cx
а такжеcy
координата центра,r
это радиус.fill
является общим свойством, которое представляет цвет графика.
<svg>
<circle cx="50" cy="50" r="50" fill="#529fca" />
</svg>
rect
Определите прямоугольник.x
,y
начальная координата,width
а такжеheight
не требует пояснений.
<svg>
<rect x="0" y="0" width="100" height="100" fill="#529fca" />
</svg>
line
x1
а такжеy1
Задайте начальные координаты.x2
а такжеy2
Задайте конечные координаты.stroke
является общим свойством, представляющим цвет линии.
<svg>
<line x1="0" y1="0" x2="100" y2="100" stroke="#529fca" />
</svg>
path
Путь представляет собой серию прямых линий и кривых. Это самый мощный из всех инструментов рисования SVG и, следовательно, самый сложный.
d
Содержит команды направления. Эти команды начинаются с имени команды и набора координат:
-
M
Представляет движение, принимает набор координат x,y -
L
Указывает, что линия будет рисоваться до тех пор, пока она не примет набор x,y -
H
это горизонтальная линия, она принимает только координаты x -
V
это вертикальная линия, она принимает только координаты y -
Z
Указывает закрыть путь и вернуть его в исходное положение. -
A
Указывает на Arch, который сам нуждается в полном туториале. -
Q
представляет собой квадратичную кривую Безье, которая сама по себе нуждается в полном руководстве
<svg height="300" width="300">
<path d="M 100 100 L 200 200 H 10 V 40 H 70"
fill="#59fa81" stroke="#d85b49" stroke-width="3" />
</svg>
textPath
Добавьте текст вдоль формы элемента пути.
Wow such a nice SVG tutpolygon
использоватьpolygon
Нарисуйте любой многоугольник.points
Представляет набор координат x, y многоугольника, который должен быть связан:
<svg>
<polygon points="9.9, 1.1, 3.3, 21.78, 19.8, 8.58, 0, 8.58, 16.5, 21.78" />
</svg>
g
использоватьg
элементы, вы можете сгруппировать несколько элементов:
<svg width="200" height="200">
<rect x="0" y="0" width="100" height="100" fill="#529fca" />
<g id="my-group">
<rect x="0" y="100" width="100" height="100" fill="#59fa81" />
<rect x="100" y="0" width="100" height="100" fill="#59fa81" />
</g>
</svg>
Окно просмотра SVG и viewBox
Размер SVG относительно его контейнера определяетсяsvg
элементальwidth
а такжеheight
настройки свойств. Единицей измерения по умолчанию являются пиксели, но вы можете использовать любые другие распространенные единицы измерения, например%
илиem
. Этоviewport.
Обычно «контейнер» относится к окну браузера, но
svg
Элементы могут содержать другиеsvg
элемент, в данном случае контейнер является родительским элементомsvg
.
Важным свойством являетсяviewBox
. Это позволяет вам определить новую систему координат на холсте SVG.
Предполагая простой круг в SVG 200x200px:
<svg width="200" height="200">
<circle cx="100" cy="100" r="100" fill="#529fca" />
</svg>
указавviewBox,ты можешь выбратьПоказать только часть этого SVG. Например, вы можете начать с 0,0 и просто показать холст размером 100 x 100 пикселей:
<svg width="200" height="200" viewBox="0 0 100 100">
<circle cx="100" cy="100" r="100" fill="#529fca" />
</svg>
От 100 100 вы увидите другую часть, правый нижний угол круга:
<svg width="200" height="200" viewBox="100 100 100 100">
<circle cx="100" cy="100" r="100" fill="#529fca" />
</svg>
Хороший способ визуализации — представить Карты Google как гигантское изображение SVG, а ваш браузер — как окно просмотра размером с ваше окно. При перемещении окно просмотра меняет координаты своей начальной точки (x,y), а когда вы изменяете размер окна, изменяется ширина и высота окна просмотра.
Вставка SVG на веб-страницы
Есть несколько способов добавить SVG на веб-страницу.
Наиболее распространенными являются:
- с участием
img
Этикетка - с CSS
background-image
Атрибуты - Встроенный в HTML
- с участием
object
,iframe
илиembed
Этикетка
Посмотрите эти примеры на Glitchflavio-svg-loading-ways.glitch.me/
с участиемimg
Этикетка
<img src="flag.svg" alt="Flag" />
с CSSbackground-image
Атрибуты
<style>
.svg-background {
background-image: url(flag.svg);
height: 200px;
width: 300px;
}
</style>
<div class="svg-background"></div>
Встроенный в HTML
<svg width="300" height="200" viewBox="0 0 300 200"
version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Italian Flag</title>
<desc>By Flavio Copes https://flaviocopes.com</desc>
<g id="flag">
<rect fill="green" x="0" y="0" width="100" height="200"></rect>
<rect fill="white" x="100" y="0" width="100" height="200"></rect>
<rect fill="red" x="200" y="0" width="100" height="200"></rect>
</g>
</svg>
с участиемobject
,iframe
илиembed
Этикетка
<object data="flag.svg" type="image/svg+xml"></object>
<iframe src="flag.svg" frameborder="0"></iframe>
<embed src="flag.svg" type="" />
использоватьembed
, вы можете получить документ SVG из родительского документа с помощью
document.getElementById('my-svg-embed').getSVGDocument()
Внутри SVG вы можете ссылаться на родительский документ следующими способами:
window.parent.document
Встроенный SVG с URL-адресом данных
Вы можете использовать любую комбинацию приведенных выше примеров.Data URLsВстроить SVG в HTML:
<img src="data:image/svg+xml;<DATA>" alt="Flag" />
<object data="data:image/svg+xml;<DATA>" type="image/svg+xml"></object>
<iframe data="data:image/svg+xml;<DATA>" frameborder="0"></iframe>
Также в CSS:
.svg-background {
background-image: url("data:image/svg+xml;<DATA>");
}
Просто используйте соответствующиеData URLИзменять<DATA>
.
элемент стиля
Допустим любой элемент SVGstyle
атрибуты, как HTML-теги. Не все свойства CSS работают так, как вы ожидаете. Например, чтобы изменить цвет текстового элемента, используйтеfill
вместоcolor
.
<svg>
<text x="5" y="30" style="fill: green">A nice text</text>
</svg>
<svg>
<text x="5" y="70" style="fill: green; font-family: Courier New">
A nice text
</text>
</svg>
Вы также можете использоватьfill
Как атрибут элемента, как вы видели ранее:
<svg>
<text x="5" y="70" fill="green">A nice text</text>
</svg>
Другие общественные свойства включают
-
fill-opacity
, непрозрачность цвета фона -
stroke
, который определяет цвет границы -
stroke-width
, установить ширину границы
CSS может ориентироваться на элементы SVG так же, как вы ориентируетесь на HTML-теги:
rect {
fill: red;
}
circle {
fill: blue;
}
Взаимодействие с CSS или JavaScript с SVG
Изображения SVG могут быть оформлены с помощью CSS или написаны с помощью JavaScript, в этом случае:
- Когда SVG встроен в HTML
- пройти через
object
,embed
илиiframe
Когда тег загружает изображение
Но (⚠️ зависит от реализации браузера) они должны быть загружены из одного и того же домена (и протокола), что связано с политикой одного и того же происхождения.iframe
Необходимы явно заданные размеры, иначе содержимое будет обрезано при изменении размера.object
а такжеembed
размер, чтобы соответствовать его содержимому. .
Если используется SVGimg
тег загружен или с CSS в качестве фона, независимо от источника:
- CSS и JavaScript не могут с ним взаимодействовать
- JavaScript, включенный в SVG, отключен
- Невозможно загрузить ресурсы извне (например, изображения, таблицы стилей, скрипты, шрифты)
деталь
характеристика | SVG встроенный |
object /embed /iframe
|
img |
---|---|---|---|
Может взаимодействовать с пользователями | ✅ | ✅ | ✅ |
Поддержка анимации | ✅ | ✅ | ✅ |
Может запускать скрипты JavaScript | ✅ | ✅ | 👎🏼 |
Может быть запрограммирован извне | ✅ | 👎🏼 | 👎🏼 |
Встроенные изображения SVG, несомненно, являются наиболее мощными и гибкими, и это единственный способ что-то сделать с SVG.
Если вы хотите SVG сообщать о любом взаимодействии с вашим сценарием, он должен быть загружен в HTML встроенному способу..
Если вам не нужно взаимодействовать с SVG, просто отобразите его на странице, загрузите SVG вimg
,object
илиembed
Загрузка SVG особенно удобна, если вы повторно используете изображения SVG на разных страницах или если размер изображения SVG довольно велик.
CSS Встроить SVG
Добавьте CSS в CDATA:
<svg>
<style>
<![CDATA[
#my-rect { fill: blue; }
]]>
</style>
<rect id="my-rect" x="0" y="0" width="10" height="10" />
</svg>
Файлы SVG также могут включать внешние таблицы стилей.
<?xml version="1.0" standalone="no"?>
<?xml-stylesheet type="text/css" href="style.css"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
width=".." height=".." viewBox="..">
<rect id="my-rect" x="0" y="0" width="10" height="10" />
</svg>
JavaScript встраивает SVG
Вы можете поставить JavaScript на первое место и обернуть его вload
событие для его выполнения, когда страница полностью загружена и SVG вставлен в DOM:
<svg>
<script>
<![CDATA[
window.addEventListener("load", () => {
//...
}, false)
]]>
</script>
<rect x="0" y="0" width="10" height="10" fill="blue" />
</svg>
Или, если вы поместите свой JS в конец другого кода SVG, вы можете не добавлять прослушиватели событий и гарантировать, что JavaScript будет выполняться, когда SVG появится на странице.
<svg>
<rect x="0" y="0" width="10" height="10" fill="blue" />
<script>
<![CDATA[
//...
]]>
</script>
</svg>
Подобно элементам HTML, элементы SVG также могут иметьid
а такжеclass
свойство, так что мы можем использоватьSelectors APIпроцитировать их:
<svg>
<rect x="0" y="0" width="10" height="10" fill="blue"
id="my-rect" class="a-rect" />
<script>
<![CDATA[
console.log(document.getElementsByTagName('rect'))
console.log(document.getElementById('my-rect'))
console.log(document.querySelector('.a-rect'))
console.log(document.querySelectorAll('.a-rect'))
]]>
</script>
</svg>
Пожалуйста, посмотрите эту разбивкуflaviocopes-svg-script.glitch.me/для функциональных советов.
JavaScript вне SVG
Если вы можете взаимодействовать с SVG (SVG встроен в HTML), вы можете использовать JavaScript для изменения любого свойства SVG, например:
document.getElementById("my-svg-rect").setAttribute("fill", "black")
или действительно делай что хочешьDOMработать.
CSS вне SVG
Вы можете использовать CSS для изменения любого стиля изображения SVG.
Свойства SVG можно легко переопределить в CSS, и они имеют более низкий приоритет, чем CSS. Они не ведут себя как встроенный CSS с более высоким приоритетом.
<style>
#my-rect {
fill: red
}
</style>
<svg>
<rect x="0" y="0" width="10" height="10" fill="blue"
id="my-rect" />
</svg>
SVG vs Canvas API
Canvas API — отличное дополнение к веб-платформе с поддержкой браузера, аналогичной SVG. Основное (и самое большое) отличие от SVG заключается в том, что холст основан не на векторах, а на пикселях, поэтому
- Он имеет те же проблемы с масштабированием, что и пиксельные форматы изображений png, jpg и gif.
- Это делает невозможным редактирование изображений холста с помощью CSS или JavaScript, таких как SVG.
SVG-символы
Символы позволяют вам определить изображение SVG один раз и повторно использовать его в нескольких местах. Это очень поможет, если вам нужно повторно использовать изображение, возможно, просто немного изменить некоторые его свойства.
Вы можете сделать это, добавивsymbol
элемент и назначитьid
свойство сделать это:
<svg class="hidden">
<symbol id="rectangle" viewBox="0 0 20 20">
<rect x="0" y="0" width="300" height="300" fill="rgb(255,159,0)" />
</symbol>
</svg>
<svg>
<use xlink:href="#rectangle" href="#rectangle" />
</svg>
<svg>
<use xlink:href="#rectangle" href="#rectangle" />
</svg>
(xlink:href
для поддержки Safari, хотя это устаревшее свойство)
Это позволяет нам начать понимать мощь SVG.
Что, если вы хотите использовать разные стили для двух прямоугольников, например, разные цвета для каждого прямоугольника? ты можешь использовать этоCSS-переменные.
<svg class="hidden">
<symbol id="rectangle" viewBox="0 0 20 20">
<rect x="0" y="0" width="300" height="300" fill="var(--color)" />
</symbol>
</svg>
<svg class="blue">
<use xlink:href="#rectangle" href="#rectangle" />
</svg>
<svg class="red">
<use xlink:href="#rectangle" href="#rectangle" />
</svg>
<style>
svg.red {
--color: red;
}
svg.blue {
--color: blue;
}
</style>
Просмотр символов SVG --Моя игровая площадка для глюков.
Проверить SVG
Файлы SVG представляют собой XML и могут быть записаны в недопустимом формате, а некоторые службы или приложения могут не принимать недопустимые файлы SVG.
SVG можно использоватьW3C Validatorпроверять.
я должен включитьxmlns
имущество?
Иногда SVG не определяется как
<svg>
...
</svg>
иногда определяется как
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
...
</svg>
Вторая форма — XHTML. Его можно использовать с HTML5 (в документации есть<!DOCTYPE html>
), но в данном варианте первая форма проще.
Должен ли я беспокоиться о проблемах с поддержкой браузера?
В версии 2018 года подавляющее большинство браузеров пользователей поддерживают SVG. .
Вы все еще можете использовать что-то вродеModernizrБиблиотека, подобная этой, для проверки отсутствия поддержки и предоставления запасного варианта:
if (!Modernizr.svg) {
$(".my-svg").attr("src", "images/logo.png");
}
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из ИнтернетаНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,товар,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.