Вадим Макеев, Opera Software
SVG — Scalable Vector Graphics
Масштабируемая Векторная Графика
Застой с SVG 1.2 преодолён, весь упор на выпуск версии 2.0
Профили появились в SVG 1.1
31 августа Google заявил о начале индексации SVG
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
…
</svg>
<rect
x="100" y="100"
width="550" height="550"
fill="#FAFAA2" stroke="#000" stroke-width="50"
/>
<rect
x="100" y="100"
width="550" height="550" rx="120" ry="120"
fill="#FAFAA2" stroke="#000" stroke-width="50"
/>
<circle
cx="100" cy="100"
r="275"
fill="#FAFAA2" stroke="#000" stroke-width="50"
/>
<line
x1="230" y1="570"
x2="640" y2="490"
stroke="#000" stroke-width="50"
/>
<polyline
points="200,400 300,300 400,400"
fill="none"
stroke="#000" stroke-width="50"
/>
<polygon
points="197,197 430,100 660,198 758,430
662,663 429,760 197,663 100,432"
fill="#FAFAA2" stroke="#000" stroke-width="50"
/>
<path fill="#E11F21" d="M51.423,68.398c0-15.592,
0,14.807,17.41,14.807,33.001,c0,14.447-1.5,
51.423,82.842,51.423,68.398 M30,69.266,
2.519-32.819,14.829-32.819c12.307c,
c21.754,0,36.249-18.806,36.249-39,
452c0-23.206-14.923-38.669-36…"
/>
<circle cx="375" cy="375" r="275"
fill="url(#linear)"
stroke="#000" stroke-width="50"
/>
Исходные файлы: линейный и радиальный
<linearGradient id="linear"
x1="20%" y1="20%" x2="80%" y2="80%">
<stop stop-color="#FAFAA2" offset="10%"/>
<stop stop-color="#000" offset="50%"/>
<stop stop-color="#C00" offset="90%"/>
</linearGradient>
<radialGradient id="radial"
cx="20%" cy="20%">
<stop stop-color="#000" offset="30%"/>
<stop stop-color="#FAFAA2" offset="70%"/>
<stop stop-color="#C00" offset="100%"/>
</radialGradient>
SMIL → Synchronized Multimedia Integration Language *
Произносится как «смайл»
<circle r="22" class="ball"/>
<circle r="16" class="glow"/>
<circle r="12" class="hole"/>
Структура жабьего глаза: яблоко, радужка, зрачок
.ball { fill:#a89503; stroke:#000; stroke-width:2 }
.glow { fill:#FF0; filter:url(#blur) }
.hole { fill:#000; stroke:#C00; stroke-width:4 }
<filter id="blur">
<feGaussianBlur in="SourceGraphic" stdDeviation="2"/>
</filter>
<g transform="scale( 1, 0.2 )">
<circle class="glow"/>
<circle class="hole"/>
<animateTransform id="left1 … "/>
<animateTransform id="left2 … "/>
</g>
<animateTransform
id="left1" attributeName="transform"
begin="0;left2.end" type="scale"
to="1, 1" dur="0.5s" fill="freeze"
/>
Первый шаг анимации левого глаза
<animateTransform
id="left2" attributeName="transform"
begin="left1.end" type="scale"
to="1, 0.2" dur="0.5s"
/>
Второй шаг анимации левого глаза
<filter id="softfocus">
<feGaussianBlur/>
<feComposite/>
<feBlend/>
<feBlend/>
<feComposite/>
</filter>
#video {
filter:url(#softfocus)
}
<img src="noway.svg">
<audio loop src="noway.ogg"></audio>
<path
fill="#000" fill-opacity="0.4"
d="M553.199,164.241c6.957,2.722,13.914,5.445…
onclick="this.style.filter='url(#blur)'"
/>
<filter id="blur">
<feGaussianBlur
in="SourceGraphic" stdDeviation="15"
/>
</filter>
<img src="logo.svg" alt="Opera">
<input type="range" value="1000">
min="100" max="1000">
<g id="icon">
<g id="long">
<g id="short">
@media screen and (max-width:800px) {
#long { display:none }
#short { display:inline }
}
@media screen and (max-width:500px) {
#short { display:none }
}
<img src="logo.svg" width="512" height="512">
<img src="logo.svg" width="256" height="256">
<img src="logo.svg" width="128" height="128">
<img src="logo.svg" width="32" height="32">
<img src="logo.svg" width="16" height="16">
Одна и та же картинка разных размеров
<image id="icon-16" xlink:href="data:image/png…
<image id="icon-32" xlink:href="data:image/png…
<image id="icon-128" xlink:href="data:image/png…
<image id="icon-256" xlink:href="data:image/png…
<image id="icon-512" xlink:href="data:image/png…
Растровые иконки в base64
#icon-16, #icon-32, #icon-128, #icon-256, #icon-512 {
display:none;
}
@media screen and (width:16px) {
#icon-16 { display:inline }
}
Графика в base64 увеличивается в весе, однако…
PROFIT!
Вадим Макеев, Opera Software
Презентация: pepelsbey.net/pres/web-in-curves/