Nam tristique vestibulum nulla nec accumsan. Nullam commodo eget dolor et ultricies. Nulla ligula elit, placerat a sapien vel, eleifend tincidunt nibh. Suspendisse porta fermentum dictum. Cras eget Maecenas tempus elit quis sapien tempus, sit amet viverra neque mattis. Quisque a tincidunt mi. Proin at justo eu ipsum posuere dignissim vel quis eros. Etiam at libero commodo, varius justo quis, interdum erat. Fusce viverra mollis est, nec euismod ante mattis ut. Aenean eu mauris viverra enim vulputate bibendum. Integer velit metus, cursus et commodo sit amet, gravida vitae purus. Sed scelerisque at odio non condimentum. Sed neque lacus, rhoncus vitae sem ut, pharetra vestibulum elit. Cras ultricies aliquam dolor quis ultrices. Cras eget mauris tincidunt, aliquam erat quis, faucibus augue.
Text Nam tristique vestibulum nulla nec accumsan. Nullam commodo eget dolor et ultricies. Nulla ligula elit, placerat a sapien vel, eleifend tincidunt nibh. Suspendisse porta fermentum dictum. Cras eget Maecenas tempus elit quis sapien tempus, sit amet viverra neque mattis. Quisque a tincidunt mi. Proin at justo eu ipsum posuere dignissim vel quis eros. Etiam at libero commodo, varius justo quis, interdum erat. Fusce viverra mollis est, nec euismod ante mattis ut. Aenean eu mauris viverra enim vulputate bibendum. Integer velit metus, cursus et commodo sit amet, gravida vitae purus. Sed scelerisque at odio non condimentum. Sed neque lacus, rhoncus vitae sem ut, pharetra vestibulum elit. Cras ultricies aliquam dolor quis ultrices. Cras eget mauris tincidunt, aliquam erat quis, faucibus augue.
SVG

Позвольте представить: SVG

Бухвалова Юлия, Livejournal

Позвольте представить:

SVG

Предисловие

Что такое SVG?

Scalable Vector Graphics — формат векторных изображений, основанный на XML.

Масштабируемость

Media Queries

«Машина с клоунами»

Фигуры

<path>

  • M, m — moveto
  • Z — closepath
  • L, l — lineto
  • H, h — horizontal lineto
  • V, v — vertical lineto
  • C, c — curveto
  • S, s — smooth curveto
  • Q, q — quadratic Bézier curveto
  • T, t — smooth quadratic Bézier curveto
  • A, a — elliptical arc

Доступность

<title>, <desc>

Картинки и текст

All you need is love All you need is love All you need is love, love Love is all you need
<path id="p-text-path" 
        d="m231.06494,94.11014c93.77408,..."/>
    </path>
<text x="0" dy="10">
          <textPath xlink:href="#p-text-path">
              Текст
          </textPath>
    </text>

Группировка и переиспользование

<g>

<use>

<defs>

<symbol>

<pattern>

Трансформации

Оформление элементов

Заливки

fill="hsl(50, 100%, 50%)"
fill="url(#gr-hot-cold-soft)"
fill="url(#pt-mosaic-colored)"

Прозрачность

Всё видно!

Градиенты

<linearGradient id="gr-simple"
    x1="0" y1="0" x2="100%" y2="50%">
    <stop stop-color="hsl(350,100%,45%)" offset="0"/>
    <stop stop-color="hsl(45,100%,75%)" offset="50%"/>
    <stop stop-color="hsl(200,100%,40%)" offset="100%"/>
</linearGradient>
<linearGradient id="gr-simple-stripes"
    x1="0" y1="0" x2="30%" y2="30%"
    gradientUnits="userSpaceOnUse" spreadMethod="repeat">
    <stop stop-color="hsl(350,100%,45%)" offset="0"/>
    <stop stop-color="hsl(350,100%,45%)" offset="33%"/>
    <stop stop-color="hsl(50,100%,70%)" offset="33%"/>
    <stop stop-color="hsl(50,100%,70%)" offset="66%"/>
    <stop stop-color="hsl(200,100%,40%)" offset="66%%"/>
    <stop stop-color="hsl(200,100%,40%)" offset="100%"/>
</linearGradient>
<radialGradient id="gr-radial-soft"
    r="70%">
    <stop stop-color="hsl(200,100%,40%)" offset="0"/>
    <stop stop-color="hsl(45,100%,75%)" offset="50%"/>
    <stop stop-color="hsl(350,100%,45%)" offset="100%"/>
</radialGradient>
<radialGradient id="gr-radial-soft-fxy"
    fx="90%" fy="90%">
    ...
</radialGradient>

Поддержка браузерами: wtf?

Repeating gradient with objectBoundingBox in Firefox

Обводки

Цвет, толщина

stroke: crimson;
stroke-width: 5;

Концы линий

  • stroke-linecap: butt

Сгибы

stroke как fill

Вид линий

  • stroke-dasharray: 5%;

Фильтры

Оформление текста

Tекст
Tекст
Tекст
Дрова Трава
Вода Огонь
Yo!

Маски

CSS-маски

SVG-маски

<clip-path>

+ =
<clippath id="clip-star">
          <polygon points="98.499..." />
      </clippath>
clip-path: url(#clip-star);
+ Text =
<clippath id="clip-text">
        <text x="0" y=".88em" class="clip-text">Text</text>
    </clippath>
.clip-text {
        font: bold italic 6.5em/1 Georgia;
        }
    
clip-path: url(#clip-text);
I SVG

<mask>

+ =
<mask id="mask" maskunits="userSpaceOnUse"
        maskcontentunits="userSpaceOnUse">
        <rect y="0" width="100%" height="100%" fill="black" />
        <g stroke="gray" stroke-width="12" fill="white">
            <circle cx="33%" cy="30%" r="20%" />
            <circle cx="52%" cy="62%" r="32%" />
         </g>
    </mask>
+ =
<mask id="mask-soft" maskunits="objectBoundingBox"
        maskcontentunits="objectBoundingBox">
        <rect y="0" width="1" height="1" 
            fill="url(#mask-radial-gradient)" />
    </mask>
  
+ =
<mask id="mask-lum-pattern">
          <image xlink:href="your-image.png"
              width="200" height="300" />
    </mask>
      mask: url(#mask);
    

Поддержка SVG-масок

Демо со всеми масками

Размеры

Ширина и высота

viewBox

viewBox + ширина & высота

preserveAspectRatio

Способы вставки

Проблемные места

SVG-стеки

<svg viewBox="0 0 200 200">
        <g id="no">
            <rect fill="#FF4646" width="200" height="200" rx="8"/>
                <text x="28" y="130">No.</text>
        </g>
        <g id="yes" class="hidden">
            <rect fill="#A2D529" width="200" height="200" rx="8"/>
                <text x="18" y="130">Yes!</text>
        </g>
    </svg>

Ожидания

Реальность: #yes?

Поддержка

SVG в дизайне

Шрифт

SVG

background: url(sprite.svg);
        background: url(data:image/svg+xml;base64,PHN2Zy...);
        background: url(data:image/svg+xml;utf8,<svg xmlns=...);
    
<svg>
            <use xlink:href="#umbrella"/>
        </svg>
    
Text
Fill:
None
Color
Gradient
Pattern
Text
Stroke:
None
Color
Gradient
Pattern
Text

currentColor

  • Home
  • Favorites
  • Options
  • Gallery
.icon {
        color: orangered;
        }
        .icon:hover {
            color: yellowgreen;
            }
    
.icon use {
        fill: currentColor;
        }
    

Разные штуки

path {
          stroke-width: 2;
          stroke-dasharray: 550 0;
          stroke-dashoffset: 570;
          animation: dashoffset 8s infinite alternate;
          }
      @keyframes dashoffset {
          100% {
              stroke-dashoffset: 0;
              }
          }
    
You win!

Полезные ссылки

Векторные редакторы

Сайты с SVG-графикой

Сборка

Оптимизация

Презентации

Послесловие

Используемые ресурсы

Бухвалова ЮлияLivejournal

Онлайн версия: yoksel.github.io/about-svg/

Qr-код со ссылкой на он-лайн версию

Powered by Shower