Практическое руководство о SVG в вебе
Подготовка SVG для использования в вебе это очень простой процесс, не сложнее экспорта JPEG или PNG. Используйте любой привычный для вас графический редактор (Illustrator, Sketch, Inkscape [бесплатен], и тому подобное [или даже Photoshop, если вы используете слои с формами]) с тем размером изображения, который вы планируете использовать. Обычно я работаю в Иллюстраторе, поэтому я объясню некоторые способы подготовки файлов в этой программе, но вообще они применимы и для любой другой программы. Вам, возможно, стоит перевести текст в кривые, поскольку шрифт, скорее всего, будет неправильно отображаться, если, конечно, вы не планируете стилизовать их с помощью веб-шрифта, используемого на странице (что возможно!). Не стоит также превращать все объекты в единые формы, особенно если у вас есть обводка, которой необходимо будет управлять на странице, тем более преобразование объектов зачастую не уменьшает размер файла. Любые имена, присвоенные группам или слоям, будут добавлены к SVG как ID элемента. Это довольно удобно для стилизации, но немного увеличит общий размер файла.
Перед тем как сделать экспорт, необходимо проверить, все ли изображения находятся в целочисленной пиксельной сетке (то есть, например не 23.3px × 86.8px). В противном случае скорее всего изображению не будет хватать чёткости и часть изображения обрежется. В Иллюстраторе это можно сделать следующим образом: Object > Artboards > Fit to Artwork Bounds
. Затем жмём save as
и выбираем SVG, и оставляем настройки по умолчанию. Здесь можно сделать небольшую оптимизацию, но на самом деле не стоит, так как далее мы будем применять разные улучшающие приёмы, поэтому сейчас мы не будем тратить впустую время на эти настройки.
Приёмы для уменьшения размеров файла.
(Смотрите ресурсы по оптимизации)
Существует множество статей по оптимизации SVG, предлагающих кладезь знаний в этой теме, но я хочу поделиться парой приёмов, которые считаю наиболее эффективными и полезными. Они не требуют много усилий и могут легко вписаться в рабочий процесс.
Чтобы добиться наименьшего размера SVG, логично будет удалить из него всё лишнее. Наиболее известная и полезная программа (по крайней мере я так думаю) для обработки SVG это SVGO. Она удаляет весь не нужный код. Но! Будьте внимательны используя эту программу, если планируете управлять SVG при помощи CSS / JS, так как она может слишком сильно почистить код, что затруднит дальнейшие изменения. Удобство SVGO ещё и в том, что её можно включить в процесс автоматической сборки проекта, но можно также использовать GUI если хочется.
Разбираясь подробнее с правильным удалением всего ненужного, мы можем сделать ещё кое-что в графическом редакторе. Сперва нужно убедиться, что используется настолько мало контуров/форм, насколько это возможно, так же как и точек на этих контурах. Можно объединять и упрощать всё, что поддаётся упрощению, и удалить все ненужные точки. В Иллюстраторе есть плагин VectorScribe с инструментом Smart Remove Brush Tool
, который поможет удалить точки и при этом оставить общую форму той же.
Предварительная оптимизация
Smart Remove Brush Tool удалил точки
Дальше будем увеличивать изображение. В Иллюстраторе удобно включить просмотр с пиксельной сеткой View > Pixel Preview
и проверить, как располагаются контуры. Чтобы разместить контуры по сетке, потребуется немного времени, но эти усилия окупятся и позволят добиться более чёткого рендеринга (лучше обратить на это внимание заранее).
Точки вне сетки
Выравнивание по сетке
Если есть два и более объекта для выравнивания, то стоит удалить все ненужные перекрытия. Иногда даже если контуры тщательно выровнены, может быть видна тонкая белая линия. Чтобы предотвратить такое, можно немного наложить объекты друг на друга в местах перекрытия. Важно: в SVG
имеет определённый порядок, который зависит от объекта, находящегося снизу, поэтому стоит поместить верхний объект в нижнюю часть файла в коде.
И, наконец, последнее, но немаловажное, то, о чём обычно забывают — это активировать gzip сжатие SVG на вашем сайте в .htaccess
файле.
AddType image/svg+xml svg svgz <IfModule mod_deflate.c> <IfModule mod_filter.c> AddOutputFilterByType DEFLATE "image/svg+xml" \ "text/css" \ "text/html" \ "text/javascript" ... etc </IfModule> </IfModule>
В качестве примера того, насколько эффективна эта техника, я воспользуюсь оригинальным логотипом Breaking Borders и оптимизирую его таким образом: увеличиваю размер до того, каким он должен быть; приведу в порядок контуры; удалю максимально возможное количество точек; передвину точки на целочисленные пиксели; сдвину все области перекрытий и отправлю это всё в SVGO.
Оригинал: 1,413b
После оптимизации: 409b
В итоге размер файла стал меньше на ~71% (и на ~83% при сжатии)
Дополнение: Rob Sterlini заметил, поскольку «b» повторяется, можно использовать элемент <use>
, для повторения, что ещё больше уменьшит размер файла — и был абсолютно прав.
После оптимизации с использованием <use>: 311b
Если применить эту технику ко всем файлам SVG, это значительно улучшит ваш сайт.
за и против / Блог компании HTML Academy / Хабр
Ранее в нашем блоге мы поднимали тему создания качественных веб-интерфейсов, в частности в одном из предыдущих топиков рассматривался вопрос правильного использования анимаций. В сегодняшнем материале речь пойдёт о технологии SVG, принципах работы с этой технологией, её плюсах и минусах. Кроме того, мы поинтересовались у отечественных дизайнеров, применяют ли они SVG, и если нет, то почему.
Очень коротко: что такое SVG
SVG (Scalable Vector Graphics) — язык разметки векторной графики, созданный W3C, подмножество языка XML. Предназначен для описания векторной и смешанной (векторно-растровой) двухмерной графики, поддерживает анимацию и интерактивность. В 2001 году вышла версия 1.0, в 2011 — версия 1.1, актуальная ныне. Поддержка браузерами хорошая, но есть нюансы в IE, пикселизация при увеличении в Opera Mini и Opera Mobile 12.1.
Плюсы и сложности применения SVG
Прежде чем начать рассматривать вопрос о том, как дизайнеры могут использовать в своей работе SVG, следует сделать небольшое логическое отступление и поговорить об этой профессии подробнее. На наш взгляд, сложившееся в ИТ-отрасли разделение на веб-дизайнеров и верстальщиков, не всегда соответствует реалиям создания веб-проектов.
Разобравшись с тем, кем на самом деле является современный дизайнер, мы можем переходить к обсуждению плюсов, которые такие специалисты могут извлечь из использования технологии SVG. Вкратце, её применение помогает увеличить скорость и качество работы: дизайнеру приходится выполнять меньше действий самому, что уменьшает затраты времени на различных этапах создания проекта.
Рассмотрим список плюсов SVG подробнее:
SVG легко модифицируется (причём, как в графическом редакторе, так и на самой странице средствами CSS). Поменять расположение, форму, размер, пропорции, цвет, заливку и все прочие свойства составляющих частей изображения проще, чем в случае с растровой графикой. При работе с растром придётся хранить «исходник» в формате со слоями, все изменения делать в нём, экспортировать. С SVG обычно необходимости в «исходнике» просто нет.
Для экранов с повышенной плотностью пикселей достаточно одного изображения. В случае с растровой графикой на данный момент (весна 2015 г.) нужно, минимум, три (!) версии картинки: 100% макетного размера, 200% и 300%. В случае использования SVG, достаточно одной версии — как и для любого векторного формата, пиксели, нужные для показа изображения, «возникают» непосредственно перед показом, исходя из необходимого пиксельного размера.
SVG быстро загружается.
SVG легко сделать адаптивным. В том случае, когда необходимо на узких вьюпортах показывать логотип сайта в упрощённом варианте, SVG позволяет добиться этого всего за один запрос к серверу.
SVG может быть интерактивным. Внутри изображения могут быть ссылки, скрипты, интерактивные части могут реагировать на наведение и другие действия пользователя, можно добавить анимацию.
Свободно распространяемое ПО. Для работы с SVG не обязательно использовать Adobe Illustrator (как стандарт в мире векторной графики), достаточно свободно распространяемого Inkscape. Есть и ряд других инструментов.
Несмотря на перечисленные плюсы формата SVG, далеко не все дизайнеры используют его в своих проектах. О причинах сложившейся ситуации мы поинтересовались у известных российских экспертов в области дизайна и проектирования интерфейсов:
Юрий Ветров, руководитель отдела проектирования и дизайна Mail.Ru
Простой ответ — дизайнеру мало научиться готовить SVG, нужно чтобы разработчики могли его использовать в продукте, а это не так-то просто, нужно менять многое в технологических решениях. Во-вторых, сам процесс работы с вектором нужно оптимизировать, чтобы SVG было комфортно экспортировать из использующихся графических редакторов. Т.е. каких-то предубеждений нет, просто надо значительно перестраивать процесс работы, а явных выхлопов для бизнеса это особых не даёт. Т.е. это инфраструктурная задача, которая в меньшем приоритете всегда. Все, конечно, перейдут на него со временем, но проблемы примерно как описал выше.
Денис Кортунов, UX-директор Acronis
Это вопрос не совсем к дизайнерам, но к веб-технологам или фронтенд-разработчикам. Сейчас немало дизайнеров изначально делают дизайн в векторе, и нет никакой проблемы представлять графику в виде SVG. Основная проблема — совместимость с разными браузерами. Такие картинки зачастую просто не отображаются и нужно много «танцев с бубнами». Распространённая альтернатива SVG — использование шрифтов. Это «хак», позволяющий использовать векторные изображения в вебе.
Вообще, в современном вебе есть проблема — нужен простой и универсальный формат для отображения векторных изображений на страницах. Вполне возможно, что SVG скоро станет стандартом. Очень жду этого.
Дмитрий Зимин, менеджер проекта «Киноход»
Что касается того, «почему не используют SVG», я могу говорить только за наш проект. У нас есть особенность: большая часть контента — это фотографии (постеры, кадры из фильма, превью ролика).
Интерфейс в мобильном приложении хотим перевести на вектор, потому что нарезать картинки в трёх разрешениях (х.png, @2x.png, @3x.png) и утомительно, и провоцирует на ошибки. Но, пока банально не дошли руки.
Артём Геллер, главный разработчик сайта Kremlin.ru
В своих проектах мы активно используем SVG, однако у этой технологии есть и определённые ограничения. Для нас они, конечно, перекрываются пользой, которую несёт в себе SVG — нам не нужна сложная анимация в элементах, да и что-то красить в них нужно не так часто.
При этом, мы заменяем элементы в SVG на PNG, в том случае, если с этим форматом конкретная версия браузера не дружит.
Никита Михеенков, директор по развитию Nimax Design
Нам кажется, что дело здесь совсем не в дизайнерах, а во всей команде, делающей проект. Сила привычки тянет назад к растровой графике — так проще и привычнее. В своих проектах мы постоянно работаем с SVG и особенно любим делать всякие анимированные и летающие штуки.
Вот несколько примеров с векторной графикой: один, два, три.
Вместо заключения: как делать SVG
Конечно, дизайнеру не нужно держать в голове все возможные технические мелочи разработки проекта, но соблюдение нескольких простых принципов, всё же, необходимо:
- Лучше стараться обходиться как можно меньшим числом точек. Чем меньше точек, тем, как правило, проще редактировать файл и тем меньших он будет размеров. Если используются формы, нарисованные другими специалистами, имеет смысл их упростить — уменьшить количество как опорных, так и управляющих точек. В Adobe Illustrator наиболее оптимальные (с технической стороны) контуры получаются при рисовании инструментом «перо» при грамотном выборе типа точек. Наименее оптимальные, обычно, являются результатом преобразования нарисованных кистью линий в векторные участки, или бездумной трассировки.
Изображение 1
(Получено от дизайнера)
83 КбИзображение 2
(оптимизировано количество точек)
28 КбИзображение 2
(оптимизирована разметка)
10 Кб - Следует использовать пиксельную сетку и стараться располагать контуры так, чтобы их края были ровно на границе пикселей или на 1/2 пикселя. Если планируется изменения размеров элементов (например, иконки), то нужно проверить, как изменённый размер ляжет на пиксельную сетку. При этом важно помнить о том, что экран — это среда с серьёзными ограничениями, на любом размере попасть в пиксели невозможно, однако для наиболее частых размеров — нужно постараться.
Формы выровнены по пиксельной сетке
(400%)Формы не выровнены по пиксельной сетке
(400%) - Стоит создавать и сохранять SVG в том виде, в котором планируется дальнейшее использование этих элементов в дизайне. Иногда встречается ситуация, при которой к PSD-макету приложены использованные SVG, но в самом макете использована векторная форма с какими-то добавлениями (текстовой слой, что-то дорисовано растром, наложен какой-либо эффект). Подобный подход может исключить возможность использовать векторную графику для такого элемента дизайна.
- Нужно использовать как можно меньше фигур, группировать только необходимое. Следует удалять фигуры, которые не являются составными частями картинки или невидимы (прикрыты другими фигурами).
- Все символы, текстуры и рисунки кистью лучше преобразовывать в обычные векторные участки, не применяя растровые эффекты (Adobe Illustrator) и режимы наложения.
Полезные ссылки
Начало работы — Веб-технологии для разработчиков
Простой пример
Давайте начнем наше погружение с простого примера. Посмотрите на код, представленный ниже:
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg"> <rect fill="red" /> <circle cx="150" cy="100" r="80" fill="green" /> <text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text> </svg>
Скопируйте код и вставьте его в файл demo1.svg. После чего откройте его в Firefox. Браузер отобразит Вам следующее изображение (пользователи Firefox: нажмите сюда):
Процесс отображения включает следующее:
- Мы начинаем с корневого элемента
svg
:- как известно из (X)HTML, декларацию doctype следует опустить, потому что DTD на основе валидации SVG приводит к бо́льшим проблемам, чем их решает
- до SVG 2, чтобы обозначить версию SVG для других типов вилидации, всегда следует использовать атрибуты
version
иbaseProfile
. Но в SVG 2 оба эти атрибутаversion
иbaseProfile
обрели статус не рекомендованных - как диалект XML, SVG всегда правильно должен связывать простанства имен (в атрибуте xmlns). Смотри страницу Namespaces Crash Course для большей информации.
- Фон устанавливается красным при помощи рисования прямоугольника
<rect/>
, который покрывает всю область изображения - Зеленый круг
<circle/>
с радиусом 80px рисуется поверх центра красного прямоугольника (центр круга смещен на 150px вправо, и 100px вниз). - Текст «SVG» рисуется. Внутренняя часть каждой буквы наполняется белым. Расположение текста определяется привязкой, где мы хотим, чтобы была середина: в этом случае середина должна соответствовать центру зеленого круга. Для улучшения эстетического вида можно сделать точные настройки размера шрифта и вертикального положения.
Основные свойства файлов SVG
- Первая важная вещь, которую следует заметить — это порядок отображения элементов. Глобально действующее правило для файлов SVG — элементы, которые отрендерились позднее, отображаются поверх предыдущих элементов. Чем дальше вниз элемент (по коду / порядку рендеринга), тем более видимым он будет.
- Файлы SVG в вэбе могут быть отображены прямо в браузере или внедрены в файлы HTML посредством нескольких методов: Смотри эту статью для более глубокого знакомства с темой.
- Как SVG управляет размерами и единицами будет объяснено на следующей странице.
Типы SVG файлов
Файлы SVG бывают двух видов. Нормальные файлы SVG — это простые текстовые файлы, содержащие разметку SVG. Рекомендуется расширение «.svg» (все нижним регистром) к имени файла для этих файлов.
Благодаря потенциально массивному размеру, который файлы SVG могут иметь при использовании в некоторых приложениях (например, географические приложения), спецификация SVG также допускает gzip-архивированные файлы SVG. Рекомендуется расширение «.svgz» (все нижним регистром) к имени файла. К сожалению, очень проблематично получить gzip-архивированные файлы SVG для надёжной работы со всеми SVG совместимыми пользовательскими агентами при управлении с сервера Microsofts IIS, когда Firefox не может загрузить gzip-архивированный SVG с локального компьютера. Избегайте gzip-архивированного SVG, кроме случаев, когда вы публикуетесь на вебсервере, в корректной работе которого вы уверены (смотри ниже).
Слово о Вебсерверах
Теперь, когда вы имеете представление о том, как создавать основные файлы SVG, следующим шагом будет загрузить их на Вебсервер. Но на этом этапе существуют некоторые подводные камни. Для нормальных файлов SVG, сервера должны посылать заголовки HTTP:
Content-Type: image/svg+xml Vary: Accept-Encoding
Для gzip-архивированных файлов SVG, сервера должны посылать заголовки HTTP:
Content-Type: image/svg+xml Content-Encoding: gzip Vary: Accept-Encoding
Вы можете проверить, правильные ли заголовки HTTP посылает ваш сервер с файлами SVG, используя Network Monitor panel или сайт, такой как web-sniffer.net. Введите URL одного из файлов SVG и смотрите на заголовки ответа HTTP. Если вы обнаружите, что сервер не посылает заголовки с величинами, данными выше — вам следует связаться с вашим хостингом. Если у вас возникнут проблемы с тем, чтобы корректно сконфигурировать их сервера для SVG, существуют способы сделать это самостоятельно. Смотри server configuration page на странице SVG wiki о ряде простых решений.
Неверная конфигурация сервера является очень частой причиной в невозможности загрузить SVG, поэтому убедитесь, что вы проверили конфигурацию вашего сервера. Если ваш сервер не сконфигурирован для того, чтобы посылать правильные заголовки с файлами SVG, тогда Firefox будет вероятнее всего показывать разметку файлов как текст или кодированный мусор, или даже спрашивать программу просмотра выбрать приложение, чтобы открыть их.
SVG и CSS — Веб-технологии для разработчиков
На этой странице показано, как использовать CSS со специальным языком для создания графики: SVG.
Вы сделаете небольшой пример, которые можно будет запустить в любом браузере с поддержкой SVG.
Это вторая секция Части II Руководство по CSS.
Предыдущая секция: JavaScript
Следующая секция: Данные XML
Общая информация: SVG
SVG (Scalable Vector Graphics) является подмножеством языка XML и предназначен для создания графики.
SVG можно использовать для статических изображений, а также для анимаций и создания пользовательских интерфейсов.
Как и прочие языки, основанные на XML, SVG поддерживает использование таблиц стилей CSS, что позволяет отделить различные варианты визуального отображения от структуры данных.
Кроме того, таблицы стилей, которые вы используете в других языках разметки документов, могут содержать ссылку на SVG графику, в тех местах, где необходимо изображение. Например, в таблице стилей, для вашего HTML документа, можно указать ссылку (URL) на SVG графику в свойстве background.
На момент написания статьи (середина 2011года), большинство современных браузеров имеет базовую поддержку SVG, в том числе Internet Explorer 9 и выше. Некоторые дополнительные возможности SVG не поддерживаются, либо поддерживаются лишь частично, в определенных браузерах. Для более подробной информации о текущей поддержке SVG, см. SVG tables on caniuse.com, либо в таблицах совместимости SVG element reference, для информации о поддержке отдельных элементов. В остальные версии можно добавить поддержку SVG, установив дополнительный плагин, например, предоставленный компанией Adobe. Более подробная информация о SVG в Mozilla, представлена на станице SVG в этой wiki. |
За дело: Демонстрация SVG
Создайте новый документ SVG, как обычный текстовый файл, doc8.svg
. Скопируйте и вставьте содержимое блока ниже, убедитесь, что пролистали его полностью, чтобы скопировать все:
<?xml version="1.0" standalone="no"?> <?xml-stylesheet type="text/css" href="style8.css"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg viewBox="-300 -300 600 600" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>SVG demonstration</title> <desc>Mozilla CSS Getting Started - SVG demonstration</desc> <defs> <g> <path d="M0,0 v-200 a40,40 0 0,0 -62,10 z"/> <path d="M0,-200 a40,40 0 0,0 -62,10"/> </g> <g> <use xlink:href="#segment"/> <use xlink:href="#segment" transform="rotate(18)"/> <use xlink:href="#segment" transform="rotate(36)"/> <use xlink:href="#segment" transform="rotate(54)"/> <use xlink:href="#segment" transform="rotate(72)"/> </g> <g> <use xlink:href="#quadrant"/> <use xlink:href="#quadrant" transform="rotate(90)"/> <use xlink:href="#quadrant" transform="rotate(180)"/> <use xlink:href="#quadrant" transform="rotate(270)"/> </g> <radialGradient cx="0" cy="0" r="200" gradientUnits="userSpaceOnUse"> <stop offset="33%"/> <stop offset="95%"/> </radialGradient> </defs> <text x="-280" y="-270"> SVG demonstration</text> <text x="-280" y="-250"> Move your mouse pointer over the flower.</text> <g> <circle cx="0" cy="0" r="200" stroke="none" fill="url(#fade)"/> <use xlink:href="#petals"/> <use xlink:href="#petals" transform="rotate(9) scale(0.33)"/> </g> </svg>
Создайте новый файл CSS, style8.css
. копируйте и вставьте содержимое блока ниже, убедитесь, что пролистали его полностью, чтобы скопировать все:
/*** SVG demonstration ***/ /* page */ svg { background-color: beige; } #heading { font-size: 24px; font-weight: bold; } #caption { font-size: 12px; } /* flower */ #flower:hover { cursor: crosshair; } /* gradient */ #fade-stop-1 { stop-color: blue; } #fade-stop-2 { stop-color: white; } /* outer petals */ #outer-petals { opacity: .75; } #outer-petals .segment-fill { fill: azure; stroke: lightsteelblue; stroke-width: 1; } #outer-petals .segment-edge { fill: none; stroke: deepskyblue; stroke-width: 3; } #outer-petals .segment:hover > .segment-fill { fill: plum; stroke: none; } #outer-petals .segment:hover > .segment-edge { stroke: slateblue; } /* inner petals */ #inner-petals .segment-fill { fill: yellow; stroke: yellowgreen; stroke-width: 1; } #inner-petals .segment-edge { fill: none; stroke: yellowgreen; stroke-width: 9; } #inner-petals .segment:hover > .segment-fill { fill: darkseagreen; stroke: none; } #inner-petals .segment:hover > .segment-edge { stroke: green; }
Откройте документ в вашем браузере с поддержкой SVG. Переместите указатель мыши на изображение.
Эта wiki не поддерживает вставку SVG в страницы, поэтому мы не имеем возможности продемонстрировать это здесь. Изображение будет выглядеть так:
Примечания к демонстрации:
- Документ SVG привязывается к таблице стилей общепринятым способом.
- SVG содержит собственные свойства CSS и их значения. Некоторые из них похожи на значения CSS для HTML.
Измение таблицу стилей так, чтобы все внутренние лепестки становились розовыми, по наведению курсора на одного из них, при этом нельзя менять принцип работы других лепестков. |
Посмотреть решение к этому заданию.
Что дальше?
В этой демонстрации, ваш браузер с поддержкой SVG уже знает, как отображать элементы SVG. Таблица стилей всего лишь некоторым образом меняет отображение. То же самое происходит с документами HTML и XUL. Однако CSS можно использовать для любых документов XML, в которых нет предусмотренного по умолчанию способа отображения элементов. Данный пример продемонстрирован на следующей странице: Данные XML
Большинство популярных графических редакторов позволяет сохранять изображения в нескольких форматах. Если программа работает с растровой графикой, то для сохранения файлов предлагаются растровые форматы, если с векторной, то, соответственно, векторные форматы. Однако есть растровые редакторы, которые поддерживают экспорт рисунков в векторные и смешанные форматы. Таковым, к примеру, является Adobe Photoshop, умеющий экспортировать рисунок в SVG – достаточно распространенный сегодня формат, способный хранить как растровую, так и векторную графику.
Что за формат SVG и где используется
Разработанный в 2001 году Консорциумом Всемирной паутины, формат SVG представляет собой не совсем обычный документ. В его основу положены языки разметки VML и PGML, то есть речь идет, по сути, о текстовом файле. При этом редакторы и браузеры интерпретируют SVG как изображение, которое может быть как статическим, так и анимированным. Будучи наиболее распространенным среди прочих форматов, предназначенных для хранения векторной графики, в настоящее время SVG активно используется для хранения и распространения векторных и смешанных изображений в интернете.
Как и все форматы, SVG имеет свои плюсы и минусы. К первым относятся масштабируемость без потери качества, относительно малый вес, возможность интеграции в SVG-документы PNG, GIF, JPG-изображений, редактирование (при наличии соответствующего опыта) в текстовых редакторах, индексирование поисковыми роботами, поддержка анимации и распространенность. К преимуществам формата следует также отнести хорошую сжимаемость, открытость и адаптивность.
С другой стороны SVG наследует недостатки XML со всеми вытекающими. Формат плохо подходит для создания сложных объектов, так как файлы SVG быстро «набирают» вес, если состоят из множества мелких деталей. Кроме того, для отображения картинки программам нужно читать весь документ, что затрудняет применение формата в картографических приложениях. Среди недостатков формата отмечаем относительно низкую кроссбраузерность и отсутствие хотя бы минимальной поддержки трехмерной графики.
Лучшие редакторы для работы с файлами SVG
Как уже было сказа
Пути (paths) — Веб-технологии для разработчиков
Элемент <path>
(«путь»)– наиболее мощный элемент в библиотеке основных форм SVG. С его помощью можно создавать отрезки, кривые, дуги и многое другое.
С помощью элементов <path>
создают сложные формы, объединяя многочисленные прямые и кривые линии. Сложные формы из одних только прямых линий можно создавать и через элемент polyline
. Хотя результаты работы обоих элементов могут быть похожи, элемент polyline
отображает кривые как много маленьких прямых линий, что не очень хорошо масштабируется до больших размеров. Хорошее понимание path важно при рисовании SVG. При создании сложных paths не рекомендуется использовать XML или текстовые редакторы – понимание, как они работают, позволит установить и исправить проблемы с отображением SVG.
Форма элемента path определяется одним атрибутом: d
(смотри подробности в основные формы). Атрибут d
содержит серию команд и параметров, используемых этими командами. Мы опишем доступные команды и покажем примеры того, что они делают.
Каждая команда обозначается специальной буквой. Например, нам надо переместиться в точку с координатами (10,10). Команда «Передвинуть к» вызывается буквой M. Когда синтаксический анализатор наталкивается на эту команду, он знает, что необходимо переместиться к указанной точке. Итак, для перемещения к точке (10,10) используется команда «M 10 10», и далее синтаксический анализатор переходит к следующей команде.
Все команды существуют в двух вариантах: вызов команды с заглавной буквы обозначает абсолютные координаты на странице, а команда со строчной буквой -относительные (например, перемещение от последней точки на 10px вверх и 7px влево).
Координаты в атрибуте d
всегда пишутся без указания единиц измерения и находятся в системе пользовательских координат (обычно это пиксели). Позже мы рассмотрим, как элемент paths может быть трансформирован для других нужд.
Команды линии
Существуют пять команд линии для узлов <path>
. Первая команда — это «Переместиться к», или M, описанная выше. В качестве параметров она принимает координаты точки, к которой перемещается. Если курсор уже был где-либо на странице, между старым и новым местом линия не появится. Команда «Переместиться к» используется в начале элемента <path>
для указания точки, откуда начнется рисование, например:
M x y
или
m dx dy
Следующий пример рисует одну только точку (10,10). Заметьте, однако, что при обычном использовании <path>
она вообще не была бы видна.
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M10 10"/> <!-- Точки --> <circle cx="10" cy="10" r="2" fill="red"/> </svg>
Существуют три команды, которые рисуют линии. Самая общая — команда «Линия к», вызываемая буквой L. Эта команда принимает два параметра — координаты точки x и y — и рисует линию от текущего положения к этой точке.
L x y (или l dx dy)
Для рисования горизонтальных и вертикальных линий есть две укороченные формы . H рисует горизонтальную линию, а V рисует вертикальную линию. Обе команды используют только один аргумент, так как они движутся только в одном направлении.
H x (или h dx) V y (или v dy)
Начнем с рисования простой формы, например, прямоугольника (такого же, какой проще нарисовать с помощью элемента <rect>
). Он состоит только из горизонтальных и вертикальных линий:
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M10 10 H 90 V 90 H 10 L 10 10"/> <!-- Точки --> <circle cx="10" cy="10" r="2" fill="red"/> <circle cx="90" cy="90" r="2" fill="red"/> <circle cx="90" cy="10" r="2" fill="red"/> <circle cx="10" cy="90" r="2" fill="red"/> </svg>
Нашу запись в примере выше можно немного сократить , используя команду «Закрыть путь», Z
. Эта команда рисует прямую линию от текущего положения обратно к первой точке пути. Она часто встречается в конце узла пути, хотя и не всегда. Для нее регистр буквы не важен.
Z (или z)
Таким образом наш путь из примера можно сократить до:
<path d="M10 10 H 90 V 90 H 10 Z" fill="transparent" stroke="black"/>
Точно такую же картину можно получить с помощью относительных форм этих команд. Как уже говорилось, относительные команды вызываются использованием букв нижнего регистра и перемещают курсор относительно его последнего положения, а не к точным координатам . В нашем примере, поскольку размеры нашего квадрата — 80 x 80, элемент <path>
можно записать так:
<path d="M10 10 h 80 v 80 h -80 Z" fill="transparent" stroke="black"/>
Путь начнется от точки (10,10), пойдет горизонтально на 80 точек вправо, затем 80 точек вниз, затем 80 точек влево, и затем обратно к старту.
Возможно, в этих примерах было бы проще использовать элементы <polygon>
или <polyline>
.
Однако, пути используются при рисовании SVG настолько часто, что многим разработчикам может быть удобнее использовать их вместо других элементов. Нет никакой разницы в производительности при использовании того или другого.
Команды кривых линий
Существует три различных команды, которые вы можете использовать для создания плавных кривых линий. Две из этих кривых — кривые Безье, а третья — «дуга», или часть окружности. Вы, возможно, уже имели практический опыт с кривыми Безье, если работали с путями (paths) в программах lnkscape, Illustrator или Photoshop. Для полного описания математических понятий о кривых Безье, попробуйте пройти по ссылке на Wikipedia. Информации о кривых Безье слишком много, чтобы попытаться охватить ее здесь. Существует бесчисленное множество различных типов кривых Безье, но только две простые доступны для элементов путей: кубическая, C, и квадратная, Q.
Кривые Безье
Кубическая кривая, C, представляет собой немного более сложную кривую. Кубическая Безье принимает две контрольные точки для каждой точки. Таким образом, чтобы создать кубическую кривую Безье, вам необходимо указать три набора координат.
C x1 y1, x2 y2, x y (or c dx1 dy1, dx2 dy2, dx dy)
Последний набор координат (x,y) это точка, в которой заканчивается линия. Две другие — контрольные точки. (x1,y1) контрольная точка для начала вашей кривой, а (x2,y2) для конца вашей кривой. Если вы знакомы с вычислительной алгеброй, контрольные точки в описывают наклон вашей линии в каждой точке. Функция Безье создает плавную кривую, которая ведет от наклона, который вы установили в начале вашей линии к наклону на другом конце.
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M10 10 C 20 20, 40 20, 50 10" stroke="black" fill="transparent"/> <path d="M70 10 C 70 20, 120 20, 120 10" stroke="black" fill="transparent"/> <path d="M130 10 C 120 20, 180 20, 170 10" stroke="black" fill="transparent"/> <path d="M10 60 C 20 80, 40 80, 50 60" stroke="black" fill="transparent"/> <path d="M70 60 C 70 80, 110 80, 110 60" stroke="black" fill="transparent"/> <path d="M130 60 C 120 80, 180 80, 170 60" stroke="black" fill="transparent"/> <path d="M10 110 C 20 140, 40 140, 50 110" stroke="black" fill="transparent"/> <path d="M70 110 C 70 140, 110 140, 110 110" stroke="black" fill="transparent"/> <path d="M130 110 C 120 140, 180 140, 170 110" stroke="black" fill="transparent"/> </svg>
Пример сверху показывает девять кубических кривых Безье. Чем ближе к левому краю изображения, тем более горизонтально разделенными становятся контрольные точки. Ближе к правому, становятся более отделенными от конечных точек. Стоит отметить, что кривая начинается в направлении первой контрольной точки, а затем изгибается, переходя в направление второй контрольной точки.
Вы можете связать вместе несколько кривых Безье, чтобы создавать более длинные плавные формы. В таком случае часто контрольные точки на разных сторонах будут отображением друг друга (чтобы поддерживать постоянный наклон). В этом случае можно использовать сокращенную запись для кривой Безье, используя команду S (или s).
S x2 y2, x y (or s dx2 dy2, dx dy)
Команда S задаёт тот же тип кривой, что и был, но если он следует за другой S или C командой, подразумевается, что первая контрольная точка — отражение той, что использовалась перед этим. Если команда S не следует за другой командой S или C, то подразумевается, что обе контрольные точки для кривой одинаковы. Пример синтаксиса показан ниже. В фигуре слева контрольные точки показаны красным, а подразумеваемая контрольная точка — синим.
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" stroke="black" fill="transparent"/> </svg>
Другой тип кривой Безье — квадратичная кривая, задаётся командой Q. Квадратичная кривая проще, чем кубическая: для неё требуется только одна контрольная точка, которая определяет наклон кривой как в начальной, так и в конечной точке. Она принимает два аргумента: контрольную точку и конец кривой.
Q x1 y1, x y (or q dx1 dy1, dx dy)
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M10 80 Q 95 10 180 80" stroke="black" fill="transparent"/> </svg>
Как и в случае кубической кривой Безье, существует сокращение для соединения нескольких квадратичных кривых Безье -T.
T x y (or t dx dy)
Как и ранее, сокращение смотрит на предыдущую контрольную точку, которую вы использовали, и выводит из нее новую. Это означает, что после первой контрольной точки вы можете делать довольно сложные фигуры, указав только конечные точки.
Обратите внимание, что это работает только в том случае, если предыдущей командой была команда Q или T. Если это не так, то контрольная точка считается той же, что и предыдущая, и вы нарисуете только линии.
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M10 80 Q 52.5 10, 95 80 T 180 80" stroke="black" fill="transparent"/> </svg>
Обе кривые дают похожие результаты, но кубическая кривая позволяет больше свободы в том, как должна выглядеть кривая. Решение, какую кривую использовать — ситуационное и зависит от количества симметрии в линиях.
Дуги
Другой тип кривых линий, которые можно создать с помощью SVG — дуга (команда A). Дуги — секции кругов или эллипсов. При заданных x- и y-радиусах есть два эллипса, которые могут соединяться любыми двумя точками (пока они находятся внутри радиуса круга). Вдоль любого из этих кругов есть два пути, которые могут испольовать для соединения точек, так что в любой ситуации возможно 4 дуги.
A rx ry x-axis-rotation large-arc-flag sweep-flag x y a rx ry x-axis-rotation large-arc-flag sweep-flag dx dy
В начале элемент дуги принимает два аргумента радиусов. Если нужно, обратитесь к разделу Эллипсы, чтобы увидеть, как они работают. Последние два аргумента предназначены для обозначения координат окончания дуги. Вместе эти четыре значения определяют основную структуры дуги.
Третий параметр описывает поворот дуги. См. пример ниже
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M10 315 L 110 215 A 30 50 0 0 1 162.55 162.45 L 172.55 152.45 A 30 50 -45 0 1 215.1 109.9 L 315 10" stroke="black" fill="green" stroke-width="2" fill-opacity="0.5"/> </svg>
Пример показывает элемент path, который проходит по странице диагонально. В центре этого элемента вырезаны две эллиптические дуги (радиус x = 30, радиус y = 50). В первой дуге параметр x-asix-rotation = 0, а это означает, что эллипс, по которому проходит дуга (показан серым) расположен вертикально. Во второй дуге параметр x-asix-rotation = -45. Это поворачивает эллипс так, что направление его малой оси совпадает с направлением пути, как это видно на рисунке выше.
Четыре разных пути, упомянутых выше определяются с помощью двух аргументов-флагов. Как упоминалось ранее, есть ещё два возможных эллипса для обхода пути и два разных возможных пути на обоих эллипсах, что даёт четыре возможных пути. Первый аргумент — large-arc-flag. Он определяет, должна ли дуга быть больше или меньше 180 градусов. В конечном счёте этот флаг определяет, в каком направлении дуга будет обходить данный круг. Второй аргумент — sweep-flag. Он определяет, должна дуга двигаться по отрицательным углам или по положительным, т.е. по сути определяет по какому из двух кругов она будет идти. Пример ниже показывает все четыре возможные комбинации.
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M 10 315 L 110 215 A 36 60 0 0 1 150.71 170.29 L 172.55 152.45 A 30 50 -45 0 1 215.1 109.9 L 315 10" stroke="black" fill="green" stroke-width="2" fill-opacity="0.5"/> <circle cx="150.71" cy="170.29" r="2" fill="red"/> <circle cx="110" cy="215" r="2" fill="red"/> <ellipse cx="144.931" cy="229.512" rx="36" ry="60" fill="transparent" stroke="blue"/> <ellipse cx="115.779" cy="155.778" rx="36" ry="60" fill="transparent" stroke="blue"/> </svg>
Заметьте, что каждый голубой эллипс сформирован двумя дугами, в завимости от того движетесь ли вы по часовой или против часовой стрелке. Каждый эллипс имеет короткую и длинную дуги. Оба эллипса просто зеркальные отражения друг друга. Они отражены вдоль линии, сформированной start->end точками.
Если start->end точки расположены далеко и не попадают в пределы радусов эллипсов по x и y, то в этом случае радуисы эллипсов будут увеличены до величины, нужной чтобы достичь точек start->end. Интерактивный codepen внизу этой страницы наглядно это демонстрирует. Для определения достаточны ли велики радиусы ваших эллипсов чтобы требовать увеличения, вам нужно решить систему уравнений подобную этой на wolfram alpha. Это вычислиние для non-rotated эллипса с start->end (110, 215)->(150.71, 170.29). Решенимем, (x, y), является центр эллипса(ов). Следющее вычисление для non-rotated эллипса с start->end (110, 215)->(162.55, 162.45). Решение будет мнимым если радиусы ваших эллипсов слишком малы. Решение содержит небольшой мнимый компонент потому, что эллипсы были лишь слегка расширены.
Четыре разных пути, упомянутых выше определяются с помощью двух аргументов-флагов. Как упоминалось ранее, есть ещё два возможных эллипса для обхода пути и два разных возможных пути на обоих эллипсах, что даёт четыре возможных пути. Первый аргумент — large-arc-flag. Он определяет, должна ли дуга быть больше или меньше 180 градусов. В конечном счёте этот флаг определяет, в каком направлении дуга будет обходить данный круг. Второй аргумент — sweep-flag. Он определяет, должна дуга двигаться по отрицательным углам или по положительным, т.е. по сути определяет по какому из двух кругов она будет идти. Пример ниже показывает все четыре возможные комбинации.
<svg xmlns="http://www.w3.org/2000/svg"> <path d="M80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 Z" fill="green"/> <path d="M230 80 A 45 45, 0, 1, 0, 275 125 L 275 80 Z" fill="red"/> <path d="M80 230 A 45 45, 0, 0, 1, 125 275 L 125 230 Z" fill="purple"/> <path d="M230 230 A 45 45, 0, 1, 1, 275 275 L 275 230 Z" fill="blue"/> </svg>
Последние два аргумента, если вы ещё не догадались, обозначают координаты x и y, где заканчивается дуга. Дуги — лёгкий способ создавать части кругов или эллипсов в ваших рисунках. Например, круговая диаграмма требует отдельную дугу для каждого куска диаграммы.
Если вы переходите в SVG из Canvas`а, дуги могут быть самой трудной вещью для изучения, но они также очень мощные. Т.к. начальная и конечные точки для любого пути, обходящего круг, одно и то же место, существует бесконечное количество кругов, которые могут быть выбраны и действительный путь не определен. Возможно приблизить их, сделав начальную и конечную точку пути слегка разными и соединив их с другими сегментами пути. В этой точке, часто проще использовать настоящий круг или эллипс. Это интерактивное демо может помочь понять основные принципы SVG-дуг: http://codepen.io/lingtalfi/pen/yaLWJG (протестировано только в Хром и Файрфокс, может не работать в вашем браузере)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <svg> <symbol viewBox="0 0 611.989 611.988"> <g> <g> <g> <path d="M305.994,417.769c-30.85,0-55.887,25.037-55.887,55.887s25.038,55.887,55.887,55.887s55.887-25.037,55.887-55.887 S336.843,417.769,305.994,417.769z M605.436,222.369C530.697,133.434,421.549,82.446,305.994,82.446 S81.309,133.434,6.551,222.369c-9.93,11.811-8.402,29.434,3.428,39.363c5.234,4.396,11.587,6.558,17.939,6.558 c7.973,0,15.891-3.391,21.423-9.967c64.084-76.248,157.639-119.989,256.652-119.989c99.013,0,192.568,43.741,256.651,119.971 c5.533,6.576,13.45,9.967,21.424,9.967c6.353,0,12.724-2.143,17.958-6.558C613.837,251.802,615.366,234.161,605.436,222.369z M305.994,194.22c-82.545,0-160.489,36.419-213.879,99.926c-9.929,11.811-8.402,29.434,3.428,39.363 c5.234,4.396,11.605,6.558,17.958,6.558c7.973,0,15.891-3.391,21.405-9.967c42.716-50.838,105.086-79.993,171.089-79.993 c66.003,0,128.372,29.155,171.107,79.993c5.533,6.595,13.45,9.967,21.404,9.967c6.353,0,12.724-2.143,17.959-6.558 c11.829-9.929,13.356-27.57,3.428-39.363C466.483,230.64,388.539,194.22,305.994,194.22z M305.994,305.994 c-49.553,0-96.331,21.852-128.335,59.948c-9.93,11.811-8.402,29.434,3.428,39.363c5.234,4.396,11.605,6.557,17.958,6.557 c7.973,0,15.891-3.39,21.405-9.966c21.368-25.429,52.552-40.016,85.544-40.016s64.177,14.587,85.544,40.016 c5.533,6.595,13.45,9.966,21.405,9.966c6.353,0,12.724-2.142,17.958-6.557c11.83-9.93,13.357-27.553,3.428-39.363 C402.324,327.846,355.546,305.994,305.994,305.994z"/> </g> </g> </g> </symbol> </svg> <div> <div> <svg> <use xlink:href="#icon1"></use> </svg> </div> <div> Lorem ipsum dolor sit amet consectetur, adipisicing elit. Corrupti, laudantium. </div> </div> <div> <div> <svg> <use xlink:href="#icon1"></use> </svg> </div> <div> Lorem ipsum dolor sit amet consectetur, adipisicing elit. Corrupti, laudantium. </div> </div> |
Руководство дизайнера по работе с SVG — Pt 1
Фото: Энди Филд (Полевой Офис)
Какое же дело в SVG?
Разве вы не нажали « Сохранить как SVG » в Illustrator, и у вас есть SVG?
Да и нет. Хотя это технически верно, по той же логике, каждый пользователь MS Word является , технически веб-разработчиком.
Возможно, вопрос, который нужно задать: Является ли этот файл SVG более полезным, чем эквивалентный PNG или JPG?
Часто сгенерированные SVG-файлы, которые мы получаем из графических приложений, на самом деле не очень часто используются вне приложения, которое его создало.
Сила SVG в реальном становится яснее, когда вы получаете читаемый, управляемый документ — а не плотный, непонятный документ, извлеченный из графического приложения.
Сегодня я хочу дать вам краткое руководство по основам SVG и как получить файлы, с которыми вы можете работать.
В последующие недели мы расскажем о более интересных вещах, которые вы можете сделать с этими файлами.
SVG 101: Как создать SVG?
Возможно, самая крутая вещь в SVG — вам не нужно причудливое (или дорогое) программное обеспечение для их создания.Как и ваши HTML / CSS-файлы, вы можете создать SVG с не более чем надежным блокнотом, Textedit или даже VIM.
На самом деле, если вы никогда ранее не кодировали SVG вручную, попробуйте это:
- Запустите новый текстовый файл в вашем редакторе по вашему выбору.
- Добавьте следующие три строки:
svg>
- Сохраните файл как 000 как угодно.SVG ‘.
- Направьте свой браузер на это.
Вот, пожалуйста. Вы создали простую законченную графику меньше, чем нужно, чтобы написать твит.
Если бы мы хотели добавить красный прямоугольник после круга, мы могли бы добавить следующее.
Что если мы хотим сгруппировать круг и прямоугольник в один объект?
SVG имеет удобный элемент
Мы могли бы сделать что-то вроде этого.
Как видите, SVG относительно прост в написании и понимании. Если вы знаете свой HTML, это должно показаться вам знакомым.
Однако и будут временами, когда ручное кодирование сложной буквенной формы, значка или береговой линии карты становится непрактичным.Нам понадобится графический инструмент, который дает нам чистый, сырой SVG для работы.
Итак, давайте сначала кратко (и ни в коем случае не всесторонне) рассмотрим некоторые из основных графических редакторов, которые обрабатывают SVG — и как они работают.
Inkscape
Inkscape
Я начинаю с Inkscape, потому что, хотя он и не самый красивый, он мощный, бесплатный, он работает на всех платформах и может создавать очень приятный SVG.
Как и многие графические приложения, Inkscape имеет панель «Слои» в правом столбце.Каждый раз, когда вы называете один из этих слоев, это имя автоматически становится идентификатором группы в вашем SVG.
Это отличный способ начать структурирование и организацию SVG, прежде чем он станет кодом.
Экспорт SVG в Inkscape
Скорее всего, если вы знаете что-то об Inkscape, вероятно, Inkscape использует SVG в качестве формата по умолчанию.
Отлично, верно?
Не совсем.
Формат Inkscape по умолчанию, называемый «Inkscape SVG», на самом деле не тот, с которым вы хотите работать вне Inkscape.
Диалог экспорта для оптимизированных SVG в Inkscape.
Хорошо хранить эти файлы как «рабочие документы», но они полны специфичного для Inkscape кода, который бесполезен и вздут за пределами Inkscape.
Итак, когда вы сохраняете документ в Inkscape, вы увидите «Простой SVG» в виде формата чуть ниже «Inkscape SVG». Это намного лучше.
Более того, в этом списке форматов файлов вы увидите «Оптимизированный SVG».
Этот параметр «Оптимизированный SVG» предлагает диалоговое окно настроек экспорта (на рисунке), включая возможность обрезать десятичные разряды и вставлять растровые изображения.
Как этот «Оптимизированный SVG» сравнивается с форматом по умолчанию?
В качестве примера приведем очень простую буквенную форму SVG, которая составляет 2125 символов при просмотре в текстовом редакторе.
Inkscape по умолчанию SVG показывает лоты
ненужного кода
Посмотрите на разметку, и вы увидите строку за строкой свойств «inkscape» и «sodipodi», которые не имеют никакого значения за пределами Inkscape.
Тот же файл, экспортированный как «Оптимизированный SVG», становится 760 символами.
И даже этот файл может быть обрезан вручную до менее чем 500 символов без изменения способа рендеринга.
Короче говоря, всегда используйте опцию «Оптимизированный SVG» для любого файла, который вы собираетесь использовать в браузере.
Примечание: Параметр «Оптимизированный SVG» может потребовать установки дополнительного файла библиотеки Python. Если это станет для вас камнем преткновения, «Простой SVG» по-прежнему очень хороший вариант.
Adobe Illustrator CC
Adobe Illustrator давно может экспортировать SVG, но до недавнего времени это было довольно ужасно.
Хорошая новость заключается в том, что Adobe активизировала свою игру здесь, и экспорт SVG в Illustrator CC теперь довольно гибкий и эффективный.
Как и Inkscape, Illustrator преобразует все ваши имена слоев в группы SVG, поэтому используйте осмысленные названия слоев и не упустите возможность правильно организовать свою работу.
В разделе «Сохранить как» вы найдете SVG в раскрывающемся списке. Откроется диалоговое окно (показано), которое позволит вам установить уровни точности
Панель параметров экспорта в SVG Illustrator
Удивительный набор инструментов Illustrator также является его самым большим потенциалом SVG. Легко увлечься использованием экстравагантных кистей и фильтров, которые не имеют очевидных эквивалентов в SVG.
Большую часть времени результаты будут визуально неуклюжими и раздутыми, и вы начнете терять многие преимущества использования SVG.
Короче говоря: используйте Illustrator, но постарайтесь не слишком надумать.
Также обратите внимание, что более старая версия Illustrator будет экспортировать SVG, но вам придется вручную очистить файлы.
Веб-код
Интерфейс веб-кода
Веб-код— это вариант только для OS-X, который я рассмотрел несколько недель назад, поэтому здесь я не буду вдаваться в подробности.
Одним из важных аспектов Web-кода является его способность легко создавать резервные PNG или JPG из ваших SVG. Это также дает ваши чистые круги SVG, когда вы просите круги.
Достаточно сказать, что Webcode положительно поощряет вас создавать интеллектуальные, хорошо организованные SVG с самого начала с использованием SVG-ориентированного инструментария. Мне это нравится.
Эскиз
Sketch — это еще один вариант только для OS-X, который, кажется, вызвал огромный резонанс у дизайнеров. Фактически, наш собственный Питер Бакакс будет рассказывать о своем опыте перехода к Sketch в отдельной статье.Я отвлекся.
С точки зрения чистых наборов инструментов, Sketch, вероятно, более тесно связан с Adobe Fireworks или даже Illustrator, чем с Photoshop. У него есть сердце векторов, а не пикселей, что является хорошим началом.
Но можно ли написать хороший SVG?
Sketch, безусловно, является более широким инструментом графического дизайна, чем инструмент, ориентированный на программирование, такой как Webcode. Таким образом, в настоящее время Sketch не предоставляет вам доступ к коду SVG во время работы. Лично я считаю полезным видеть мой код перед началом экспорта.
Sketch имеет одну опцию «Экспортировать как SVG», поэтому в настоящее время нет способа отрегулировать или настроить вывод SVG по своему вкусу.
Однако, как говорится, код Sketch SVG так же чист и продуман, как и все, что я видел.
Adobe Fireworks
Хотя Fireworks так и не был разработан для написания SVG, расширение (SVG Export от Aaron Beale) успешно привносит в него сверхспособности SVG.
Обычно, вы можете ожидать, что такая запоздалая мысль даст плохие результаты, но на самом деле я получил отличные результаты от этого решения.
Он даже позволяет экспортировать более мелкие компоненты в рамках более крупного проекта. Это может быть полезно, когда вы собираете большую инфографику SVG или анимацию из меньших компонентов SVG.
Что нужно остерегаться:
- Экспортирует координаты пути в четыре десятичных знака. Это гораздо больше, чем мы хотим или хотим. Мы поговорим о том, как использовать SVG-оптимизаторы, чтобы исправить это позже.
- Как и Inkscape, Fireworks сохраняет прямоугольники без изменений, но при экспорте кажется, что они автоматически преобразуют круги в более сложные пути.
Короче говоря, если вы уже поклонник Fireworks, это действительно довольно хорошее решение.
Игровые площадки с кодомотлично подходят для оттачивания ваших SVG
Я нашел живые «игровые площадки кода», такие как CSSDeck.com и CodePen.io, невероятно полезные при работе с SVG.
Возможность редактировать SVG и видеть результаты в режиме реального времени действительно помогает вам понять, на что вы смотрите.
Просто откройте SVG в редакторе кода, скопируйте и вставьте его прямо в окно HTML.Эти приложения дают вам живую обратную связь, когда вы работаете с файлом, и являются отличным способом узнать, как работает SVG.
Использование CSS в вашем SVG
SVG начинает становиться действительно интересным, когда вы понимаете, что можете использовать блоков в верхней части вашего SVG-документа.
Как и в случае с HTML,это позволяет вам перемещать повторяющиеся свойства из ваших встроенных элементов в один верхний класс,что часто значительно уменьшает размер файла. Очевидно,что он также позволяет вносить изменения в масштаб всего документа из одной точки.
Например,возьмем такой элемент SVG:
Мы можем переместить свойства stroke,stroke-width и fill из этого элемента PATH и переместить его в класс:
<Стиль>.basecolor{ход:# 7f0000;ширина хода:3;заполните:# 7f7f00}Стиль>...
Теперь,в таком масштабе,это,очевидно,не имеет большого значения для размера вашего файла,но как только вы получаете сотни (или тысячи) компонентов изображения,совместно использующих класс,это становится большой проблемой.
Если вы думаете,что "вкл., Обводка, ширина обводки и заливка не являются допустимыми CSS",,они вполне допустимы в файле SVG. Фактически,вы можете переместить почти все свойства SVG в CSS,кроме таких вещей,как координаты,позиции и размеры.
Оптимизация кода SVG
Онлайн оптимизатор SVG Питера Коллингриджа.
Независимо от того,какой редактор вы используете,никто из них не пишет идеальный SVG-код. Поэтому стоит взглянуть на автономные оптимизаторы SVG.
Существует множество загружаемых приложений,но я предпочитаю онлайн-инструмент Питера Коллингриджа.
Как мы уже отмечали ранее,некоторые приложения будут экспортировать смехотворно точные координаты. Эта точность не только ничего не значит для рендеринга,что составляет 1/100 пикселя? - но это быстро уносит ваш размер файла в любой файл SVG,содержащий много координат.
Оптимизатор SVG Питера обрежет десятичные знаки в любом файле SVG,который вы ему предоставите. Один знак после запятой ДОЛЖЕН быть ПОЛНЫМ для большинства ситуаций - максимум два.
В документах с большим количеством путей я обнаружил,что это может сократить размер вашего файла более чем на треть - и в то же время облегчить чтение и понимание вашего файла.
В качестве примера,вот ПУТЬ для буквы «K» в Helvetica,экспортированной в SVG из Adobe Fireworks.
<путь d="
M 18 191 L 58,1684 191 L 58,1684 129,1406 L 73,5454 112,6903
L 128,6201 191 L 177 191 L 102,3118 83,5213 L 173,2865 6
L 123,9128 6 L 58,1684 76,4261 L 58,1684 6 L 18 6 L 18 191
L 18 191 Z "/>
Вот тот же самый PATH после того,как инструмент Питера сделал это.
<путь d="
M18 191 L58.2 191 58,2 129,1 73,5 112,7 128,6 191
177 191 102,3 83,5 173,3 6 123,9 6 58,2 76,4 58,2 6
18 6 18 191 18 191Z "/>
На глаз это отдает одинаково.
Имейте это в виду,в частности,карты SVG,значки или схемы,которые вы получаете из Wikimedia Commons или других онлайн-хранилищ. По моему опыту,большинству нужна любовь.
Оптимизатор Питера также может автоматически перемещать встроенные свойства SVG в блок стилей в верхней части документа.Это становится убийственной функцией на более сложных графических объектах,и я не знаю ни одного другого инструмента,который может автоматизировать этот процесс.
Это очень удобно. Определенно проверьте это.
И это конец первой части.
Это было немного учебника для будущих статей.
На следующей неделе мы займемся забавными вещами. Увидимся тогда!
,Как работать с иконками SVG
Март 2018 обновление:более надежный способ установки альтернативного текста,небольшие исправления.
Есть много способов использовать иконки SVG в HTML и CSS,и я не пробовал их все. Вот как мы это делаем в нашей небольшой команде разработчиков в Калиопе. Это хорошо работает для наших нужд,которые включают в себя:
- Сайты с контентом и коммуникациями,часто основанные на больших CMS,а не на полнофункциональных веб-приложениях JS.
- Значки,которые часто являются простыми одноцветными значками (каждая из которых может быть нескольких разных цветов в зависимости от контекста и взаимодействия с пользователем).Двухцветные иконки и градиентные заливки тоже возможны,но требуют немного больше работы.
- Поддержка IE11.
Эта статья доступна на французском и китайском языках. Большое спасибо переводчикам!
Подготовка ваших иконок
Когда вы получаете значок SVG от дизайнера или от используемого графического инструмента (Illustrator,Adobe Assets,Sketch,Inkscape и т. Д.),Возникает соблазн просто добавить его в ваш проект. Тем не менее,я считаю,что переработав его немного в вашем любимом инструменте,чтобы убедиться,что - это именно то,что нужно,может избавить вас от головной боли и улучшить результат.
Простая иконка на артборде в Illustrator (слева) и Sketch (справа)Работа с новым документом или артбордом
Создайте новый документ или новый артборд в своем любимом инструменте и скопируйте и вставьте иконку в центр. Это отличный способ убедиться,что ваша иконка чистая и не имеет тонны скрытых путей.
Квадрат легче
Ваша иконка не обязательно должна быть квадратной ,но с квадратными иконками работать легче (если ваша иконка или графика не очень широкие или очень высокие).
Точные размеры имеют значение только в том случае,если вы хотите микроуправлять пиксельной подгонкой (чтобы получить максимально четкие результаты на экранах с низким разрешением). Например,если все ваши значки могут уместиться на сетке 15 на 15 пикселей и в основном используются с такими точными размерами,продолжайте работать с артбордами или документами 15 × 15. Когда я не уверен,мне нравится устанавливать вещи на артборде 20 × 20.
Свежий по бокам
Оставьте немного места возле краев,особенно для круглых форм. Браузеры используют сглаживание при рендеринге форм SVG,но иногда дополнительные пиксели сглаживания отображаются вне viewBox
,и они обрезаются.
Как правило,в значке 16px или 20px оставляйте 0,5px или 1px пустого пространства с каждой стороны. Кроме того,не забудьте экспортировать весь артборд,а не выбранные пути в центре,иначе вы потеряете этот пробел в экспорте.
Экспорт в SVG
- В Illustrator я просто использую «Сохранить как» и выбираю «SVG» для формата.(Возможно,лучше использовать «Экспортировать как…» и выбрать SVG для оптимизированного результата.)
- В Sketch вы можете выбрать артборд,нажать «Make Exportable» в правом нижнем углу и выбрать «SVG» для формата.
- В Inkscape вы можете «Сохранить как» и выбрать «Оптимизированный SVG».
Узнайте немного SVG
Вы определенно должны изучить некоторые основы SVG и уметь читать и понимать структуру простых файлов SVG. В идеале вы должны знать об этом:
- Группирующие элементы:
,
<символ>
,
. - Визуальные элементы:
<путь>
,<прямоугольник>
,<круг>
,<линия>
. - Атрибуты оформления:
заливка
,ход
,ширина хода
.
Я склонен искать их в DevDocs (который просто предлагает более качественный просмотр документов MDN SVG),когда я хочу узнать больше. Вам не нужно делать это прямо сейчас,и вы можете начать свое SVG-приключение,скопировав код,но со временем полезно выучить достаточно,чтобы понять код,который вы копируете.
Когда вы экспортируете SVG из инструмента дизайна,у него часто будет немного или много ненужной разметки,метаданных и тому подобного. Он также может иметь слишком точные данные пути (в атрибуте d
). Попробуйте использовать инструмент,такой как SVGOMG,и сравните код до и после,чтобы увидеть,что удаляется или упрощается.
Удалить данные цвета
Для одноцветных значков убедитесь,что:
- В вашем исходном файле пути черные (
# 000000
). - В экспортированном коде нет
атрибутов заполнения
.
Если в исходном коде SVG есть жестко запрограммированные заливки,мы не сможем изменить эти цвета из нашего кода CSS. Так что,как правило,лучше удалить их,по крайней мере,для одноцветных значков.
Illustrator не выводит ,заполняет
атрибутов для пути,который полностью черный (# 000000
). В Sketch это возможно,поэтому вам,возможно,придется открыть экспортированный код SVG и вручную удалить атрибуты fill="# 000000"
.
Создание SVG-спрайта
В этой части много кода,но на самом деле он совсем не сложный. Мы хотим создать документ SVG,содержащий элементов
. Каждый <символ>
должен иметь атрибут id
,атрибут viewBox
и будет содержать значок
элементов (или других графических элементов).
Я называю этот документ SVG спрайтом (в отношении спрайтов в компьютерных играх и CSS),но его также можно назвать листом спрайтов или хранилищем символов.
Вот спрайт с одним значком:
Добавление иконки в наш спрайт
Скажите,что Illustrator дал нам этот код для показанного выше значка:
Xml version="1.0" encoding="utf-8"?>
Мы можем немного упростить его (вручную или с помощью SVGOMG),сохранив только атрибут 900B viewBox и необходимые данные:
Теперь мы можем скопировать и вставить его в наш спрайт. Нам нужно преобразовать элемент в элемент
и вставить его вручную в наш спрайт:
Вы можете сделать это вручную для всех ваших значков,но есть инструменты,которые автоматизируют процесс.Мы используем gulp-svg-symbols (вот наш gulp config,если вам интересно),но есть несколько графических инструментов и инструментов командной строки,которые экспортируют спрайты SVG-символов,включая Icomoon.
СоветPro:сохраняйте папку со значками источника
Если вы делаете свой спрайт вручную,я рекомендую хранить папку с отдельными значками SVG:
активов/иконки/cross.svg play.svg search.svg ... общественности/спрайт/icons.svg
Тогда,если вам нужно восстановить значки .SVG
или изменить отдельную иконку,у вас есть правильные источники для работы. Будьте осторожны,чтобы не позволить вашему спрайту и вашей исходной папке выйти из синхронизации.
Конечно,если вы используете процесс сборки (с Gulp,Webpack или чем-то еще),вы можете передать его в исходную папку и позволить ему создавать спрайт напрямую.
Важно:не все это икона
То,что что-то является SVG,не означает,что оно должно входить в ваш SVG-спрайт. Например:
Иллюстрации,которые не нужно стилизовать:сохраните их в виде одного файла SVG и включите в свою страницу с помощью
.
Иллюстрации,которые вы хотите анимировать:рассмотрите возможность встраивания полного кода SVG на свою HTML-страницу,чтобы вы могли выбирать и стилизовать определенные группы или пути или фигуры,анимировать некоторые части и т. Д.
Как правило,если это большая иллюстрация,которую нужно показывать с разрешением 100 на 100 пикселей или более,или если она содержит десятки элементов,это может быть не «значок». Возможно,это увеличит размер вашего спрайта.
Добавление значков на ваши страницы
Плохая новость заключается в том,что для использования наших SVG-значков мы должны изменить наш HTML-код.Нет CSS фонов,нет ::до
псевдоэлементов. Наименее подробный HTML-код,который мы можем использовать:
,который может выглядеть так:
Значок в стиле SVGТеперь мы собираемся сделать этот HTML-файл более многословным,чтобы сделать его более простым в оформлении и доступным. Сначала я покажу несколько общих шаблонов,а затем мы объясним каждый технический выбор.
Выкройка A:чисто декоративная икона
Шаблон B:ссылка или кнопка со значком и текстом
Последние новости
Шаблон C:ссылка или кнопка со значком
Это то же самое,что и (B),но мы хотим показать только значок.Мы все еще должны держать текст вокруг,чтобы пользователи программы чтения с экрана могли его прочитать.
Последние новости
Шаблон D:значок и альтернативный текст вне ссылки или кнопки
Например,если у нас был столбец таблицы со значками,представляющими «Да» и «Нет»:
Да
Что делают наши разные части HTML?
Использование значимых и локализованных этикеток
Некоторые статьи рекомендуют ассоциировать текстовую метку с каждым SVG-файлом в вашем хранилище значков (например,грамм. помещая
элемент в каждый
). Это ошибка,потому что визуальный символ может иметь разные значения в зависимости от контекста.
Значок «увеличительное стекло» может означать «Показать форму поиска» в одном контексте и «Отправить мой запрос поиска» во втором контексте. Ваши текстовые метки должны быть «Показать форму поиска» и «Отправить поисковый запрос»,а не «Поиск» (слишком общий) или,что еще хуже,«Увеличительное стекло» (описывает изображение,а не значение).
На многоязычных сайтах ваши текстовые метки также должны быть локализованы,включая все текстовые метки,которые по умолчанию скрыты для зрячих пользователей.
Внешние и встроенные спрайты
До сих пор мы показывали примеры для внешнего спрайта . Но некоторые старые браузеры - а именно IE 9 - IE 11 - поддерживают только встроенных ссылок для .
Это может быть заполнено некоторым JavaScript (svg4everybody,svgxuse).Или вы можете включить свой спрайт в код HTML каждой страницы .
<корпус>Кнопка <>Начать воспроизведение Кнопка >