SVG In Motion SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 1
— Freelance front-end dev. — Wrote the Codrops CSS Reference. — Co-authored Smashing Book 5 — SVG advocate SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 2
What’s with all the vowel letters? — Swaïdaan — Swaydein — Sw-"eye"-daan SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 3
What we will cover (not in this particular order): 1. How to Embed SVG 2. The SVG viewBox 3. Animating the viewBox 4. SVG Animation Techniques: CSS, SMIL, JavaScript 5. SVG Sprite Animation Techniques 6. SVG Line Drawing Effects SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 4
6 Embedding Techniques SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 5
<img src="mySVG.svg" alt="..."/> 1) Image can be cached (Requires HTTP request. But: HTTP/2!). 2) No CSS interactions. 3) No scripting. 4) CSS animations work only if defined inside <svg> SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 6
<picture> <source type="image/svg+xml" srcset="path/to/image.svg"> <img src="path/to/fallback.png" alt="Image description"> </picture> Same as <img> Fallback is included inside <picture> SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 7
background-image: url(path/to/mySVG.svg); Same as <img> , but the SVG can be cached as part of the style sheet if it is inlined using data URIs. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 8
<object type="image/svg+xml" data="mySVG.svg"> <!-- fallback here; beware of multiple requests --> </object> 1) Image cached. 2) Scripting. 3) Default fallback mechanism. 4) CSS animations and interactions work only if defined inside <svg> SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 9
<iframe src="mySVG.svg"> <!-- fallback here --> </iframe> Same as <object> SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 10
<svg xmlns="http://www.w3.org/2000/svg" …> <!-- svg content --> </svg> 1) Image is not cached. 2) No extra HTTP requests. 3) Scripting. 4) CSS animations and interactions. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 11
Need to provide Fallback? Read this guide: https://css- tricks.com/a-complete-guide-to-svg-fallbacks/ SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 12
Which embedding technique should you choose?! — Is the SVG animated? — Is it interactive? — What kind of animation? (Does it require JS?) — What browser support do I need (for the animation)? — What kind of content and fallback do you need? (e.g. infographics) SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 13
Quick Animation Recap SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 14
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 15
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 16
Accessing an embedded SVG document ( <object> ): window.onload=function() { // Get the Object by ID var a = document.getElementById("svgObject"); // Get the SVG document inside the Object tag var svgDoc = a.contentDocument; // Get one of the SVG items by ID; var svgItem = svgDoc.getElementById("svgItem"); // Set the colour to something else svgItem.setAttribute("fill", "lime"); }; *script accessing the SVG from main page must be CORS compatible SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 17
To Optimize or Not To Optimize SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 18
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 19
Optimization tools usually change the SVG document structure, and can break any animations you’ve set up. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 20
CSS, SMIL or JavaScript? SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 21
— SMIL has been deprecated. — Use CSS only for simple animations. — Use JavaScript for complex animations. Re SMIL: You can use a polyfill if you need to make it work. Follow this guide for details on how to use it. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 22
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 23
Animating SVG with CSS: The Good, the Bad and the Ugly SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 24
1) The list of SVG attributes that can be animated with CSS is limited (in SVG 1.1). 2) In SVG2, the list is extended. 3) Most properties are animated on SVG elements just like they are animated on HTML elements. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 25
Using these properties, you can apply animations and transitions to SVG elements just like you would with HTMl elements, using the main CSS selectors: rect { } #myPath { } .circle { } SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 26
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 27
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 28
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 29
path { transition: d .6s ease-in-out; } path.open { d: "M20.308,..."; } SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 30
<path> <animate attributeName="d" dur="1440ms" repeatCount="indefinite" keyTimes=".." calcMode="spline" keySplines=".." values="M 0,0 C 50,0 50,0 100,0 100,50 100,50 100,100 50,100 50,100 0,100 0,50 0,50 0,0 Z; M 0,0 C 50,0 50,0 100,0 100,50 100,50 100,100 50,100 50,100 0,100 0,50 0,50 0,0 Z; ..."/> https://css-tricks.com/guide-svg-animations-smil/ SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 31
CSS Transformations on SVG elements: SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 32
<!DOCTYPE html> <div style="width: 100px; height: 100px; background-color: orange"> </div> <svg style="width: 150px; height: 150px; background-color: #eee"> <rect width="100" height="100" x="25" y="25" fill="orange" /> </svg> SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 33
Change the tranform-origin value: 1. Using percentage values: The value is set relative to the element's bounding box, which includes the stroke used to draw its border. 2. Using absolute values: The origin is set relative to the entire SVG canvas . SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 34
http://greensock.com/svg-tips *Firefox bug has been fixed in FF44. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 35
http://greensock.com/svg-tips SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 36
CSS transforms don’t work in IE/Edge. ! SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 37
CSS 3D Transforms on SVG Elements? Don’t count on them yet. You can use standard sprite animation to achieve 3D animation effects. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 38
What about performance? Some useful (possibly outdated) benchmarks: https:// css-tricks.com/weighing-svg-animation-techniques- benchmarks/ SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 39
The SVG viewBox SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 40
The viewBox is made up of four numerical values: the first two determine the coordinates of the origin of the system, and the other two determine the system’s finite dimensions. viewBox = <min-x> <min-y> <width> <height> These values are animatable. SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 41
SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 42
By changing the value of the viewBox , you change the area of the canvas that is visible inside the SVG viewport. This enables you to zoom in to specific areas or objects. But how do you determine the value for the viewBox to use, to zoom into a particular area of choice? SVG for Web Designers & Developers | @SaraSoueidan | SaraSoueidan.com 43
Recommend
More recommend