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"
/>
<rect
x="100" y="100" rx="120" ry="120"
width="550" height="550"
fill="#FAFAA2" stroke="#000"
/>
<circle
cx="100" cy="100" r="275"
fill="#FAFAA2" stroke="#000"
/>
<line
x1="230" y1="570"
x2="640" y2="490"
stroke="#000"
/>
<polyline
points="200,400 300,300 400,400"
fill="none" stroke="#000"
/>
<polygon
points="197,197 430,100 660,198 758,430
662,663 429,760 197,663 100,432"
fill="#FAFAA2" stroke="#000"
/>
<path fill="#E11F21" d="M51.423,68.398c0,
0,14.807,17.41,14.807,33.001,c0,14.44,
51.423,82.842,51.423,68.398 M30,69.6,
2.519-32.819,14.829-32.819c12.307c,
c21.754,0,36.249-18.806,36.49-39,
452c0-23.206-14.923-38.669-36…"
/>
<circle cx="375" cy="375" r="275"
fill="url(>#linear)"
stroke="#000"
/>
Исходные файлы: линейный и радиальный.
<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 *
Произносится как «смайл».
<rect width="50" height="150"
rx="25" ry="25" id="rect"/>
<use x="225" y="0" xlink:href="#rect"/>
<use x="225" y="350" xlink:href="#rect"/>
<animateTransform attributeName="transform"
type="rotate" dur="0.6s" calcMode="discrete"
values=" 45,250,250; 90,250,250; 135,250,250;
180,250,250; 225,250,250; 270,250,250;
315,250,250; 360,250,250"
repeatCount="indefinite"
/>
<circle r="22" class="ball"/>
<circle r="16" class="glow"/>
<circle r="12" class="hole"/>
Структура жабьего глаза: яблоко, радужка, зрачок.
.ball { fill: #a89503; stroke: #000 }
.glow { fill: #FF0; filter: url(#blur) }
.hole { fill: #000; stroke: #C00 }
<filter id="blur">
<feGaussianBlur 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…
onclick="this.style.filter='url(#blur)'"
/>
<filter id="blur">
<feGaussianBlur
in="SourceGraphic" stdDeviation="15"
/>
</filter>
<img src="logo.svg" alt="Opera Software">
<input type="range" 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 id="icon-32" xlink:href="data…
<image id="icon-128" xlink:href="data…
<image id="icon-256" xlink:href="data…
<image id="icon-512" xlink:href="data…
Растровые иконки в 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