Scalable Vector Graphics FTW!

48
SCALABLE VECTOR GRAPHICS FTW! En introduksjon til bruk av SVG på web i dag! TDC 2013 Stian Møllersen & Jonas Follesø 31/01/2013

description

Example code: https://github.com/follesoe/svgftw I gamle dager het det seg at man kun skal bruke table-elementet for tabeller, mens CSS skal brukes til layout. Er tiden inne for å kunne lage en ny regel som heter at raster-grafikk kun skal brukes for fotografier, mens alt annet burde være vektor-grafikk? SVG begynner å bli en moden og utbredt standard som er klar til å tas i bruk i dag. SVG muliggjør skalerbar vektorgrafikk, som gir deg illustrasjoner, ikoner og figurer som skalerer uavhengig av størrelse og skjermoppløsning. I denne presentasjonen får du en gjennomgang av SVG standarden. Vi vil se på historien til SVG og nettleserstøtte, før vi begynner med noen enkle brukstilfeller for SVG. Gradvis vil vi se på mer avanserte scenarioer, som bruk filtre og effekter, dynamisk generering av vektorgrafikk, animasjon, samt hvordan eksportere til SVG fra kjente designverktøy. Presentasjonen er i stor grad basert på erfaringer fra prosjekt hvor alt av grafikk er gjort ved hjelp av SVG.

Transcript of Scalable Vector Graphics FTW!

Page 1: Scalable Vector Graphics FTW!

SCALABLE VECTOR GRAPHICS FTW!

En introduksjon til bruk av SVG på web i dag!

TDC 2013Stian Møllersen & Jonas Follesø31/01/2013

Page 2: Scalable Vector Graphics FTW!

OM OSS

Scientist & Manager BEKK Trondheim

@follesoe

Jonas Follesø

Konsulent BEKK Trondheim

@mollerse

Stian Møllersen

Page 3: Scalable Vector Graphics FTW!

AGENDA

Del 1 – Hva er SVG?

Del 2 – Historien til SVG

Del 3 – SVG bilder & Optimalisering

Del 4 – Interaktiv SVG

Del 5 – Animasjoner & Responsive SVG

Del 6 – JS biblioteker for SVG

Del 7 – Oppsummering

Page 4: Scalable Vector Graphics FTW!

SVG

…a language for describing two-

dimensional

vector graphics in XML, combined with

raster graphics and multimedia…

- W3C

Page 5: Scalable Vector Graphics FTW!
Page 6: Scalable Vector Graphics FTW!

SVG

SVGHello World

Page 7: Scalable Vector Graphics FTW!

<!doctype html><html><body> <svg width="640" height="480"> <ellipse ry="47" rx="47" cy="96" cx="95" stroke-width="5" stroke="#000000" fill="#FF0000"/> <rect height="57" width="95" y="56" x="165" stroke-width="5" stroke="#000000" fill="#00bf00"/> <text font-family="serif" font-size="24" y="182" x="108" stroke-dasharray="null" fill="#000000">Hello World</text> </svg> </body></html>

SVG Hello World

Page 8: Scalable Vector Graphics FTW!

EirDemo

Page 9: Scalable Vector Graphics FTW!

1999

Page 10: Scalable Vector Graphics FTW!

SVG HISTORIE

1999

April: Adobedemonstrerer rendring

Feb: W3C med første utkast

2001

Sep: W3C SVG 1.0 Recommendation

2003

Okt: W3C med første utkast til SVG 1.1 med profileneSVG Tiny & SVG Mobile

Jan: W3C SVG 1.1 Recommendation

2004

Feb: Siemens CX64med SVG Tiny

April: Sony EriccsonK700 med SVG Tiny

Page 11: Scalable Vector Graphics FTW!

SVG HISTORIE

2003

Jan: W3C SVG 1.1 Recommendation

2004

Feb: Siemens CX64med SVG Tiny

April: Sony EriccsonK700 med SVG Tiny

2008

Des: W3C SVG 1.1 Recommendation

2010

Mai: Inline SVGdel av HTML5

2011

Aug: W3C SVG 1.1Second Edition

2014

Aug: W3CSVG 2.0Recommendation

Page 12: Scalable Vector Graphics FTW!

NETTLESERSTØTTE SVG 1.1

Siden 2004 Siden 2005(Gecko)

Siden 2006(WebKit)

Siden 2011 (!)

Page 13: Scalable Vector Graphics FTW!
Page 14: Scalable Vector Graphics FTW!

FINN.NO SOMMER 2013

IE8 & IE7 utgjør 6%

Page 15: Scalable Vector Graphics FTW!

Eksempel:Logo som

SVG

Page 16: Scalable Vector Graphics FTW!

<!doctype html><html><body> <img src="logo.svg" /></body></html>

SVG sombilde

Page 17: Scalable Vector Graphics FTW!
Page 18: Scalable Vector Graphics FTW!

<!doctype html><html><head> <script src="modernizr.js"></script> <script src="jquery.js"></script></head><body> <img src="logo.svg" /> <script> if(!Modernizr.svg) { $('img[src*="svg"]').attr('src', function() { return $(this).attr('src').replace('.svg', '.png'); }); } </script></body></html>

Bytte ut SVG med

PNG

Page 19: Scalable Vector Graphics FTW!

<!doctype html><html><body> <object type="image/svg+xml" data="logo.svg"> <img src="logo.png"/> </object></body></html>

Bruke object-tag

Page 20: Scalable Vector Graphics FTW!

<!doctype html><html><body> <!--[if lte IE 8]><img src="logo.png" /><![endif]--> <!--[if gt IE 8]><img src="logo.svg" /><![endif]--> <!--[if !IE]> --><img src="logo.svg" /><!-- <![endif]--></body></html>

Bruke IE-conditional

s

Page 21: Scalable Vector Graphics FTW!
Page 22: Scalable Vector Graphics FTW!

Størrelse?

Page 23: Scalable Vector Graphics FTW!

$ npm install -g svgo

$ svgo logo.svg logo.min.svg

Done in 411 ms!286.466 KiB - 59.5% = 115.973 KiB

$ svgo logo.svg -o - | gzip -cfq9 > logo.min.svgz$ 18.975 KiB logo.min.svgz

Komprimering

https://github.com/svg/svgo

Page 24: Scalable Vector Graphics FTW!

OPTIMALISERING OG KOMPRIMERING AV SVG

Filnavn Metode Størrelse Av original

logo.svg Original fil 293 KB 100%

logo.svgz Gzip 35 KB 11.94%

logo.min.svg SVGO 119 KB 40.61%

logo.min.svgz SVGO + Gzip 19 KB 6.48%

Page 25: Scalable Vector Graphics FTW!

Eksempel:InteraktivSVG figur

Page 26: Scalable Vector Graphics FTW!
Page 27: Scalable Vector Graphics FTW!

Eksempel:ResponsiveSVG icons

Page 28: Scalable Vector Graphics FTW!

RESPONSIVE ICONS

• Vektorgrafikk skalerer bra opp og ned

• .. til en viss grad

• skalerer vi detaljert figur ned blir den til slutt utydelig

Page 29: Scalable Vector Graphics FTW!

Endre detaljnivå

når figuren blir mindre

Page 30: Scalable Vector Graphics FTW!

CSS MEDIA QUERIES

• Kan bruke CSS Media Queries til å endre SVG ved gitte størrelser

• SVG Viewport er img-elementet sin størrelse

<img src="octocat.svg" id="octocat" width="100%" />

<svg> <style> @media screen and (max-width: 64px) { #catface { display: none; } } </style> ...<svg>

Page 31: Scalable Vector Graphics FTW!

Eksempel:Animasjon

Page 32: Scalable Vector Graphics FTW!

ANIMASJON

CSS3 Transitions

CSS3Animations

JS setTimeout

SVGAnimations

Page 33: Scalable Vector Graphics FTW!

CSS3 TRANSITION<svg width="100" height="100"> <style> .csstransition { fill: black; } .csstransition:hover { fill: teal; transition-property: fill; transition-duration: 1s; } </style> <rect class="csstransition" width="100" height="100" /></svg>

CSS3 Transitions

Page 34: Scalable Vector Graphics FTW!

CSS3 ANIMATION<svg width="100" height="100"> <style> @-webkit-keyframes fill { from { fill: black; } to { fill: teal; } } .cssanim:hover { -webkit-animation-name: fill; -webkit-animation-duration: 1s; } </style> <rect class="cssanim" width="100" height="100" /></svg>

CSS3Animations

Page 35: Scalable Vector Graphics FTW!

SVG ANIMATION

<svg width="100" height="100"> <rect width="100" height="100"> <animate attributeName="fill" from="black" to="purple" dur="1s" begin="mouseover" /> </rect></svg>

SVGAnimations

Page 36: Scalable Vector Graphics FTW!

JAVASCRIPT BASERT ANIMASJON<svg width="100" height="100"> <rect id="jsRect" width="100" height="100" /></svg>

<script src="jquery.svg.js"></script><script src="jquery.svganim.js"></script><script> $("#jsRect").mouseover(function() { $(this).animate({ "svgFill": "green" }, 1000); });

$("#jsRect").mouseout(function() { $(this).animate({ "svgFill": "black" }, 1000); }); </script>

JS setTimeou

t

Page 37: Scalable Vector Graphics FTW!

JavaScriptbiblioteker

for SVG

Page 38: Scalable Vector Graphics FTW!

SVG MED JAVASCRIPT

• Generere og manipulere

• Lavt abstraksjonsnivå

• <rect /> blir rect();

Page 39: Scalable Vector Graphics FTW!

RAPHAËL.JS

• Håndtere SVG med

JavaScript

• VML-fallback for IE<9

• raphaeljs.com

Page 40: Scalable Vector Graphics FTW!

SNAP.SVG

• Bygger på Raphaël.js

• Moderne API

• Ingen IE<9 fallback

• snapsvg.io

Page 41: Scalable Vector Graphics FTW!

var s = Snap(600,600);Snap.load('tdc.svg', function(f) {

//Her er tdc.svg tilgjengeligs.add(f);

var T = s.select('#letterT'), D = s.select('#letterD'), C = s.select('#letterC'), text = s.select('#text');

text.attr({ transform: "translate(-900, -350) scale(2.8)" });

setTimeout(shrinkAndTranslateText, 1500);setTimeout(fadeIn(T), 2000);

setTimeout(fadeIn(D), 2200); setTimeout(fadeIn(C), 2400);});

ManipulereEksisteren

deSVG

Page 42: Scalable Vector Graphics FTW!

var s = Snap(600,600);Snap.load('tdc.svg', function(f) {

var T = s.select('#letterT'), D = s.select('#letterD'), C = s.select('#letterC'), text = s.select('#text');

T.hover(zoomAndRotate(T, 25), reset(T)); D.hover(zoomAndRotate(D, -15), reset(D)); C.hover(zoomAndRotate(C, 15), reset(C));});

ManipulereEksisteren

deSVG

Page 43: Scalable Vector Graphics FTW!

Demo

Page 44: Scalable Vector Graphics FTW!

function renderC() {sirkel = s.circle(cx, cy, radius);sirkel.attr({

'stroke': '#333','fill': '#bada55','strokeWidth': 3

});mask = s.rect(maskX, maskY, maskWidth, maskHeight);mask.attr({

'fill': '#FFF'});sirkel.attr({

'mask': mask});

};

setTimeout(renderC, 2000);

DynamiskGenerere

SVG

Page 45: Scalable Vector Graphics FTW!

setTimeout(renderTPole, 0);setTimeout(renderTBar, 300);setTimeout(renderDBar, 600);setTimeout(renderDBulge, 1000);setTimeout(renderC, 2000);setTimeout(render13Text, 2200);setTimeout(renderUnderline, 2200);

DynamiskGenerere

SVG

Page 46: Scalable Vector Graphics FTW!

Demo

Page 47: Scalable Vector Graphics FTW!

Oppsummering

2D vektorgrafikk for web i XML

Gammel standard, god

støtte, men kun IE9 og

nyere

Del av DOM og kan

manipuleres med CSS og

JS

SVG er klart og alle burde

bruke det!Begynn med noe enkelt –

f.eks. logo som SVG

Page 48: Scalable Vector Graphics FTW!

TAKK FOR OSS!

Stian MøllersenJonas Follesø

http://github.com/follesoe/svgftw