<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://jeremie.patonnier.net/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Chez Jérémie - Mot-clé - SVG</title>
  <link>http://jeremie.patonnier.net/</link>
  <atom:link href="http://jeremie.patonnier.net/feed/tag/SVG/rss2" rel="self" type="application/rss+xml"/>
  <description>Chez Jérémie, parfois c'est sérieux, parfois non !</description>
  <language>fr</language>
  <pubDate>Tue, 04 Jul 2017 19:32:17 +0200</pubDate>
  <copyright>Creative Commons BY-NC-SA 2.0 Fr</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>

  
  <item>
    <title>Des effets pour le Web</title>
    <link>http://jeremie.patonnier.net/post/2012/01/12/Des-effets-pour-le-Web</link>
    <guid isPermaLink="false">urn:md5:16a6f2bb353a700e14ca0bed0405a292</guid>
    <pubDate>Thu, 12 Jan 2012 09:00:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>Firefox</category><category>Internet Explorer</category><category>SVG</category><category>webdesign</category><category>Webkit</category>
    <description>&lt;p&gt;Cet article est la traduction d&amp;#8217;&lt;a hreflang=&quot;en&quot; href=&quot;http://drublic.de/blog/effects-for-the-web/&quot;&gt;un article de Christian «&amp;#160;Schepp&amp;#160;» Schaefer&lt;/a&gt; à propos des nouvelles propriétés de filtres CSS3 et montre comment commencer à les utiliser tout en proposant des solution de repli basées sur ce que supportent les navigateurs actuels.&lt;/p&gt;    &lt;p&gt;A la fin des années 90, CSS 2.1 nous a fourni un ensemble d&amp;#8217;outils de base pour pouvoir enfin se débarrasser des mises en page en tableaux. Maintenant c&amp;#8217;est le tour de CSS3 qui nous donne de nouveaux outils plus précis pour gérer les détails de mise en forme&amp;#160;: Les fontes embarquées, les coins arrondis, les dégradés, la transparence des éléments et des couleurs, les ombre portées sur le texte et les boites, etc.&lt;/p&gt;
&lt;p&gt;Évidement, lorsqu&amp;#8217;on compare notre outillage à celui de logiciels comme Photoshop, on se dit qu&amp;#8217;on pourrait rêver mieux. Ce genre de logiciel permet, par exemple, de désaturer une image ou bien de la rendre plus nette ou plus floue. Pourquoi aurions-nous besoin de ce genre d&amp;#8217;outil pour le Web&amp;#160;? Et bien, désaturer ou flouter une partie de page Web peut être un moyen de guider le regard de vos visiteurs sur des zones choisies. Ça pourrais aussi aider vos visiteurs à concentrer leur attention sur les zones qui n&amp;#8217;ont pas été modifiées. Par exemple, on peut utiliser ce genre d&amp;#8217;effets pour mettre en scène une galerie d&amp;#8217;images&amp;#160;:&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://mikematas.com/#%21g9/2nLk/photos/one_week_in_japan_-_3_of_5&quot;&gt;&lt;img title=&quot;Mike Matas - One Week In Japan&quot; alt=&quot;Mike Matas - One Week In Japan&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/Mike-Matas-One-Week-In-Japan.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;D&amp;#8217;un autre coté, un effet de netteté peut être utile lorsque vous réduisez une image dans le navigateur. Sans lui, vous allez perdre un certain nombre de détails sur cette image.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;sharpen.jpg&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/sharpen.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Voila, ce serait génial si nous pouvions avoir ce genre d&amp;#8217;effets à notre disposition, un peu comme la propriété CSS &lt;code&gt;opacity&lt;/code&gt; qui nous permet de rendre un élément transparent. Malheureusement, ce n&amp;#8217;est pas le cas.&lt;/p&gt;
&lt;h2&gt;Le &lt;em&gt;status quo&lt;/em&gt; actuel&lt;/h2&gt;
&lt;p&gt;Au lieu de cela, pour simuler un effet de désaturation/niveau de gris nous sommes actuellement obligés de passer en revue «&amp;#160;à la main&amp;#160;», via Javascript, toutes les propriétés utilisant de la couleur sur un éléments donnée pour leur attribuer la valeur de gris que l&amp;#8217;on veut. Dès que l&amp;#8217;on doit faire face à des images ou de la vidéo, c&amp;#8217;est encore plus compliqué&amp;#160;: Dans ce cas-là, nous avons besoin de nous appuyer sur la balise &lt;a hreflang=&quot;en&quot; href=&quot;http://spyrestudios.com/html5-canvas-image-effects-black-white/&quot;&gt;Canvas de HTML5 pour pouvoir changer leur couleur pixel par pixel&lt;/a&gt; puis pour remplacer l&amp;#8217;élément d&amp;#8217;origine. Même si nous nous appuyons sur des bibliothèques tel que &lt;a hreflang=&quot;en&quot; href=&quot;http://camanjs.com/examples&quot;&gt;CamanJS&lt;/a&gt; ou &lt;a hreflang=&quot;en&quot; href=&quot;http://www.iliasiovis.com/hoverizr/&quot;&gt;Hoverizr&lt;/a&gt;, ça reste quand même un truc assez sale.&lt;/p&gt;
&lt;p&gt;Un effet de flou peut également être simulé à l&amp;#8217;aide des propriétés &lt;a hreflang=&quot;de&quot; href=&quot;http://webstandard.kulando.de/post/2011/12/09/css3-text-shadow-erzeugt-blur-effekt-tag-10-im-css3-adventskalender-2011&quot;&gt;text-shadow&lt;/a&gt; et &lt;a hreflang=&quot;en&quot; href=&quot;http://tympanus.net/codrops/2011/12/14/item-blur-effect-with-css3-and-jquery/&quot;&gt;box-shadow&lt;/a&gt; en leur appliquant la même couleur que le texte ou l&amp;#8217;arrière-plan auquel elles se rapportent. Le problème, c&amp;#8217;est que cette illusion ne fonctionnera pas avec les boîtes multicolores non plus qu&amp;#8217;avec les images ou les vidéos comme précédemment. Une fois de plus, il faudra se reposer sur des manipulation à base de Canvas HTML5. Arf!&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://tympanus.net/codrops/2011/12/14/item-blur-effect-with-css3-and-jquery/&quot;&gt;&lt;img alt=&quot;Item Blur Effect with CSS3 and jQuery&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/Item-Blur-Effect-with-CSS3-and-jQuery-Google-Chrome_2011-12-18_11-37-58.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Á propos de la balise Canvas: La bibliothèque &lt;a hreflang=&quot;en&quot; href=&quot;https://github.com/pmura/blurry.js&quot;&gt;blurry.js&lt;/a&gt; propose une solution particulièrement brutale à cette histoire de flou. Elle va extraire tout le contenu à flouter, va le recréer dans une balise Canvas (en utilisant partiellement Cufón), va le flouter et enfin va réinjecter le tout à l&amp;#8217;emplacement de l’original.&lt;/p&gt;
&lt;p&gt;En ce qui concerne la netteté, il n&amp;#8217;existe actuellement aucun truc basé sur CSS pour réaliser un tel effet, ce qui nous laisse une fois de plus seul face à la balise Canvas.&lt;/p&gt;
&lt;h2&gt;SVG à la rescousse&lt;/h2&gt;
&lt;p&gt;Il est intéressant de noter que SVG connaît la notion de &lt;a hreflang=&quot;en&quot; href=&quot;http://electricbeach.org/?p=950&quot;&gt;filtres&lt;/a&gt; depuis des lustres avec, entre autre, les mélanges de couleurs, l&amp;#8217;ajustement de la luminosité et du contraste, les effets d&amp;#8217;éclairage, le «&amp;#160;&lt;em lang=&quot;en&quot;&gt;displacement mapping&lt;/em&gt;&amp;#160;», les flous gaussien et de déplacement, le bruit, la netteté, etc.&lt;/p&gt;
&lt;p&gt;Ainsi, maintenant que SVG est de plus en plus largement supporté, nous pourrions essayer de placer nos contenus, non plus dans du HTML, mais plutôt dans du SVG que l&amp;#8217;on placerait dans du HTML. Nous serions alors capables d&amp;#8217;&lt;a hreflang=&quot;en&quot; href=&quot;http://dev.opera.com/articles/view/how-to-do-photoshop-like-effects-in-svg/&quot;&gt;appliquer n&amp;#8217;importe quel effet à notre contenu&lt;/a&gt;. Le problème, c&amp;#8217;est que la plupart des intégrateurs HTML risquent de ne pas être très chauds pour se mettre à produire du balisage SVG de ce genre&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;text font-family=&quot;Arial&quot; font-weight=&quot;900&quot; font-size=&quot;40&quot; x=&quot;20&quot; y=&quot;55%&quot;&amp;gt;SVG Example&amp;lt;/text&amp;gt;&lt;/pre&gt;&lt;p&gt;Il existe un truc un peu plus sympa en SVG, c&amp;#8217;est la balise &lt;code&gt;foreignObject&lt;/code&gt;. &lt;a hreflang=&quot;en&quot; href=&quot;http://ajaxian.com/archives/foreignobject-hey-youve-got-html-in-my-svg&quot;&gt;Elle nous permet d&amp;#8217;inclure n&amp;#8217;importe quel type de balisage à l’intérieur d&amp;#8217;un contenu SVG&lt;/a&gt;. C&amp;#8217;est un peu comme mettre du SVG directement dans un document HTML5, mais dans l&amp;#8217;autre sens. Dès que vous avez inclus vos trucs dans du SVG, vous pouvez y appliquer des filtres comme vous le feriez pour n&amp;#8217;importe qu&amp;#8217;elle autre partis de votre contenu SVG. &lt;a hreflang=&quot;en&quot; href=&quot;http://dev.opera.com/articles/view/applying-color-tints-to-web-pages-with-s/&quot;&gt;Vous pouvez embarquer une page HTML entière et lui appliquer des filtres&lt;/a&gt;, ou &lt;a href=&quot;http://www.flother.com/examples/canvas-blur/v4/blur.svg&quot;&gt;vous restreindre à une simple image bitmap&lt;/a&gt;. Bien sûr, vous devez mettre votre contenu SVG lui-même dans une page HTML, ce qui peut conduire à quelques migraines (du HTML embarqué dans du SVG embarqué dans du HTML). Le support navigateur pour la balise &lt;code&gt;foreignObject&lt;/code&gt; est &lt;a hreflang=&quot;en&quot; href=&quot;http://caniuse.com/#feat=svg-html&quot;&gt;plutôt bon&lt;/a&gt;. Seul Internet Explorer reste à la traine. Heureusement, Internet Explorer 10 va rattraper le coup en supportant à la fois les filtres SVG et la balise &lt;code&gt;foreignObject&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Les filtres SVG sur du contenu HTML via CSS&lt;/h2&gt;
&lt;p&gt;Depuis sa version 3.5, Firefox va encore plus loin. Il vous permet d&amp;#8217;appliquer un filtre SVG, défini dans un document externe, à n&amp;#8217;importe quel contenu HTML en passant simplement par une feuille de style. Nous pouvons, par exemple, définir dans un document SVG un filtre de flou gaussien (feGaussianBlur) ayant un rayon de 2 pixels et lui donner l&amp;#8217;identifiant &lt;code&gt;gaussian_blur&lt;/code&gt;&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &lt;br /&gt;&quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&amp;gt;&lt;br /&gt;&amp;lt;svg width=&quot;1&quot; height=&quot;1&quot; version=&quot;1.1&quot; &lt;br /&gt;xmlns=&quot;http://www.w3.org/2000/svg&quot; &lt;br /&gt;xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;defs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter id=&quot;gaussian_blur&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feGaussianBlur in=&quot;SourceGraphic&quot; stdDeviation=&quot;2&quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/defs&amp;gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;&lt;p&gt;On peut alors référencer ce filtre à l&amp;#8217;aide du nom du fichier SVG et de son l&amp;#8217;identifiant au sein de notre feuille de style pour l&amp;#8217;appliquer à toutes les images&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;img {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; filter: url(blur.svg#gaussian_blur);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/Unscha_rfe-via-CSS-Filter-SVG-Mozilla-Firefox_2011-12-18_21-18-59.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez voir cette &lt;a hreflang=&quot;en&quot; href=&quot;http://jeremie.patonnier.net/public/web-effect/blur/blur.html&quot;&gt;démo en &lt;em lang=&quot;en&quot;&gt;live&lt;/em&gt; ici&lt;/a&gt;. Hélas, comme je vous le disais, ça ne fonctionne qu&amp;#8217;avec Firefox.&lt;/p&gt;
&lt;p&gt;Bien heureusement, ce n&amp;#8217;est pas la fin de l&amp;#8217;histoire. Internet Explorer connaît lui aussi les filtres. Ceux-ci ne sont pas basés sur SVG, mais sur des mécanismes propres à la bibliothèque graphique de Windows&amp;#160;: DirectX. Parmi ces filtres certains sont bien connus pour nous aider à résoudre certains bugs (le filtre alpha pour les image PNG) ou pour imiter certaines fonctionnalités de CSS3 (le filtre des dégradé). Néanmoins, il en existes d&amp;#8217;autres très similaires aux filtres SVG&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;/* Flou de 2 pixels de rayon */&lt;br /&gt;filter: progid:DXImageTransform.Microsoft.Blur(pixelradius=2);&lt;br /&gt;/* Flou de mouvement de 13 pixel avec un angle de 310° */&lt;br /&gt;filter: progid:DXImageTransform.Microsoft.MotionBlur(strength=13, direction=310);&lt;br /&gt;/* niveau de gris / désaturation */&lt;br /&gt;filter: gray;&lt;br /&gt;/* Effet « Rayon X » (inversion des niveaux de gris) */&lt;br /&gt;filter: xray;&lt;br /&gt;/* cône de lumière */&lt;br /&gt;filter: light();&lt;br /&gt;/* Extrusion */&lt;br /&gt;filter: progid:DXImageTransform.Microsoft.emboss();&lt;/pre&gt;&lt;p&gt;Vous trouverez une liste complète de ces filtres ici&amp;#160;: &lt;a hreflang=&quot;en&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ms673539%28v=VS.85%29.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/ms673539(v=VS.85).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ainsi, à l&amp;#8217;aide de commentaires conditionnels, nous pouvons désormais proposer un certain nombre d&amp;#8217;effets à deux familles de navigateurs qui à elles deux représente une part non négligeable du marché&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_html&quot;&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;br /&gt;&amp;lt;!--[if lte IE 9]&amp;gt; &amp;lt;html class=&quot;ie&quot; lang=&quot;en&quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;!--[if gt IE 9]&amp;gt;&amp;lt;!--&amp;gt; &amp;lt;html lang=&quot;en&quot;&amp;gt; &amp;lt;!--&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Blur via CSS&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;img {&lt;br /&gt;&amp;nbsp; filter: url(blur.svg#gaussian_blur);&lt;br /&gt;}&lt;br /&gt;.ie img {&lt;br /&gt;&amp;nbsp; margin: -2px;&lt;br /&gt;&amp;nbsp; filter: progid:DXImageTransform.Microsoft.blur(pixelradius=2);&lt;br /&gt;&amp;nbsp; zoom: 1;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;img src=&quot;http://jeremie.patonnier.net/post/2012/01/12/stadt.jpg&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; alt=&quot;Some rights reserved by zigazou76&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; width=&quot;500&quot; height=&quot;333&quot;&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;code&gt;margin: -2px&lt;/code&gt; permet de contre balancer le changement de dimension de l&amp;#8217;image provoqué par le filtre. &lt;code&gt;zoom: 1&lt;/code&gt; est necessaire pour que la plupart des filtres fonctionnent avec in IE6/7. Malheureusement, IE10 ne supporte plus les filtres propriétaires de Microsoft et n&amp;#8217;autorise pas encore les filtres SVG sur du contenu HTML &lt;img src=&quot;/themes/default/smilies/sad.png&quot; alt=&quot;:(&quot; class=&quot;smiley&quot; /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://jeremie.patonnier.net/public/web-effect/blur/blur2.html&quot;&gt;Vous trouverez ici la version modifié de l&amp;#8217;exemple&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un certain nombre de personnes ont apprécié l&amp;#8217;idée de Firefox d&amp;#8217;ouvrir les filtres SVG au contenu HTML. Ils ont donc formé un nouveau groupe au W3C appelé &lt;em lang=&quot;en&quot;&gt;W3C FX Task Force&lt;/em&gt; dont l&amp;#8217;objectif est de standardiser et simplifier l&amp;#8217;usage des filtres SVG dans tous les navigateurs. Puisque Firefox avait défriché le terrain des filtres d&amp;#8217;effets, le premier brouillon de spécification est vite arrivé sous le nom de &lt;a style=&quot;font-style: italic;&quot; href=&quot;https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html&quot; target=&quot;_blank&quot;&gt;W3C Filter Effects 1.0&lt;/a&gt;. Les mécanismes proposés dans ce brouillon fonctionnent à peu près comme dans Firefox tout en offrant en plus un certain nombre de raccourcis vers les effets les plus intéressants. Les filtres bénéficiant d&amp;#8217;un raccourci fonctionnent sans l&amp;#8217;aide d&amp;#8217;un fichier SVG externe. Ils sont directement codés au cœur du navigateur. Les raccourcis en question sont&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;grayscale&lt;/li&gt;
&lt;li&gt;sepia&lt;/li&gt;
&lt;li&gt;saturate&lt;/li&gt;
&lt;li&gt;hue-rotate&lt;/li&gt;
&lt;li&gt;invert&lt;/li&gt;
&lt;li&gt;opacity&lt;/li&gt;
&lt;li&gt;brightness&lt;/li&gt;
&lt;li&gt;contrast&lt;/li&gt;
&lt;li&gt;blur&lt;/li&gt;
&lt;li&gt;drop-shadow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un autre avantage de ces raccourcis, c&amp;#8217;est qu&amp;#8217;ils peuvent être animés via les transformations et les animations CSS&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;.foo {&lt;br /&gt;&amp;nbsp; filter: blur(2px);&lt;br /&gt;&amp;nbsp; transition: filter 1s ease-in-out;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;.foo:hover {&lt;br /&gt;&amp;nbsp; filter: blur(0);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Ce serait plus difficile et moins efficace de réaliser cela dans un document SVG.&lt;/p&gt;
&lt;p&gt;Pour finir, les effets de filtre prévois d&amp;#8217;être enrichie à l&amp;#8217;aide des &lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/devnet/html5/articles/css-shaders.html&quot;&gt;&lt;em lang=&quot;en&quot;&gt;vertex shaders&lt;/em&gt; et &lt;em lang=&quot;en&quot;&gt;fragment shaders&lt;/em&gt; d&amp;#8217;OpenGL/WebGL&lt;/a&gt;. Les &lt;em lang=&quot;en&quot;&gt;vertex shaders&lt;/em&gt; permettront d&amp;#8217;appliquer un maillage 2D sur un élément que vous pourrez alors déformer en déplaçant tous les points du maillage selon une formule mathématique de votre choix. Les &lt;em lang=&quot;en&quot;&gt;fragment shaders&lt;/em&gt; d&amp;#8217;un autre côté permettront de réaliser ces transformations mathématiques sur les couleurs de chacun des pixels de cet élément. Ces deux types de filtres bénéficieront en plus de l’accélération matérielle de votre carte graphique.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/devnet/html5/articles/css-shaders.html&quot;&gt;&lt;img alt=&quot;CSS shaders Cinematic effects for the web&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/CSS-shaders-Cinematic-effects-for-the-web-Adobe-Developer-Connection-Google_2011-12-18_19-31-01.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Par un heureux hasard, il y a quelques semaines les premières implémentations de ces filtres sont apparues dans les &lt;a hreflang=&quot;en&quot; href=&quot;http://nightly.webkit.org/&quot;&gt;compilations nocturnes de Webkit&lt;/a&gt; et sont à présent disponibles dans &lt;a hreflang=&quot;en&quot; href=&quot;http://tools.google.com/dlpage/chromesxs&quot;&gt;Chrome Canary&lt;/a&gt;. Ça veut dire que d&amp;#8217;ici 3 mois les filtres CSS seront disponibles dans la version stable de Chrome et à brève échéance dans Safari. Ça veut également dire que nous ne sommes pas loin de pouvoir commencer à utiliser des filtres CSS sur 90 à 95% du marché des navigateurs&amp;#160;!&lt;/p&gt;
&lt;p&gt;Si l&amp;#8217;on en revient à notre exemple, tout ce que nous avons à faire pour supporter Webkit est de rajouter un simple &lt;code&gt;-webkit-filter: blur(2px);&lt;/code&gt;. Néanmoins, il faudra faire attention de le placer &lt;strong&gt;après&lt;/strong&gt; la propriété &lt;code&gt;filter&lt;/code&gt; non-préfixée. La raison étant que lorsque Webkit supportera la version non-prefixée de la propriété &lt;code&gt;filter&lt;/code&gt;, la syntaxe propre à Firefox créra des problèmes avec la transition CSS que nous allons appliquer pour passer doucement entre la version flou et nette de l&amp;#8217;image via &lt;code&gt;-webkit-transition: -webkit-filter 1s ease-in-out;&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;sh_html&quot;&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;br /&gt;&amp;lt;!--[if lte IE 9]&amp;gt; &amp;lt;html class=&quot;ie&quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;!--[if gt IE 9]&amp;gt;&amp;lt;!--&amp;gt; &amp;lt;html&amp;gt; &amp;lt;!--&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Blur via CSS&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;img {&lt;br /&gt;&amp;nbsp; filter: url(blur.svg#gaussian_blur);&lt;br /&gt;&amp;nbsp; -webkit-filter: blur(2px);&lt;br /&gt;&amp;nbsp; -webkit-transition: -webkit-filter 1s ease-in-out;&lt;br /&gt;}&lt;br /&gt;img:hover {&lt;br /&gt;&amp;nbsp; filter: none;&lt;br /&gt;&amp;nbsp; -webkit-filter: blur(0);&lt;br /&gt;}&lt;br /&gt;.ie img {&lt;br /&gt;&amp;nbsp; margin: -2px;&lt;br /&gt;&amp;nbsp; filter: progid:DXImageTransform.Microsoft.blur(pixelradius=2);&lt;br /&gt;&amp;nbsp; zoom: 1;&lt;br /&gt;}&lt;br /&gt;.ie img:hover {&lt;br /&gt;&amp;nbsp; margin: 0;&lt;br /&gt;&amp;nbsp; filter: none;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;img src=&quot;http://jeremie.patonnier.net/post/2012/01/12/stadt.jpg&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; alt=&quot;Some rights reserved by zigazou76&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; width=&quot;500&quot; height=&quot;333&quot;&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://jeremie.patonnier.net/public/web-effect/blur/blur3.html&quot;&gt;La dernière version de l&amp;#8217;exemple&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et voila, des effets de filtres pour tout le monde&amp;#160;! Faisons de 2012 l&amp;#8217;année des filtres CSS et &lt;a hreflang=&quot;en&quot; href=&quot;http://davidwalsh.name/dw-content/css-filters.php&quot;&gt;amusez-vous bien avec&lt;/a&gt;.&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Paris Web 2011 : SVG et Typographie</title>
    <link>http://jeremie.patonnier.net/post/2011/10/18/Paris-Web-2011-%3A-SVG-et-Typographie</link>
    <guid isPermaLink="false">urn:md5:0f39052f4df563d533923a2e56944875</guid>
    <pubDate>Tue, 18 Oct 2011 16:58:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>conférence</category><category>paris-web</category><category>SVG</category><category>typographie</category>
    <description>&lt;p&gt;Paris Web 2011&amp;#160;s&amp;#8217;est tenu les 13, 14 et 15 octobre dernier. Cette année encore j&amp;#8217;y étais et force et de reconnaitre qu&amp;#8217;une fois de plus, l&amp;#8217;équipe a sué sang et eau pour en faire un évènement de qualité inégalé. Bravos à tous, vous avez assuré grave &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;    &lt;p&gt;Le programme était vraiment d&amp;#8217;excellente facture, et je retiendrai en particulier deux conférences&amp;#160;: D&amp;#8217;une part, celle d&amp;#8217;Antony Ricaud qui a pris le temps d&amp;#8217;expliquer et de détailler comment fonctionne un navigateur (chose que peu de web designer connaissent mais qui explique beaucoup de choses, comme par exemple &amp;#8220;pourquoi les sélecteurs CSS sont lus de droite à gauche&amp;#8221;)&amp;#160;; D&amp;#8217;autre part, celle de &lt;a href=&quot;http://www.celinecelines.com/&quot;&gt;celinecelines&lt;/a&gt; qui a fait la démonstration d&amp;#8217;une énergie incroyable et d&amp;#8217;un enthousiasme peu commun, mais ô combien communicatif et stimulant. Merci Céline.&lt;/p&gt;
&lt;p&gt;De mon coté, ça a été un peu le grand schelem. En effet, l&amp;#8217;équipe d’organisation à accepter toutes mes propositions (&amp;#8216;^_^) je me suis donc retrouvé à présenter un lightning talk, une conférence et un atelier&amp;#8230; argle&amp;#160;!&lt;/p&gt;
&lt;h2&gt;Lightning talk&lt;/h2&gt;
&lt;p&gt;Le challenge consistait à parler d&amp;#8217;un sujet pendant seulement 4 minutes. Ça demande d&amp;#8217;aller droit à l&amp;#8217;essentiel et d&amp;#8217;être percutant. Vu que je traitai déjà de sujet assez sérieux pour ma conférence et mon atelier, j&amp;#8217;ai proposé un &amp;#8220;truc rigolo&amp;#8221;. J&amp;#8217;ai donc fait une animation SVG pour illustrer la lutte permanente des standards du Web pour un Internet meilleur. J&amp;#8217;ai demandé l&amp;#8217;aide de ma collègue Corinne Massacry pour réaliser tout le &amp;#8220;Character Design&amp;#8221; et j&amp;#8217;ai réalisé toute les animations à la main (il n&amp;#8217;y a pas d&amp;#8217;éditeur d&amp;#8217;animation SVG connu à ce jour, donc, tout à la mimine&amp;#8230; ce qui prend un temps infinie, j&amp;#8217;ai terminé l&amp;#8217;animation la veille de la conf en y passant la nuit :-/)&lt;/p&gt;
&lt;p&gt;Voila le résultat&amp;#160;:&lt;/p&gt;
&lt;object data=&quot;http://jeremie.patonnier.net/experiences/parisweb2011/animation.svg&quot; type=&quot;image/svg+xml&quot; width=&quot;512&quot; height=&quot;384&quot;&gt;&lt;/object&gt;
&lt;p&gt;Vous pouvez télécharger le fichier SVG ici&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/experiences/parisweb2011/animation.svg&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2011/animation.svg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour la petite histoire, l&amp;#8217;ensemble des éléments graphiques ont été réalisés avec Adobe Illustrator. Pour ce qui est de la réalisation de l&amp;#8217;animation, dans le mesure où, lorsqu&amp;#8217;on code à la main, c&amp;#8217;est très difficile de se déplacer d&amp;#8217;un point à l&amp;#8217;autre de l&amp;#8217;animation, je l&amp;#8217;ai animée à l&amp;#8217;envers. Concrètement, j&amp;#8217;ai animé la dernière scène, puis l&amp;#8217;avant dernière scène, etc. De cette manière, à chaque fois que je rafraichissais l&amp;#8217;animation, je voyais immédiatement ce que je venais d&amp;#8217;animer sans avoir à attendre que le début de l&amp;#8217;animation soit joué (plusieurs minutes) pour pouvoir vérifier ce que je venais de faire (parfois moins d&amp;#8217;une seconde d&amp;#8217;animation)&lt;/p&gt;
&lt;h2&gt;Conférence&amp;#160;: &amp;#8220;La typographie, mon navigateur et moi&amp;#8221;&lt;/h2&gt;
&lt;p&gt;Lors de cette conférence, j&amp;#8217;ai eu l&amp;#8217;occasion d&amp;#8217;expliquer comment les polices typographiques sont miraculeusement affichées par les navigateurs &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; Le coté sympa, c&amp;#8217;est qu&amp;#8217;à l&amp;#8217;origine, cette conférence devait durée 30 minutes et que suite au désistement de dernière minute d&amp;#8217;un orateur, elle a finalement pu durée 1 heure avec plein de questions et réponses. Je vous met les slides ici, mais la vidéo sera sans doute beaucoup plus intéressante. Je vous tiens au courant dès qu&amp;#8217;elle est disponible.&lt;/p&gt;
&lt;iframe src=&quot;http://www.slideshare.net/slideshow/embed_code/9734822?rel=0&quot; width=&quot;510&quot; height=&quot;426&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;h2&gt;Atelier&amp;#160;: &amp;#8220;SVG et le web design moderne&amp;#8221;&lt;/h2&gt;
&lt;p&gt;1h30 à la découverte de SVG. Je ne cache pas que pendant l&amp;#8217;atelier j&amp;#8217;ai un peu angoissé en voyant les nombreux visages extrêmement sérieux et concentré en face de moi. Heureusement, il semblerai que l&amp;#8217;atelier ait bien plus à tout le monde. Je vous met ici les slides, les exemples et les différents liens que j&amp;#8217;ai eu l&amp;#8217;occasion d&amp;#8217;évoquer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les slides&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/presentation.odp&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/presentation.odp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Les exemples&amp;#160;:
&lt;ul&gt;
&lt;li&gt;Exemple d&amp;#8217;un fichier SVG basic&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/basic.svg&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/basic.svg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Les différentes manière d&amp;#8217;inclure du SVG dans du HTML&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/inclusion.html&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/inclusion.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Comparaison entre SVG, RaphaelJS et Canvas&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/svg-raphael-canvas.htm&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/svg-raphael-canvas.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Exemple d&amp;#8217;usage avancé avec CSS3&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/monsieur-ou-madame-1.htm&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2011/atelier/monsieur-ou-madame-1.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Les liens à voir (en vrac)&amp;#160;:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://raphaeljs.com&quot;&gt;http://raphaeljs.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wout/raphael-svg-import&quot;&gt;https://github.com/wout/raphael-svg-import&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mbostock.github.com/d3/&quot;&gt;http://mbostock.github.com/d3/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jvectormap.owl-hollow.net&quot;&gt;http://jvectormap.owl-hollow.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://rickardsund.com&quot;&gt;http://rickardsund.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://discover.store.sony.com//piiq/&quot;&gt;http://discover.store.sony.com//piiq/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://evolutionofweb.appspot.com&quot;&gt;http://evolutionofweb.appspot.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vlog.it&quot;&gt;http://vlog.it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://type.method.ac&quot;&gt;http://type.method.ac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.goodreads.com&quot;&gt;http://www.goodreads.com&lt;/a&gt; (l&amp;#8217;icone de &amp;#8220;rating&amp;#8221; est en SVG et reprend les données réelles de vote sur chaque livre)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drawastickman.com&quot;&gt;http://www.drawastickman.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nissanusa.com/leaf-electric-car/index&quot;&gt;http://www.nissanusa.com/leaf-electric-car/index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en/SVG&quot;&gt;https://developer.mozilla.org/en/SVG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Là aussi, la vidéo sera bien plus parlante, je vous la mettrai dès qu&amp;#8217;elle sera là &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Voila, comme d&amp;#8217;habitude, c&amp;#8217;était bien chouette, encore un gros merci aux organisateurs et vivement l&amp;#8217;année prochaine (mais je proposerai moins de choses parce que là, c&amp;#8217;était vraiment trop dur de préparer tout ça).&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>SudWeb 2011 : Coup d'essai, coup de maitre</title>
    <link>http://jeremie.patonnier.net/post/2011/06/21/SudWeb-2011-Coup-d-essai-coup-de-maitre</link>
    <guid isPermaLink="false">urn:md5:373447ea13b59e6d210229c7b95526c1</guid>
    <pubDate>Tue, 21 Jun 2011 09:54:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>English</category><category>SudWeb</category><category>SVG</category>
    <description>    &lt;p lang=&quot;en&quot;&gt;&lt;em&gt;Note for English speaker, there is an English version down below &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Le 27 mai dernier, j&amp;#8217;ai eu la chance de participer à la toute première édition de SudWeb à Nîmes. Partie sur une boutade lors du dernier Paris Web, les organisateurs se sont juste arrachés pour arriver à monter le truc en à peine 6 mois. Bravo à tous, ce fût beau&amp;#160;! Car on peut le dire, pour un coup d&amp;#8217;essai, ce fût un coup de maitre. Au delà de la logistique impeccable, l&amp;#8217;ensemble du programme des conférences était tout simplement parfait. Mixant à la fois les aspects fonctionnels, techniques et prospectifs, l&amp;#8217;équilibre du déroulé m&amp;#8217;a complètement estomaqué (ainsi que le respect des horaires, tenus d&amp;#8217;une main de fer, couplé à des moments de pause ô combien conviviaux).&lt;/p&gt;
&lt;p&gt;Vous n&amp;#8217;y étiez pas&amp;#160;? Ce n&amp;#8217;est pas grave. D&amp;#8217;une part toutes les conférences ont été filmées et devraient être disponibles prochainement et d&amp;#8217;autre part, il y aura une autre édition l&amp;#8217;année prochaine, viendez-y &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;En ce qui concerne mon nombril, j&amp;#8217;ai eu l&amp;#8217;occasion d&amp;#8217;y donner une conférence sur un sujet qui me tient à cœur depuis un peu plus d&amp;#8217;un an&amp;#160;: SVG. Au cours de cette conférence, j&amp;#8217;ai montré ce qu&amp;#8217;il était possible de faire aujourd&amp;#8217;hui avec SVG (qui, rappelons le, est disponible dans tous les navigateurs moderne). Plutôt que de m&amp;#8217;attacher aux questions techniques qui tourne autour de cette technologie, j&amp;#8217;ai préféré mettre l&amp;#8217;accent sur des outils et des résultats concrets. L&amp;#8217;idée étant de montrer comment des designers et les développeurs on déjà utilisé SVG et ce qu&amp;#8217;il apporte au web design moderne.&lt;/p&gt;
&lt;p&gt;Évidemment, même si j&amp;#8217;ai oublié de le préciser pendant la conférence, je n&amp;#8217;ai pas pu m’empêcher de réaliser mes slides en SVG, les voici (cliquez sur l&amp;#8217;image pour lui donner le focus et utilisez les flèches de direction pour passer d&amp;#8217;un slide à l&amp;#8217;autre)&amp;#160;:&lt;/p&gt;
&lt;object type=&quot;image/svg+xml&quot; data=&quot;http://jeremie.patonnier.net/experiences/sudweb2011/presentation.svg&quot; height=&quot;384&quot; width=&quot;512&quot;&gt;
&lt;p&gt;Vous pouvez accéder à ma présentation SVG à cette adresse&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/experiences/sudweb2011/presentation.svg&quot;&gt;http://jeremie.patonnier.net/experiences/sudweb2011/presentation.svg&lt;/a&gt;&lt;/p&gt;
&lt;/object&gt;
&lt;p&gt;A noter que je cite tous les sites suivant&amp;#160;:&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Outils&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://code.google.com/p/svgweb/&quot;&gt;http://code.google.com/p/svgweb&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://raphaeljs.com/&quot;&gt;http://raphaeljs.com&lt;/a&gt;&amp;#160;: Vous devriez tous avoir cette bibliothèque dans votre trousse à outils si vous voulez réaliser du SVG tout en étant compatible avec les vieux IE.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.highcharts.com/&quot;&gt;http://www.highcharts.com&lt;/a&gt;&amp;#160;: LA bibliothèque pour faire des graphiques de données sans vous casser la tête.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://mbostock.github.com/d3/&quot;&gt;http://mbostock.github.com/d3/&lt;/a&gt;&amp;#160;: D3.js est une bibliothèque qui vous permet de mapper des données au seins de graphiques vectoriels en SVG. C&amp;#8217;est un pont technique idéal entre les développeurs qui doivent manipuler ces données et les designers qui doivent les mettre en scène.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Références&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.thenounproject.com&quot;&gt;http://www.thenounproject.com&lt;/a&gt;&amp;#160;: Projet mettant à disposition des icones libres de droit au format SVG. Indispensable pour réaliser de la signalétique. A noter que toutes les icones proposées sont composées d&amp;#8217;un seul est unique chemin SVG ce qui en fait une base travail extrêmement propre et malléable pour les Web designers.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.bifter.co.uk&quot;&gt;http://www.bifter.co.uk&lt;/a&gt;&amp;#160;: Web comics humoristique intégralement réalisé en SVG.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://opendata.zeit.de/pisa-wohlstands-vergleich/visualisierung.php&quot;&gt;http://opendata.zeit.de/pisa-wohlstands-vergleich/visualisierung.php&lt;/a&gt;&amp;#160;: Le journal allemand Zeit propose une visualisation de données démographiques intégralement réalisée en SVG&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.nissanusa.com/leaf-electric-car/index&quot;&gt;http://www.nissanusa.com/leaf-electric-car/index&lt;/a&gt;&amp;#160;: Dans la série &amp;#8220;Non, ce n&amp;#8217;est pas du Flash&amp;#8221; Nissan USA fait une magnifique utilisation de SVG pour proposer une navigation non linéaire des caractéristiques de sa nouvelle voiture électrique. A noter que RaphaelJS est utilisé pour assurer la compatibilité avec IE6, 7 et 8 (et oui).&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://rickardsund.com&quot;&gt;http://rickardsund.com&lt;/a&gt;&amp;#160;: Je n&amp;#8217;ai pas de mot assez fort pour exprimer l&amp;#8217;adoration que j&amp;#8217;ai pour ce site. Pour moi, Il représente la quintessence du Web design moderne. D&amp;#8217;un coté un design épuré à l’extrême qui sert parfaitement son propos. Il est l’œuvre de &lt;a hreflang=&quot;en&quot; href=&quot;http://hugoahlberg.com/&quot;&gt;Hugo Ahlberg&lt;/a&gt; qui a un lourd passif de designer Flash, ce qui lui a permis de s&amp;#8217;extraire des contraintes (artificielles) du design web traditionnel. D&amp;#8217;un autre coté, il est intégré à la perfection en utilisant exclusivement des standards Web&amp;#160;: HTML5 (à noter en particulier la magnifique utilisation de l&amp;#8217;API History), CSS3, JS (Du &amp;#8220;mouse gesture&amp;#8221; de toute beauté) et bien sur du SVG (par petites touches mais indispensables). Ce travail formidable a été réalisé par &lt;a hreflang=&quot;en&quot; href=&quot;http://danielmahal.com/&quot;&gt;Daniel Mahal&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/pixlCoder/&quot;&gt;Daniel Connor&lt;/a&gt; qui font là une démonstration d&amp;#8217;excellence de ce que devrais toujours être une intégration aux standards, en particulier la maitrise de la dégradation élégante qui est quasi parfaite&amp;#160;: Ce site fonctionne dans IE6&amp;#160;! Vous DEVEZ regarder la source de ce site et vous en inspirer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour conclure, je n&amp;#8217;ai plus qu&amp;#8217;une chose à dire&amp;#160;: Longue vie à SudWeb, vivement l&amp;#8217;année prochaine &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p lang=&quot;en&quot;&gt;On May 27th, I got the chance to attend the very first SudWeb event in Nîmes, France. Starting on a joke during the last Paris Web event, the people behind SudWeb make it possible in just 6 months. Thanks dudes that was awesome! We can say it, for a first run that was a master piece. Beyond the perfect logistic, the program was just great. Talks were amazingly well balanced between functional, technical &lt;span title=&quot;Cliquer ici pour voir d'autres traductions&quot; class=&quot;hps&quot;&gt;and prospective subjects (and the schedule was perfectly mastered with good time to talk and network with people).&lt;/span&gt;&lt;/p&gt;
&lt;p lang=&quot;en&quot;&gt;You wasn&amp;#8217;t their&amp;#160;? Don&amp;#8217;t worry. First, all the talks were camcorded and should be available soon. Second, there will be another edition next year, attend it &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p lang=&quot;en&quot;&gt;On my own, I had the opportunity to give a talk about one of my favorite subject for a year now&amp;#160;: SVG. During this talk, I show off what is it possible to make with SVG today (which, as a reminder, is available in all modern browsers). Instead of talking about technical stuffs, I focused on tools and practical results. The idea was to demonstrate how designers and developers had used SVG and what that technology brings to modern Web design.&lt;/p&gt;
&lt;p lang=&quot;en&quot;&gt;Of course, even if I forgot to mention it during my talk, I felt oblige to made my slides with SVG. Here there are (see above, click on the image to give it the focus then use the arrow keys to switch between the slides).&lt;/p&gt;
&lt;p lang=&quot;en&quot;&gt;Note that I use all the following web sites as examples:&lt;/p&gt;
&lt;h2 lang=&quot;en&quot;&gt;Tools&lt;/h2&gt;
&lt;ul lang=&quot;en&quot;&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://code.google.com/p/svgweb/&quot;&gt;http://code.google.com/p/svgweb&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://raphaeljs.com/&quot;&gt;http://raphaeljs.com&lt;/a&gt;
: You should all have that library in your toolbox if you want to use SVG with IE compatibility in mind.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.highcharts.com/&quot;&gt;http://www.highcharts.com&lt;/a&gt;&amp;#160;: THE library to build charts without headache.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://mbostock.github.com/d3/&quot;&gt;http://mbostock.github.com/d3/&lt;/a&gt;
: D3.js is a library that allow you to connect data with graphics. This is an awesome bridge between developers that deal with data and designer that deal with graphics.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 lang=&quot;en&quot;&gt;References&lt;/h2&gt;
&lt;ul lang=&quot;en&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.thenounproject.com/&quot;&gt;http://www.thenounproject.com&lt;/a&gt;
: That project collect visual symbol and make them available in SVG. Note that all the symbols are made of one single SVG path. That make them highly usable as a work basis for Web designers.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.bifter.co.uk/&quot;&gt;http://www.bifter.co.uk&lt;/a&gt;&amp;#160;: A humorous Web comics build with SVG.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://opendata.zeit.de/pisa-wohlstands-vergleich/visualisierung.php&quot;&gt;http://opendata.zeit.de/pisa-wohlstands-vergleich/visualisierung.php&lt;/a&gt;&amp;#160;: The dutch newspaper Zeit had a demographic data representation driven by SVG.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.nissanusa.com/leaf-electric-car/index&quot;&gt;http://www.nissanusa.com/leaf-electric-car/index&lt;/a&gt;
: Ok, so &amp;#8220;This is NOT Flash&amp;#8221;. This is a great SVG work made by Nissan USA to build a non-linear navigation system. Take care about the library behind the scene, it&amp;#8217;s RaphaelJS. This means that it works properly even with IE6, 7 and 8 (crazy!).&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://rickardsund.com/&quot;&gt;http://rickardsund.com&lt;/a&gt;
: I do not have strong enough words to express my love for this web site. To me, it&amp;#8217;s the best of modern Web design. On the one hand, the simplistic design suits its subject perfectly. It has been made by &lt;a hreflang=&quot;en&quot; href=&quot;http://hugoahlberg.com/&quot;&gt;Hugo Ahlberg&lt;/a&gt;
who has extensive skills in Flash design. Those skills give him the ability to overcome the classic HTML web design. On the other hand, This Web site is perfectly develop with Web standards only&amp;#160;: HTML5 (with a noticeable use of the History API), CSS3, JS (awesome mouse gesture) and, of course, some small (but essential) touches of SVG. This amazing work has been done by &lt;a hreflang=&quot;en&quot; href=&quot;http://danielmahal.com/&quot;&gt;Daniel Mahal&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/pixlCoder/&quot;&gt;Daniel Connor&lt;/a&gt; who demonstrate what a Web standards front-end development should always be. They especially mastered the graceful degradation: This site works perfectly with
IE6&amp;#160;! You SHOULD look at the source and use it as an inspiration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p lang=&quot;en&quot;&gt;To conclude, there is one thing left&amp;#160;: Live long SudWeb, I strongly hope for the next edition &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Alors s'en vient le temps du changement.</title>
    <link>http://jeremie.patonnier.net/post/2011/04/13/Alors-s-en-vient-le-temps-du-changement.</link>
    <guid isPermaLink="false">urn:md5:64b9ab70559b8ce0a7233e584c9b230f</guid>
    <pubDate>Wed, 13 Apr 2011 11:59:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Élucubrations</category>
        <category>Moi ma vie mon oeuvre</category><category>SudWeb</category><category>SVG</category><category>typographie</category>
    <description>    &lt;p&gt;Je sais que je blogue assez peu en ce moment. Ne m&amp;#8217;en veuillez pas, c&amp;#8217;est qu&amp;#8217;il se passe pas mal de choses actuellement pour moi avec peux de temps pour venir écrire ici.&lt;/p&gt;
&lt;p&gt;D&amp;#8217;abord, si vraiment vous voulez lire des trucs que j&amp;#8217;ai écrit moi-même comme un grand, allez faire un tour sur &lt;a hreflang=&quot;fr&quot; href=&quot;http://typographisme.net&quot;&gt;typographisme.net&lt;/a&gt;, mon dernier billet en date parlant des &lt;a hreflang=&quot;fr&quot; href=&quot;http://typographisme.net/post/Les-ligatures-dans-les-navigateurs&quot;&gt;ligatures dans les navigateurs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En suite, je suis en train de préparer ma présentation pour &lt;a hreflang=&quot;fr&quot; href=&quot;http://sudweb.fr/&quot;&gt;SudWeb 2011&lt;/a&gt;. Comme je vais y parler de SVG, je ne peux bien sur pas faire autrement que de préparer un support de présentation lui aussi en SVG &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; (il sera en ligne après la conf). Ça se passe le 27 mai à Nîmes, &lt;a hreflang=&quot;fr&quot; href=&quot;http://sudweb.fr/category/Programme&quot;&gt;le programme est alléchant&lt;/a&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://tickets.web-ux.org/&quot;&gt;le prix raisonnable&lt;/a&gt;, n&amp;#8217;hésitez pas à venir y faire un tour.&lt;/p&gt;
&lt;p&gt;Enfin, je change de travail &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; Après 5 ans passé au sein de Cetelem (organisme de crédit pour les particulier du groupe BNP Paribas) en temps que responsable d&amp;#8217;équipe de développement web, je vais rejoindre &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.clever-age.com/&quot;&gt;CleverAge&lt;/a&gt; où je serais consultant web (ou chef de projet ça dépendra des clients et des missions &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; ). C&amp;#8217;est prévu pour le 2 mai et en attendant, c&amp;#8217;est un peu &amp;#8220;je cours dans tous les sens pour plier les questions administratives&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Sur ce&amp;#8230; qu&amp;#8217;un millier de colombes constipées illuminent votre journée.&lt;br /&gt;A bientôt &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Why are SVG Fonts so different?</title>
    <link>http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different</link>
    <guid isPermaLink="false">urn:md5:4b0c3e53cd421d3d629f27f0b570b946</guid>
    <pubDate>Mon, 07 Feb 2011 09:30:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>English</category><category>SVG</category><category>webdesign</category>
    <description>&lt;p lang=&quot;fr&quot;&gt;&lt;em&gt;Une version française de cet article est disponible sur typographisme.net&amp;#160;: &lt;a hreflang=&quot;fr&quot; href=&quot;http://typographisme.net/post/Pourquoi-les-fontes-SVG-sont-elles-diff%C3%A9rentes-des-autres&quot;&gt;Pourquoi les fontes SVG sont-elles différentes des autres&amp;#160;?&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m sad to see that there are many misconception about SVG fonts. I&amp;#8217;ve read a lot of articles and complains about the SVG font format and the last (but not the least) was &lt;a hreflang=&quot;en&quot; href=&quot;http://limi.net/articles/firefox-acid3&quot;&gt;an article from Alexander Limi &lt;/a&gt;explaining why Firefox will not pass the Acid3 test mainly due to a lack of SVG font support. All those complain are misplaced in many way because SVG fonts are misunderstood. Really? But in this case, what are SVG fonts made for? Let&amp;#8217;s see that.&lt;/p&gt;    &lt;h2&gt;Forget it for regular text&lt;/h2&gt;
&lt;p&gt;One of the biggest misconceptions about SVG fonts is thinking that this format is suitable for regular HTML text. Unfortunately, it is not! In my opinion, this misconception is mainly due to Apple. Until iOS 4.2, SVG was the only format available to use custom fonts on iPhone and iPad. And because this support was (is?) somewhat buggy, SVG fonts&amp;#8217; reputation was badly injured.&lt;/p&gt;
&lt;p&gt;Anyway, beyond iOS SVG font support, it&amp;#8217;s a fact that SVG font format does not support font hinting. To understand that so called &amp;#8220;lack&amp;#8221; it&amp;#8217;s important to think back about the specificity of the SVG image format. SVG shapes are placed in an absolute coordinate system and SVG documents do not have text flow ability such as HTML documents. Also, SVG documents do not necessarily have pixel perfect dimensions and the shapes can be subjected to mathematical transformations (rotation, scaling, skewing, etc.). So this means that a glyph can be placed anywhere in a document and its shape modified, but most of the time it won&amp;#8217;t match a pixel perfect size nor even a pixel perfect grid. With all those constraints, hinting is not really helpful because it needs a pixel grid system to give its best.&lt;/p&gt;
&lt;p&gt;If you simply try to use a WOFF font in an HTML document and apply a CSS3&amp;#160;2D transform, you&amp;#8217;ll see that even with a hinting system, this does not really make a difference. But on the contrary, on regular HTML text that is pixel perfect positioned, SVG fonts are not so beautiful especially at small size. So yes, in an HTML document, SVG fonts are poor. But, as I said, it&amp;#8217;s not their main purpose.&lt;/p&gt;
&lt;h2&gt;The power of drawing tools&lt;/h2&gt;
&lt;p&gt;In regards of other fonts formats, one of the biggest advantages of SVG fonts is the way shapes can be drawn.&lt;/p&gt;
&lt;p&gt;Technically speaking, the shapes in SVG fonts can be made of any kind of curves (cubic or quadratic Bezier in different flavors or arc definitions) where shapes in TrueType fonts can only be made of quadratic Bezier curves. OpenType fonts are a bit smarter by supporting cubic Bezier curves, but for what I know no other font format supports arc definition. So, in theory the outlines produced for SVG fonts could be much more optimized than in other font formats. Ok, let&amp;#8217;s be honest, it is not often the case in classical glyph design. But there is more. Because SVG fonts could use all the power of SVG it is possible to draw very complex shapes by mixing arbitrary paths and basic SVG shapes, which gives you a more control over your font design. So when you want &lt;strong&gt;to design an ornamental font, SVG gives you better tools&lt;/strong&gt; to do so.&lt;/p&gt;
&lt;p&gt;Practically speaking, it&amp;#8217;s possible to use any software supporting SVG to draw fonts. This includes traditional font software such as FontForge but it&amp;#8217;s also possible to take full advantage of drawing software such as Adobe Illustrator or Inkscape (this one provides powerful tools for drawing fonts). Of course such drawing software can be used to produce outlines for other font formats but you&amp;#8217;ll always need to export them inside a specific font tool to convert those outlines to the right curves definition (which can have side effects on your design). With SVG, you don&amp;#8217;t need to. &lt;strong&gt;You can directly use the output from your drawing software&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Animation, filters, video&amp;#8230; \o/&lt;/h2&gt;
&lt;p&gt;Let&amp;#8217;s go forward. SVG, beyond its drawing ability, has some amazing extension such as gradients, patterns, clipping, masking, animations, filters or even foreign object inclusion. It means that you can use all of this inside your SVG fonts. Yes it&amp;#8217;s possible to produce native animated font with SVG. With filters, you can produce blurry or textured fonts. And with foreign object inclusion&amp;#8230; Wow&amp;#160;! There&amp;#8217;s no limit. Why not imagine a font with a sound background? Yes it&amp;#8217;s possible, just include an HTML audio element and it&amp;#8217;s done.&lt;/p&gt;
&lt;p&gt;Of course it&amp;#8217;s not necessarily wise to do such things. Especially if you want to use such a font for regular text. But think about it. The SVG font format unleashes your creativity to a brand new world. Say good-bye to the legacy &amp;#8220;lead &amp;amp; paper&amp;#8221; typography and jump out the final frontier with the upcoming of fonts made FOR the web (and not just backported to it).&lt;/p&gt;
&lt;h2&gt;Embedding and DOM Access&lt;/h2&gt;
&lt;p&gt;You think it&amp;#8217;s amazing? Let&amp;#8217;s go one step further in the twilight zone.&lt;/p&gt;
&lt;p&gt;Historically speaking, ten years ago, SVG font was the only font format that could be embedded inside an SVG document. This feature was required to ensure that the rendering of a font inside an SVG document would remain consistent across different platforms and user-agents. Today, thanks to CSS @font-face and Data URI, it&amp;#8217;s possible to embed any type of font format, but still, SVG fonts have always a huge advantage here.&lt;/p&gt;
&lt;p&gt;As you know, SVG is an XML format so SVG font as well. This means that you can embed SVG fonts inside any XML document (for example in an SVG image or in an XHTML document and, in a near future, with HTML5, in any ordinary HTML document) and still have access to the glyphs through the DOM of the XML document. And this is huge because it means two crazy things:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;You can easily access the font content through Javascript and change it as you wish for whatever reason. &lt;strong&gt;The SVG font format lets you in control of each individual glyph at runtime&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You can use CSS to style each individual glyph which gives you an amazing control on how the font will be rendered.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The other font formats do not provide such an easy and full access to their core design.&lt;/p&gt;
&lt;h2&gt;Security, accessibility, bla, bla, bla&amp;#8230;&lt;/h2&gt;
&lt;p&gt;With such great power come amazing responsibilities. Security is one of the main concerns about SVG fonts. As &lt;a hreflang=&quot;en&quot; href=&quot;http://developers.slashdot.org/comments.pl?sid=1713004&amp;amp;cid=32847010&quot;&gt;Borris Zbarsky points out&lt;/a&gt;&amp;#160;: &lt;q&gt;Once you put an &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; in a glyph, all sorts of issues arise&lt;/q&gt; and is damn right. This point have to be discussed but is it a reason to drop everything? I don&amp;#8217;t think so. &lt;/p&gt;
&lt;p&gt;Another concern is about accessibility - so highly interactive fonts raise many issues, for example &amp;#8220;how the user can control the animation on an animated font?&amp;#8221;. But these questions are basically of the same type as those SVG brings on its own. So it&amp;#8217;s possible to rely on the solutions available for SVG in a general purpose.&lt;/p&gt;
&lt;p&gt;Of course it&amp;#8217;s necessary for both browser constructors and web authors to take care about all those constrains. I&amp;#8217;m sure some evil web authors will use SVG fonts badly, sure that browser vendors (all of them) do not presently do their best to support SVG fonts. So be it - but I think that SVG fonts are a real turning point in the history of typography and should be taken for what they really are: an amazing tool to bring fresh design ideas in typography and cool typography in web design. And it&amp;#8217;s important to remember that SVG fonts do not play the same game as WOFF fonts on the web. Both formats have their strengths and weaknesses but there are not mutually exclusive. &lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>SVG et HTML5 font bon ménage avec Firefox</title>
    <link>http://jeremie.patonnier.net/post/2010/07/26/SVG-et-HTML5-font-bon-menage-avec-Firefox</link>
    <guid isPermaLink="false">urn:md5:c2f6de0769d7956db1c380cc1171e867</guid>
    <pubDate>Mon, 26 Jul 2010 15:00:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>Firefox</category><category>HTML</category><category>Mozilla</category><category>SVG</category><category>webdesign</category>
    <description>&lt;p&gt;Pour faire suite à mon précédent article sur SVG, je vous propose de partir explorer la révolution technique que représente la possibilité d'inclure du SVG directement dans un document HTML. Cette possibilité fait partie du futur standard HTML 5. C'est une fonctionnalité qui sera disponible dans Firefox 4 et Internet Explorer 9 dès leur sortie. Alors comment ça marche et qu'est-ce qu'on peut en faire&amp;nbsp;?&lt;/p&gt;    &lt;h2&gt;Les premiers seront les derniers&lt;/h2&gt;
&lt;p&gt;Une fois n'est pas coutume, on va commencer par la fin. Dans cette article je vais vous détailler comment j'ai réalisé la démo suivante qui permet de transformer n'importe quelle image ou vidéo disponible en ligne en un Puzzle jouable&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jeremie.patonnier.net/experiences/svg/inline/puzzle.html&quot; hreflang=&quot;fr&quot;&gt;http://jeremie.patonnier.net/experiences/svg/inline/puzzle.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour pouvoir voir et utiliser cette démonstration, vous avez besoin d'un navigateur qui supporte les fonctionnalités suivantes&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le support de SVG directement au sein des documents HTML5&lt;/li&gt;
&lt;li&gt;Le support de la balise &lt;code&gt;canvas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Le support des filtres SVG&lt;/li&gt;
&lt;li&gt;Le support des balises &lt;code&gt;clipPath&lt;/code&gt; et &lt;code&gt;foreignObject&lt;/code&gt; de la norme SVG&lt;/li&gt;
&lt;li&gt;Le support de l'API localStorage et de JSON (ça, c'est un peu la cerise sur le gâteau)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Au moment où j'écris ces lignes, le seul navigateur qui réunisse ces conditions nativement est Firefox 4 beta 2. C'est avec lui que j'ai fait tous mes tests.&lt;/p&gt;
&lt;p&gt;Vous pouvez aussi tester cette démo avec Firefox 3.6. Néanmoins, pour cela, vous devez activer le support du parser HTML5. C'est possible en vous rendant à l'adresse &lt;code&gt;about:config&lt;/code&gt;, en y cherchant le paramètre &lt;code&gt;html5.enable&lt;/code&gt; et en lui donnant la valeur &lt;code&gt;true&lt;/code&gt;. Attention, il s'agit d'une version expérimentale du parser HTML5 qui n'est pas nécessairement très stable. Pensez à le désactiver une fois que vous aurez finit de jouer &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; (Ceci dit, personnellement, je n'ai jamais eu de problème avec)&lt;/p&gt;
&lt;p&gt;A terme, IE9 supportera toutes ces fonctionnalités. Malheureusement, la Plateform Preview 3 ne supporte pas correctement les filtres et comme je n'ai pas de machine tournant sous Windows 7, je n'ai pas pu tester pour voir ce que ça donnait en l'état. &lt;/p&gt;
&lt;p&gt; Concernant &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=30388&quot; hreflang=&quot;en&quot;&gt;Safari, Chrome&lt;/a&gt; et Opera, je n'ai pas entendu parler d'un support à court terme de SVG directement au sein des documents HTML5.&lt;/p&gt;
&lt;h2&gt;Mais pourquoi, John&amp;nbsp;? Pourquoi&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;Avant de détailler comment j'ai utilisé chacune des technologies mise en œuvre, voyons d'abord les raisons des choix techniques fait ici.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;strong&gt;SVG directement utilisé dans un document HTML5&lt;/strong&gt;&lt;br /&gt;D'un coté, SVG va permettre de dessiner assez facilement les formes tarabiscotées des pièces du puzzle. D'un autre coté, HTML est plus facile à manipuler dès qu'il s'agit de mettre en œuvre une interface utilisateur. Le plus simple est donc d'inclure l'un dans l'autre. Techniquement parlant, il est plus facile d'intégrer du SVG dans HTML que l'inverse car on n'a (presque) pas à se soucier de la gestion des espaces de nom XML de SVG et de XHTML, le parser HTML5 s'en occupe tout seul.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le support de la balise &lt;code&gt;canvas&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;Prendre une source graphique pour en faire un puzzle requière de la manipuler, à minima pour la découper en morceau représentant les pièces. Dès lors qu'on parle de réaliser des opérations de cette nature, c'est &lt;code&gt;canvas&lt;/code&gt; qui est le plus indiqué. En outre, cela permet également de traiter n'importe quelle source graphique supportée par le navigateur en entrée et d'en obtenir une sortie unifiée et manipulable de la même façon, peut importe qu'il s'agisse d'une image ou d'une vidéo (ou même d'&lt;a href=&quot;https://developer.mozilla.org/en/Code_snippets/Canvas#section_2&quot; hreflang=&quot;en&quot;&gt;une page web quelconque&lt;/a&gt;... mais je ne suis pas allé aussi loin ici).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les filtres SVG&lt;/strong&gt;&lt;br /&gt;Les filtres SVG permettent d'appliquer très simplement des effets spéciaux sur n'importe quel élément SVG, et, dans le cas de Firefox, sur n'importe quel élément HTML. En outre, les filtres étant déclaratifs (matérialisé sous forme de balises SVG) il est très facile de les modifier et de les ajuster sans avoir à recourir à de complexes artifices de programmation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les balises SVG &lt;code&gt;clipPath&lt;/code&gt; et &lt;/strong&gt;&lt;code&gt;&lt;strong&gt;foreignObject&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;La balise &lt;code&gt;clipPath&lt;/code&gt; permet de créer des formes de découpes applicables à un objet. Par exemple, si vous voulez &quot;percer un trou&quot; dans une image, c'est exactement ce qu'il vous faut. Si vous vouliez faire la même chose avec &lt;code&gt;canvas&lt;/code&gt;, ce serait possible, mais au prix d'un intense effort de programmation sans la souplesse de pouvoir changer simplement la forme de votre découpe. La balise &lt;code&gt;foreignObject&lt;/code&gt; permet quand à elle d'embarquer n'importe quoi dans du SVG. En effet, si au sein d'un document HTML5 il est possible de mettre des îlots de SVG, ça ne veux pas dire que vous pouvez mettre du HTML n'importe comment au milieu des balises SVG.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L'API localStorage et JSON&lt;/strong&gt;&lt;br /&gt;Pas indispensable, mais c'est un moyen simple de pouvoir sauvegarder automatiquement la progression de votre Puzzle.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Bouger ou ne pas bouger, tel est la question&lt;/h2&gt;
&lt;p&gt;La première chose que j'ai faite c'est de prendre la source graphique qui servira de puzzle et de la redessiner dans un élément &lt;code&gt;canvas&lt;/code&gt;. J'utilise cela comme une couche d'abstraction. En effet, une fois la source graphique convertis en un élément &lt;code&gt;canvas&lt;/code&gt;, je n'ai plus à m'en soucier et quelques soit les opérations que je ferais par la suite, je me contenterai de manipuler un &lt;code&gt;canvas&lt;/code&gt;. Accessoirement, l'opération est d'une trivialité absolue&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_javascript&quot;&gt;monCanvas.getContext('2d').drawImage(maSourceGraphique, 0, 0, maSourceGraphique.width, maSourceGraphique.height);&lt;/pre&gt;
&lt;p&gt;Néanmoins, ce n'est pas tout à fait suffisant pour gérer les vidéos. En effet, pour que l'élément &lt;code&gt;canvas&lt;/code&gt; donne l'impression d'être animé comme la vidéo, il faut redessiner le &lt;code&gt;canvas&lt;/code&gt; à intervalle régulière au fur est à mesure de la lecture de la vidéo. Pour cela, il suffit d'utiliser la fonction &lt;code&gt;setInterval&lt;/code&gt; pour que la méthode &lt;code&gt;drawImage&lt;/code&gt; soit appelée régulièrement.&lt;/p&gt;
&lt;p&gt;Une fois que ce premier élément &lt;code&gt;canvas&lt;/code&gt; est réalisé, chaque pièce du puzzle comprendra son propre élément &lt;code&gt;canvas&lt;/code&gt; dans lequel on dessinera la portion du premier &lt;code&gt;canvas&lt;/code&gt; qui lui correspond. Cette double utilisation de l'élément &lt;code&gt;canvas&lt;/code&gt; est nécessaire pour 2 raisons&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Question de performance&amp;nbsp;: Sean Christmann a montré dans &lt;a href=&quot;http://www.craftymind.com/2010/04/20/blowing-up-html5-video-and-mapping-it-into-3d-space/&quot; hreflang=&quot;en&quot;&gt;un article sur l'utilisation des balises &lt;code&gt;video&lt;/code&gt; et &lt;code&gt;canvas&lt;/code&gt;&lt;/a&gt; que l'usage de deux &lt;code&gt;canvas&lt;/code&gt; successifs pour réaliser des effets spéciaux sur les vidéos apporte un gain non négligeable vis à vis des performances.&lt;/li&gt;
&lt;li&gt;Les limites de l'implémentation de SVG&amp;nbsp;: En théorie, il serait possible de définir un élément &lt;code&gt;canvas&lt;/code&gt; réutilisable au sein de SVG. Malheureusement les tests que j'ai pu réaliser mon montrés que &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=579853&quot; hreflang=&quot;en&quot;&gt;ce n'était pas possible&lt;/a&gt;. Il faut donc créer un élément &lt;code&gt;canvas&lt;/code&gt; distinct pour chacune des pièces.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 lang=&quot;en&quot;&gt;One piece to rule them all&lt;/h2&gt;
&lt;p&gt;Chaque pièce du puzzle sera un élément &lt;code&gt;svg&lt;/code&gt; à part entière créé sur le même modèle. Cela a plusieurs avantages&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Lors du déplacement des pièces, celles-ci pourront êtres déplacées sur l'intégralité de la surface du document HTML. Si elles avaient été une sous-partie d'un seul élément &lt;code&gt;svg&lt;/code&gt;, le déplacement aurait été contraint à la zone visible du document SVG correspondant.&lt;/li&gt;
&lt;li&gt;Toutes les pièces reposant sur la même arborescence DOM, il est possible de créer une arborescence générique qui sera clonée autant de fois que nécessaire pour créer toutes les pièces.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L'arborescence DOM d'une pièce de puzzle ressemble à ça&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;svg class=&quot;piece&quot; width=&quot;155&quot; height=&quot;155&quot; x=&quot;0&quot; y=&quot;0&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;defs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;path id=&quot;p1_1&quot; d=&quot;M10 10 h100 v26 a23,23 0 1,0 0,48 v26 h-25 a25,25 0 1,1 -50,0 h-25 Z&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/defs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;clippath id=&quot;c1_1&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;use xlink:href=&quot;http://jeremie.patonnier.net/post/2010/07/26/SVG-et-HTML5-font-bon-menage-avec-Firefox#p1_1&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/clippath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;g&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;g clip-path=&quot;url(#c1_1)&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;foreignobject x=&quot;10&quot; y=&quot;10&quot; width=&quot;125&quot; height=&quot;125&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;canvas width=&quot;125&quot; height=&quot;125&quot;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/foreignobject&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;use xlink:href=&quot;http://jeremie.patonnier.net/post/2010/07/26/SVG-et-HTML5-font-bon-menage-avec-Firefox#p1_1&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/g&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/g&amp;gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;
&lt;p&gt;Quelques explications sur cette arborescence&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;La balise &lt;code&gt;path&lt;/code&gt; est encapsulée dans une balise &lt;code&gt;defs&lt;/code&gt;. Grâce à cela la forme de la pièce est masquée et pourra être réutilisée à plusieurs endroit via la balise &lt;code&gt;use&lt;/code&gt;. Elle est utilisée une première fois dans la balise &lt;code&gt;clipPath&lt;/code&gt; pour définir la forme de découpe de la pièce qui sera appliquée à l'élément &lt;code&gt;canvas&lt;/code&gt;. Elle est utilisée une deuxième fois après la balise &lt;code&gt;foreignObject&lt;/code&gt; pour pouvoir dessiner un contour autour de la pièce tant que la pièce n'est pas à sa place définitive (pour donner un petit effet de lueur interne sans recourir à un filtre).&lt;/li&gt;
&lt;li&gt;La balise &lt;code&gt;foreignObject&lt;/code&gt; est entourée de deux balises &lt;code&gt;g&lt;/code&gt;. La première (le parent direct de la balise foreignObject) permet d'appliquer la forme de découpe en même temps à l'élément &lt;code&gt;canvas&lt;/code&gt; et à l'élément &lt;code&gt;use&lt;/code&gt;. La deuxième balise &lt;code&gt;g&lt;/code&gt; permet d'appliquer un éventuel filtre d'ombre porté. Si vous appliquez le filtre et la découpe sur le même élément &lt;code&gt;g&lt;/code&gt;, le filtre sera appliqué avant la découpe. Si comme ici, vous voulez que le filtre s'applique à la forme résultante de la découpe, vous êtes contraint de sur-baliser votre code SVG pour forcer l'ordre d'application des effets.&lt;/li&gt;
&lt;li&gt;Notez l'espace de nom &quot;&lt;em&gt;xlink&lt;/em&gt;&quot; sur l'attribut &lt;code&gt;href&lt;/code&gt; de la balise &lt;code&gt;use&lt;/code&gt;. L'inclusion direct de SVG dans un document HTML5 simplifie drastiquement l'usage des espaces de nom XML mais ne nous en dispense pas totalement. En effet, même dans ce cas d'utilisation, SVG reste du XML et SVG utilisant le langage XLINK pour définir cet attribut &lt;code&gt;href&lt;/code&gt;, il est obligatoire de bien spécifier cet espace de nom. Pour éviter d'avoir à faire des manipulations complexes à ce niveau, HTML5 fournis par défaut le raccourcis &quot;&lt;em&gt;xlink&lt;/em&gt;&quot; pour gérer cet espace de nom.&lt;/li&gt;
&lt;li&gt;Vous noterez que la taille de l'élément &lt;code&gt;svg&lt;/code&gt; est plus grande que celle de l'élément &lt;code&gt;canvas&lt;/code&gt;. C'est nécessaire car la zone visible de l'élément &lt;code&gt;svg&lt;/code&gt; correspond à la portion de la source graphique représentée par l'élément &lt;code&gt;canvas&lt;/code&gt; ET les éventuels filtres qui s'y appliqueront pour générer les ombres portées.&lt;/li&gt;
&lt;li&gt;La valeur de l'attribut &lt;code&gt;d&lt;/code&gt; de la balise &lt;code&gt;path&lt;/code&gt; peut faire peur. Je ne vais pas vous détailler ici le pourquoi du comment (ça mériterai un article à part entière) mais sachez juste que c'est cette simple ligne qui fait qu'on a un tracé de pièce de puzzle (ici le coin haut-gauche). Si vous regardez la source du puzzle, vous verrez que j'ai regroupé toute l'intelligence de la construction de ce chemin dans une fonction dédiée. N'hésitez pas à vous amuser à la décortiquer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;T'as d'beaux yeux tu sais&amp;nbsp;!&lt;/h2&gt;
&lt;p&gt;
Pour rendre l'expérience de jeux un peu plus fun, on va rajouter quelques effet spéciaux et fonctionnalités qui vont permettre de lui donner un aspect un peu plus &quot;fini&quot;.&lt;/p&gt;
&lt;h3 lang=&quot;en&quot;&gt;Pimp my mouse&lt;/h3&gt;
&lt;p&gt;L'idée quand on créer des pièces de puzzle qu'on peut manipuler à la souris, c'est de pouvoir gérer la sélection de la pièce selon la forme de celle-ci. Le problème, c'est que si on ne fait rien, la souris régis à une zone rectangulaire, même sur les zones transparentes. Heureusement, de ce point de vue, SVG est bien fichue et sait gérer ça sans avoir à recourir à des dizaines de lignes de code. En fait, ça se résume à un peu de CSS&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;svg{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pointer-events : none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;svg canvas{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pointer-events : auto;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;La propriété &lt;code&gt;pointer-events&lt;/code&gt; permet de définir comment la souris va réagir lors de ses interactions avec un élément. Ici on dit que la souris ne doit pas déclencher d'évènement lorsqu'elle interagit avec un élément &lt;code&gt;svg&lt;/code&gt; mais par contre elle doit réagir normalement avec les éléments &lt;code&gt;canvas&lt;/code&gt; présent dans nos éléments &lt;code&gt;svg&lt;/code&gt;. Comme les éléments canvas sont découpés par un &lt;code&gt;clipPath&lt;/code&gt;, seul les parties visibles de l'élément &lt;code&gt;canvas&lt;/code&gt; réagiront à la souris (ce comportement est sans doute la principale différence entre les balises &lt;code&gt;clipPath&lt;/code&gt; et &lt;code&gt;mask&lt;/code&gt; de SVG). Notez que d'un point de vu Javascript, même si la souris ne renvoie pas d'évènement lorsqu'elle interagit avec les éléments &lt;code&gt;svg&lt;/code&gt;, les évènements renvoyés par la souris sur l'élément &lt;code&gt;canvas&lt;/code&gt; remontent normalement vers l'élément &lt;code&gt;svg&lt;/code&gt; est peuvent être interceptés à ce niveau là. La propriété &lt;code&gt;pointer-event&lt;/code&gt; ne fait que bloquer l'émission des évènements, elle ne bloque pas leur diffusion ni leur exploitation dans le DOM.&lt;/p&gt;
&lt;h3&gt;Ombrage, ô désespoirs&amp;nbsp;!&lt;/h3&gt;
&lt;p&gt;Pour donner un peu de relief au puzzle, je me suis amusé à rajouter des ombres portés sur les pièces&amp;nbsp;: une petite ombre porté quand une pièce est posée n'importe où, une grande ombre porté quand la pièce est &quot;soulevée&quot; et transportée et enfin, pas d'ombre du tout une fois que la pièce est à sa place définitive. Chacune des ombres (la petite est la grande) est définie à l'aide d'un filtre SVG distinct pour chacune. Par exemple, la petite ombre est définie comme cela&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;filter id=&quot;smallShadow&quot; filterUnits=&quot;userSpaceOnUse&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feColorMatrix type=&quot;matrix&quot; in=&quot;SourceAlpha&quot; result=&quot;greySource&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; values=&quot;0 0 0 0 0&amp;nbsp; 0 0 0 0 0&amp;nbsp; 0 0 0 0 0&amp;nbsp; .6 .6 .6 .6 0&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feGaussianBlur in=&quot;greySource&quot; stdDeviation=&quot;2&quot; result=&quot;flou&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feOffset in=&quot;flou&quot; dx=&quot;1&quot; dy=&quot;1&quot; result=&quot;Ombre&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feMerge&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feMergeNode in=&quot;Ombre&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feMergeNode in=&quot;SourceGraphic&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/feMerge&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;/pre&gt;
&lt;p&gt;Pour faire simple, ce filtre prend la source alpha (la transparence) de l'élément auquel va s'appliquer le filtre, lui applique une matrice de couleur (&lt;code&gt;feColorMatrix&lt;/code&gt;) pour quelle soit noir et légèrement transparente, va la flouter (&lt;code&gt;feGaussianBlur&lt;/code&gt;), la décaler (&lt;code&gt;feOffset&lt;/code&gt;) vers le bas et la droite et va recombiner le tout (&lt;code&gt;feMerge&lt;/code&gt;, &lt;code&gt;feMergeNode&lt;/code&gt;) avec la source graphique de l'élément. Je ne vous détail pas plus précisément que ça l'usage des primitives de filtres car cela mériterai un article à lui seul, mais c'est tout ça qui fait qu'on a une ombre de forme arbitraire (contrairement à la propriété CSS &lt;code&gt;box-shadow&lt;/code&gt; qui ne produit que des ombres rectangulaires... éventuellement avec des coins arrondis, mais c'est tout).&lt;/p&gt;
&lt;p&gt;L'application des filtres se fait très facilement directement via CSS&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;.shadow &amp;gt; g{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; filter:url(#smallShadow);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#drag.shadow &amp;gt; g{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; filter:url(#bigShadow);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.lock.shadow &amp;gt; g{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; filter:none;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Vous n'avez alors plus qu'à jouer sur les classes est les ID de vos éléments avec Javascript pour appliquer ou non un filtre. Notez que Firefox permet également d'appliquer un filtre SVG à n'importe quel élément HTML. C'est ce que j'utilise pour griser l'aide du puzzle qui n'est qu'un simple élément &lt;code&gt;canvas&lt;/code&gt; affiché sur l'aire de jeu auquel j'applique un filtre de matrice de couleur.&lt;/p&gt;
&lt;h3&gt;Allo&amp;nbsp;! Caroline&amp;nbsp;! C'est Roger.&lt;/h3&gt;
&lt;p&gt;Dernière fonctionnalité, la sauvegarde automatique du puzzle en arrière plan. A chaque fois que vous déplacez une pièce, il y a un appel à l'API localStorage de HTML5 pour enregistrer la position de la pièce. De cette manière, si pour une raison ou une autre vous devez interrompre votre partie, vous pouvez la reprendre plus tard exactement là ou vous vous étiez arrêté. &lt;/p&gt;
&lt;p&gt;Pour simplifier les traitements, je stocke toutes les données représentant l'état du puzzle dans un objet spécifique. L'API localStorage stocke les données sous la forme clé/valeur. La norme est assez flou sur le type de donnée qui peuvent être stockées mais Firefox n'accepte que les chaines de caractère comme valeur à stocker donc, pour enregistrer mon objet, je le transforme en chaine en utilisant le support natif de JSON tel que définie dans la norme ECMAScript 5&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_javascript&quot;&gt;var data = JSON.stringify(this.savedData);&lt;br /&gt;&lt;br /&gt;window.localStorage.setItem('currentPuzzle', data);&lt;/pre&gt;&lt;p&gt;La récupération des données est tout aussi simple&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_javascript&quot;&gt;var data = window.localStorage.getItem('currentPuzzle');&lt;br /&gt;&lt;br /&gt;data = JSON.parse(data);&lt;/pre&gt;
&lt;h2&gt;Parfois, c'est le vil coyote qui gagne&lt;/h2&gt;
&lt;p&gt;
Lorsqu'on manipule des technologies nouvellement implémentées dans des navigateurs qui en sont encore au stade des versions Alpha/Beta, il n'est pas rare que l'on soit confronté à des problèmes. Dans ce cas précis, j'ai travaillé avec Minefield qui est la version non-stable de Firefox (et qui représente au moment ou j'écris ces lignes la version de développement du future Firefox 4) et j'ai été confronté à trois types de problèmes différents.&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3 lang=&quot;en&quot;&gt;Is there a Road Runner over here?&lt;/h3&gt;
&lt;p&gt;Les développeurs de Firefox 4 travaillent actuellement comme des malades sur les performances du navigateur et si l'on peut déjà percevoir une amélioration globale des performances, le travail n'est pas terminé et de nombreuses améliorations sont encore attendues dans les semaines à venir. Malheureusement, tout n'est pas parfait...&lt;/p&gt;
&lt;p&gt;Dans le cas qui nous occupe ici, le principal problème de performance provient de l'usage des filtres SVG. Les filtres sont actuellement ultra consommateur de ressources pour pouvoir être calculés. Ils sont tellement gourmands que j'ai très vite mis la possibilité de désactiver les ombres portées sur les pièces. En effet, si vous activez les ombres portées et que vous construisez un puzzle basé sur une vidéo, la lecture de celle-ci sera saccadée et le déplacement des pièces ne sera pas fluide. Le problème sera d'autant plus perceptible si vous créez un puzzle avec de nombreuses pièces (plus de 50) car au problème des filtres vient s'ajouter l'augmentation du nombre de nœuds DOM à gérer ce qui peut très vite plomber l'utilisation du jeu (en particulier lorsque vous déplacez les pièces).&lt;/p&gt;
&lt;p&gt;Autre point qui peut vite affecter les performances, l'utilisation de l'API localStorage. L'accès en lecture et en écriture via cette API est prohibitif au niveau performance (un peu moins de 100 milliseconde pour une simple opération d'écriture de chaine de caractère sur ma machine... iiirk&amp;nbsp;!). Ainsi si j'avais voulut enregistrer séparément la position de chaque pièces, il aurait fallut près de 10 secondes pour enregistrer l'état d'un puzzle de 100 pièces&amp;nbsp;! Soyez donc très prudent si vous utilisez cette API car sinon cela peut vite se voir. Si vous prévoyez de faire beaucoup d'opération via celle-ci, je ne saurait trop vous conseiller soit de les traiter en tache de fond asynchrone via l'utilisation de l'&lt;a href=&quot;http://dev.w3.org/html5/workers/&quot; hreflang=&quot;en&quot;&gt;API Web Workers&lt;/a&gt;, soit de travailler avec un objet contenant vos données que &lt;a href=&quot;https://developer.mozilla.org/en/Using_JSON_in_Firefox&quot; hreflang=&quot;en&quot;&gt;vous transformerez en chaine JSON&lt;/a&gt; avant de l'enregistrer intégralement en une seule fois (c'est cette dernière stratégie que j'ai choisie). Si vous n'y faite pas attention, vous pouvez vous retrouver avec un gel complet de votre page&amp;nbsp;!&lt;/p&gt;
&lt;h3&gt;Robert&amp;nbsp;! Il y a un cafard dans la machine.&lt;/h3&gt;
&lt;p&gt;L'intérêt de réaliser ce genre de démo avec une version de développement d'un navigateur, c'est que ça permet de découvrir des bugs qu'il est possible de faire corriger avant la sortie de la version final du navigateur. Les bugs les plus faciles à corriger sont liés à l'implémentation de la balise SVG &lt;code&gt;foreignObject&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=576986&quot; hreflang=&quot;en&quot;&gt;Bug 576986&lt;/a&gt;&amp;nbsp;: la balise &lt;code&gt;foreignObject&lt;/code&gt; ne respectait pas les règles d'application des évènements de la souris lorsqu'on lui appliquait une forme de découpe. La correction a été apportée dans les heures qui ont suivit. Waow&amp;nbsp;!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=578309&quot; hreflang=&quot;en&quot;&gt;Bug 578309&lt;/a&gt;&amp;nbsp;: La balise &lt;code&gt;foreignObject&lt;/code&gt; redéfinissait son propre espace de coordonnées, comme si on y avait appliquée une transformation. La encore, il n'aura fallut que quelques jours pour que ce soit corrigé. J'en profite ici pour adresser un grand merci à &lt;a href=&quot;http://longsonr.wordpress.com/&quot; hreflang=&quot;en&quot;&gt;Robert Longson&lt;/a&gt; qui a travaillé sur ces bugs en particulier et qui fait un énorme travail en ce qui concerne le support de SVG dans Firefox.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mais il y a aussi quelques bugs plus durs qui vont sans doute être assez délicat à résoudre&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=577824&quot; hreflang=&quot;en&quot;&gt;Bug 577824&lt;/a&gt;&amp;nbsp;: Quand on attache un élément HTML à l'arbre DOM du document via Javascript et qu'un filtre s'applique sur cet élément, l'élément n'est pas affiché.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=577464&quot; hreflang=&quot;en&quot;&gt;Bug 577464&lt;/a&gt;&amp;nbsp;: Celui là, c'est le plus bizarre de tous, et sans doute le plus difficile à résoudre. Dans certain cas de figure, le rendu des éléments auquel est appliquée une forme de découpe n'est pas correctement réalisé. Il est tellement difficile de produire un cas d'utilisation unitaire que son simple diagnostique risque de prendre du temps. Une des pistes actuellement exploré serait un bug lié à la bibliothèque graphique Cairo qui est utilisée par Firefox pour rendre les éléments visuels.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Allo&amp;nbsp;! Tonton&amp;nbsp;? Pourquoi tu tousses&amp;nbsp;?&lt;/h3&gt;
&lt;p&gt;Après, au delà des éventuels problèmes d'implémentation, il y a aussi les problèmes liés aux spécifications elles-mêmes. Les spécifications qui tournent autour de HTML5 ne sont pas encore finalisées ou pas forcément adapté à certains cas d'utilisation et l'on tombe parfois sur des perles qui peuvent plonger un web designer dans des affres d'incompréhension. J'en ai découvert deux dans ce gout là. Une dans la spécification de l'API Canvas 2D et une dans la spécification de SVG 1.1.&lt;/p&gt;
&lt;h4&gt;Canvas pas aller ça monsieur.&lt;/h4&gt;
&lt;p&gt;En l'état de la spécification, avec la méthode &lt;code&gt;drawImage&lt;/code&gt; de &lt;code&gt;canvas&lt;/code&gt;, il est possible de dessiner soit une image, soit une vidéo. Quand vous dessinez une image, pas de problème, vous dessinez l'image elle-même. Quand vous dessinez une vidéo, ce qui est dessiné, c'est l'image qui est lut par le lecteur vidéo au moment ou on appel la fonction de dessin. Maintenant, que ce passe-t-il si vous voulez dessiner une image animé (aGIF, APNG, MNG, SVG, etc.)&amp;nbsp;? Moi, assez naïvement, je me suis dit que ça allait dessiner l'image courante de l'animation au moment ou on appel la fonction de dessin... bref que ça allait ce comporter comme avec une vidéo et c'est d'ailleurs comme cela que se comporte Firefox 3.6. Mais que nenni jeune Padawan&amp;nbsp;! La spécification dit que dans le cas d'une image animé, ce qui est dessiné, c'est la première image de l'animation et puis c'est tout&amp;nbsp;!&lt;/p&gt;
&lt;blockquote lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://www.w3.org/TR/2dcontext/#images&quot; hreflang=&quot;en&quot;&gt;http://www.w3.org/TR/2dcontext/#images&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;q&gt;When the drawImage() method is passed an animated image as its image argument, the user agent must use the poster frame of the animation, or, if there is no poster frame, the first frame of the animation.&lt;/q&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et chez Mozilla, ils se sont dit que ce serai une bonne idée de suivre la spécification dans Firefox 4. Résultat des courses, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=578514&quot; hreflang=&quot;en&quot;&gt;j'ai ouvert un bug en pensant à une régression&lt;/a&gt;, mais non, c'est juste qu'ils on fait en sorte d'être respectueux de la spécification.&lt;/p&gt;
&lt;p&gt;Alors, là, j'ai envie de dire&amp;nbsp;: &quot;Bravo, c'est bien&quot;. Mais d'un autre coté, maintenant, on fait comment pour accéder aux autres images qui composent une image animée&amp;nbsp;? On est typiquement dans un cas ou la spécification est difficile à comprendre et elle reflète sans doute les capacités des fabriquant de navigateur à gérer ce cas d'utilisation. Mozilla sait comment gérer les images animées dans ce cas de figure, mais se bride du fait de la faiblesse de la spécification sur ce point. C'est dommage. &lt;/p&gt;
&lt;p&gt;La spécification n'est pas encore définitive et si vous pensez que ce cas d'utilisation est important, faite le savoir. Pour cela, vous pouvez soit faire du lobbying auprès du HTML Worging Group (bon courage&amp;nbsp;!) soit auprès des fabricants de navigateur qui sont directement parti prenante. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=578514&quot; hreflang=&quot;en&quot;&gt;La discussion est ouverte chez Mozilla&lt;/a&gt; et si, par exemple, vous prenez simplement le temps de voter pour le bug que j'ai ouvert, peut-être que Mozilla considèrera qu'il y a matière à pousser le sujet.&lt;/p&gt;
&lt;h4&gt;SVG, ou l'art de Se Vautrer la Gueule&amp;nbsp;?&lt;/h4&gt;
&lt;p&gt;A la base, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=579550&quot; hreflang=&quot;en&quot;&gt;j'ai fait une mauvaise interprétation de la spécification SVG&lt;/a&gt; alors que je voulais réutiliser un élément &lt;code&gt;foreigObject&lt;/code&gt; avec la balise &lt;code&gt;use&lt;/code&gt;. J'ai naïvement crus que n'importe quelle enfant légitime de la balise &lt;code&gt;g&lt;/code&gt; pouvait être réutilisé via la balise &lt;code&gt;use&lt;/code&gt;. Malheureusement, ce n'est pas le cas. La balise &lt;code&gt;use&lt;/code&gt; ne peut être utilisée que pour dupliquer des éléments explicitement graphique (ce qui n'est pas le cas de &lt;code&gt;foreignObject&lt;/code&gt;) ou certains conteneurs (&lt;code&gt;g&lt;/code&gt;, &lt;code&gt;symbol&lt;/code&gt; et &lt;code&gt;svg&lt;/code&gt;). Néanmoins, comme &lt;code&gt;g&lt;/code&gt; est un élément valide pour &lt;code&gt;use&lt;/code&gt;, il suffit d'envelopper un élément &lt;code&gt;foreignObject&lt;/code&gt; avec un élément &lt;code&gt;g&lt;/code&gt; est le tour et joué.&lt;/p&gt;
&lt;p&gt;Et là de se poser la question&amp;nbsp;: &quot;Mais pourquoi la norme ne permet pas d'utiliser directement tous les enfants légitimes de &lt;code&gt;g&lt;/code&gt;&amp;nbsp;? Pourquoi faut-il rajouter une balise supplémentaire qui a le gout et l'odeur de l'inutile&amp;nbsp;?&quot;. Bien évidement, il s'agit de questions de web designer, pas d'implémenteur. En effet, il y a fort à parier que lorsque la norme a commencé à être écrite (il y a plus de 10 ans, rappelons-le), les développeurs en charge de sa mise en œuvre ont du rencontrer un problème à ce niveau et faire un arbitrage dans ce sens. Ou bien il y a eu un débat philosophique quelconque a propos de ce qu'est la balise &lt;code&gt;use&lt;/code&gt; et personne n'a réussie à challenger cette vision. Franchement, je n'en sais rien mais avec le recul que l'on a désormais, la question aurait le mérite d'être à nouveau posée.&lt;/p&gt;
&lt;p&gt;De manière général, ce genre de collision malheureuse entre SVG et HTML5 risque de se représenter ailleurs (essayez de contrôler à l'aide de Javascript une balise HTML &lt;code&gt;video&lt;/code&gt; que vous avez cloné via la balise SVG &lt;code&gt;use&lt;/code&gt;... vous ne pouvez pas&amp;nbsp;!). En effet, on a d'un coté une norme vieillissante (SVG) et de l'autre une norme toute neuve en construction (HTML5). A bien des égards, SVG a été conçus pour vivre dans un univers statique. A l'inverse, HTML5 redéfinis énormément d'éléments dynamiques au travers de nouvelles API Javascript. De ce point de vue, je ne serais pas surpris que HTML5 redonne un coup de fouet à SVG et il n'est pas exclus que dans les années a venir on voit arriver une norme SVG 2 pour résoudre tous ces nouveaux cas d'utilisation... mais bon, ne soyez pas trop pressé. C'est aussi ça qui fait que Flash à encore de beau jours devant lui.&lt;/p&gt;
&lt;h2&gt;Le mot de la fin (des haricots)&lt;/h2&gt;
&lt;p&gt;Voila, je viens de vous arroser avec un article copieusement long et en même temps extrêmement raccourcis. Si vous voulez comprendre plus précisément comme marche quoi, je vous encourage à regarder le code source que j'ai essayé de commenter le plus possible. Ce qu'il faut retenir, c'est que le support de SVG dans HTML est encore quelque chose de très expérimental mais cela donne déjà une bonne idée de ce que peut faire chaque technologie respective et ce que l'on gagne à les mixer.&lt;/p&gt;
&lt;p&gt;Si vous voulez aller plus loin, n'hésitez pas à lire les spécifications. Elles peuvent parfois s'avérer très utile. La spécification SVG par exemple comporte de nombreux exemples de code très utile à la compréhension. D'autres ressources très utile également sont les documentations techniques des fabricants de navigateurs. En particulier dans le cas de cette démo, le &lt;a href=&quot;https://developer.mozilla.org/En&quot;&gt;Mozilla Developper Center&lt;/a&gt;, mais aussi &lt;a href=&quot;http://msdn.microsoft.com/en-us/ie/aa740473.aspx&quot; hreflang=&quot;en&quot;&gt;MSDN&lt;/a&gt;, &lt;a href=&quot;http://dev.opera.com/&quot; hreflang=&quot;en&quot;&gt;Opera Dev&lt;/a&gt; et &lt;a href=&quot;http://trac.webkit.org/wiki&quot; hreflang=&quot;en&quot;&gt;le wiki de Webkit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Quoi qu'il en soit, expérimentez vous même et faite vous votre propre idée. Ces technologies sont toutes assez nouvelles, les implémentations évoluent constamment et le processus de standardisation n'est pas linéaire...mais amusez vous, c'est comme ça que vous apprendrez de nouvelles choses &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;La spécification SVG : &lt;a href=&quot;http://www.w3.org/TR/SVG/&quot; hreflang=&quot;en&quot;&gt;http://www.w3.org/TR/SVG/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;La spécification HTML 5 : &lt;a href=&quot;http://www.w3.org/TR/html5/&quot; hreflang=&quot;en&quot;&gt;http://www.w3.org/TR/html5/&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;L'API Canvas 2D : &lt;a href=&quot;http://www.w3.org/TR/2dcontext/&quot; hreflang=&quot;en&quot;&gt;http://www.w3.org/TR/2dcontext/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;L'API Storage : &lt;a href=&quot;http://www.w3.org/TR/webstorage/&quot; hreflang=&quot;en&quot;&gt;http://www.w3.org/TR/webstorage/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;L'API Web Workers : &lt;a href=&quot;http://www.w3.org/TR/workers/&quot; hreflang=&quot;en&quot;&gt;http://www.w3.org/TR/workers/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ECMAScript 5 (PDF) : &lt;a href=&quot;http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf&quot; hreflang=&quot;en&quot;&gt;http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>

    

      </item>
  
  <item>
    <title>Introduction à SVG</title>
    <link>http://jeremie.patonnier.net/post/2010/06/29/Introduction-a-SVG</link>
    <guid isPermaLink="false">urn:md5:94cc61fe308f4f98eda9a85ada932d84</guid>
    <pubDate>Tue, 29 Jun 2010 14:00:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>SVG</category><category>webdesign</category>
    <description>&lt;p&gt;Dans les années à venir, le format d'image SVG (&lt;em lang=&quot;en&quot;&gt;Scalable Vector Graphics&lt;/em&gt;) va devenir une technologie extrêmement commune sur le Web. Le décollage de cette technologie va se faire grâce à deux évènements d'importance dans le monde du Web. D'une part, avec l'arrivée du support de SVG par Internet Explorer 9, cette technologie sera désormais disponible nativement dans tous les navigateurs majeurs du marché. D'autre part, la norme HTML 5 va normaliser et simplifier la façon d'embarquer du SVG directement au sein des documents HTML. C'est le moment ou jamais de s'intéresser à cette technologie &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;    &lt;h2&gt;C'est quoi SVG ?&lt;/h2&gt;
&lt;p&gt;SVG est un format d'image vectoriel reposant sur une syntaxe XML. Dit comme ça, c'est sûr, ça n'est pas très sexy ! En fait, ce format d'image est un peu le meilleur de deux mondes :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; D'un coté, c'est un format d'image vectoriel. C'est à dire que, contrairement à une image bitmap (on dit aussi &quot;&lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/Image_matricielle&quot;&gt;matricielle&lt;/a&gt;&quot; ou parfois &quot;&lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/Rast%C3%A9risation&quot;&gt;rastérisée&lt;/a&gt;&quot;),&amp;nbsp; les images créées avec ce langage peuvent être agrandies et manipulées sans perte de qualité. &lt;/li&gt;
&lt;li&gt;D'un autre coté, elle sont définies à l'aide d'une syntaxe XML. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce dernier point a trois avantages : &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le code source des images reste théoriquement humainement lisible (mais ne rêvons pas trop tout de même, hein). &lt;/li&gt;
&lt;li&gt;Une image SVG peut être transformée en arbre DOM, ce qui permet de la manipuler facilement avec des langages tel que Javascript. &lt;/li&gt;
&lt;li&gt;Il est possible de rendre le contenu de ces images accessible sans recourir à des artifices de substitution ou de contenus alternatifs (par exemple, le texte reste compréhensible comme tel et peut donc être sérialisé pour un lecteur d'écran).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En tant que format d'image, SVG est très riche. En effet, il ne se contente pas de fournir un outillage complet de dessin mais offre également toutes une série de fonctionnalités permettant d'animer et transformer une image sans avoir besoin de recourir à des technologies tiers. Ceux d'entre vous qui ont connu Flash à l'époque où il s'agissait encore d'un simple système d'animation vont retrouver des concepts connus &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Comment l'utiliser&lt;/h2&gt;
&lt;h3&gt;Structure de base d'un document SVG&lt;/h3&gt;
&lt;p&gt;
SVG étant un document XML, il suit cette syntaxe :&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot;&lt;br /&gt;&amp;nbsp;&quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;svg width=&quot;100&quot; height=&quot;100&quot; version=&quot;1.1&quot;&lt;br /&gt;&amp;nbsp;xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;circle cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;40&quot; style=&quot;fill:#000&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;&lt;p&gt;&amp;gt; &lt;a href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/cercle.svg&quot;&gt;L'exemple du document SVG dans votre navigateur&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans cet exemple on retrouve donc le prologue XML, une déclaration de DTD, l'ouverture d'un balise racine (la balise &lt;code&gt;svg&lt;/code&gt;) qui contiendra l'ensemble des balises qui définiront votre image. Pour ceux d'entre vous qui ont l'habitude de HTML mais pas spécialement de XML, notez la présence de l'attribut &lt;code&gt;standalone&lt;/code&gt; avec la valeur &lt;code&gt;no&lt;/code&gt; dans le prologue XML. Pour faire simple, il permet de dire aux parseurs XML qui vont traiter le document qu'il peut y avoir autre chose que du SVG dans votre document. En effet, les documents SVG utilisent d'autres espace de nom (Xlink pour les liens vers des ressources externes) et peuvent facilement embarquer d'autres langages XML (MathML, XHTML, etc.) via la balise &lt;code&gt;foreignObject&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si vous avez l'habitude du HTML mais n'avez encore jamais manipulé de document XML, vous devez garder à l'esprit que la syntaxe d'un document XML est beaucoup plus rigoureuse : le respect de la casse est obligatoire, les balises doivent être impérativement fermées, etc. Ceci étant, si vous faites une erreur, vous le saurez vite. En effet, les parseurs XML ne sont pas connus pour leur permissivité, au contraire !&lt;/p&gt;
&lt;h3&gt;Embarquer un document SVG dans une page HTML&lt;/h3&gt;
&lt;p&gt;Certes, vous pouvez afficher un document SVG dans votre navigateur préféré (pour IE, il faudra attendre la version 9) mais là ou ça devient intéressant c'est quand on peut le mettre directement dans une page HTML (et le manipuler avec Javascript et le créer à la volée et vous voyez quoi...).&lt;/p&gt;
&lt;h4&gt;L'utilisation directe de balises SVG dans le code HTML&lt;/h4&gt;
&lt;p&gt;Cette méthode, c'est le graal en ce qui concerne l'utilisation de SVG. L'idée, c'est de pouvoir mettre n'importe où dans un document HTML une balise &lt;code&gt;svg&lt;/code&gt; qui contiendra d'autres balises du langage SVG. Autant dire que ça va simplifier grandement les choses.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vous ne rêvez pas car c'est ce que propose la norme HTML 5. Par contre, pas de bol, ce n'est implémenté dans aucun des navigateurs du marché pour l'instant... enfin presque. En effet, actuellement Firefox permet l'inclusion directe de SVG au sein d'un document XHTML. La nuance est importante car cela signifie que vos pages XHTML doivent êtres servies avec le bon type mime par le serveur et que le document sera analysé à l'aide d'un parseur XML et non pas HTML (en gros permissivité 0, au moindre truc de travers, la page ne sera pas affichée ou alors avec un gros message qui fait peur... vraiment !). &lt;/p&gt;
&lt;p&gt;Dans Firefox, ça donne ça :&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC&lt;br /&gt;&quot;-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN&quot;&lt;br /&gt;&quot;http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Exemple de tags SVG dans un document en XHTML&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;svg:svg xmlns:svg=&quot;http://www.w3.org/2000/svg&quot; width=&quot;100&quot; height=&quot;100&quot; version=&quot;1.1&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;svg:circle cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;50&quot; style=&quot;fill:#000&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/svg:svg&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/cercle.xhtml&quot;&gt;Voir l'exemple XHTML&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans le future Firefox 4 (prévus pour fin 2010, début 2011) ainsi que dans IE 9, il sera possible d'embarquer du SVG dans un document HTML 5 sans avoir à se préoccuper de la gestion des espaces de nom. Vous pouvez d'ailleurs déjà tester cette fonctionnalité dans &lt;a href=&quot;http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/&quot;&gt;les &quot;nightly build&quot; de Firefox 3.7/4&lt;/a&gt; ou avec la version de &lt;a hreflang=&quot;en&quot; href=&quot;http://ie.microsoft.com/testdrive/&quot;&gt;test du moteur de IE9&lt;/a&gt;. Cela permettra de réaliser ce type de document :&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Exemple de tags SVG dans un document en HTML 5&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;svg width=&quot;100&quot; height=&quot;100&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;circle cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;50&quot; style=&quot;fill:#000&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/cercle.html&quot;&gt;Voir l'exemple HTML&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;SVG c'est un format d'image, alors pourquoi pas la balise &lt;code&gt;img&lt;/code&gt; ?&lt;/h4&gt;
&lt;p&gt;Dans la mesure où SVG est un format d'image, on peut légitimement penser pouvoir utiliser la balise &lt;code&gt;img&lt;/code&gt; pour inclure ce type de document :&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;img src=&quot;http://jeremie.patonnier.net/post/2010/06/29/cercle.svg&quot; alt=&quot;&quot; /&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/index.html#exemple1&quot;&gt;Voir l'inclusion via &lt;code&gt;img&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Néanmoins, utiliser SVG de cette manière n'est pas trivial. Par exemple, il est possible d'embarquer des langages de scripts dans un document SVG. Or, qui dit langage de script, dit problème de sécurité et la balise &lt;code&gt;img&lt;/code&gt; n'a pas été conçue à la base pour traiter ce genre de question. De même, déterminer la taille par défaut en pixel d'une image vectorielle peut parfois être un peu délicat. Ceci dit, les constructeurs de navigateurs y travaillent dur :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Webkit supporte cette fonctionnalité &lt;a hreflang=&quot;fr&quot; href=&quot;http://support.apple.com/kb/TA25197?viewlocale=fr_FR&quot;&gt;depuis 2008 (Safari 3.1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Opera supporte cette fonctionnalité au moins depuis la version 9.64&lt;/li&gt;
&lt;li&gt;Pour Firefox, le sujet est &lt;a hreflang=&quot;en&quot; href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=276431&quot;&gt;en discussion depuis des années&lt;/a&gt; mais ça devrait être réglé dans Firefox 4. &lt;/li&gt;
&lt;li&gt;IE9 embarque cette fonctionnalité &lt;a hreflang=&quot;en&quot; href=&quot;http://blogs.msdn.com/ie/archive/2010/03/18/svg-in-ie9-roadmap.aspx&quot;&gt;dans sa roadmap&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Et avec CSS aussi pourquoi pas !&lt;/h4&gt;
&lt;p&gt;Le support de SVG comme une source d'image dans CSS ouvre des perspectives inimaginables jusqu'à présent. En particulier, comme SVG est un format vectoriel qui supporte parfaitement l'agrandissement et la réduction, cela permettra de créer des arrières plans extensibles sans perte de qualité. Ainsi, écrire quelque chose comme ça, ne posera plus aucun problème :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width : 50%;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background-image : url(cercle.svg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background-size : cover; /* Propriété CSS 3 qui permet de redimensionner l'image d'arrière plan à la taille de son conteneur */&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/post/2010/06/29/../../experiences/svg/introduction/index.html#exemple2&quot;&gt;Voir
l'inclusion via CSS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On peut même aller jusqu'à imaginer des arrières plans animés (attention à l'accessibilité quand même) en mixant SVG et la balise HTML 5 &lt;code&gt;video&lt;/code&gt;. Bref, en utilisant conjointement ces 3 technologies, on peut vraiment faire beaucoup de choses.&lt;/p&gt;
&lt;p&gt;La problématique d'implémentation est la même qu'avec la balise &lt;code&gt;img&lt;/code&gt;, et le
support navigateurs est le même.&lt;/p&gt;
&lt;h4&gt;L'utilisation de la balise &lt;code&gt;object&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;La balise &lt;code&gt;object&lt;/code&gt; est faite pour embarquer à peu près n'importe quoi dans une page Web. Historiquement, cette méthode est utilisée pour SVG car il est possible de faire appel à un plugin tiers pour afficher un document SVG. Cette nécessité disparaît avec les navigateurs qui supportent nativement ce format d'image. Vous pouvez néanmoins toujours utiliser cette façon d'embarquer du SVG. Le gros avantage de cette méthode, c'est que vous pouvez gérer très facilement l'alternative HTML à fournir en cas d'absence du support de SVG&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;object type=&quot;image/svg+xml&quot; data=&quot;http://jeremie.patonnier.net/post/2010/06/29/cercle.svg&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;img src=&quot;http://jeremie.patonnier.net/post/2010/06/29/cercle.png&quot; alt=&quot;Votre navigateur ne supporte pas le format SVG !&quot; /&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/index.html#exemple3&quot;&gt;Voir l'inclusion via &lt;code&gt;object&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Quand tout le reste a échoué, il reste les &lt;code&gt;iframe&lt;/code&gt; !&lt;/h4&gt;
&lt;p&gt;Si vous utilisez un navigateur qui comprend SVG mais qui ne comprend aucune des autres méthodes vues ci-avant (!!), vous avez toujours la possibilité d'utiliser une iframe... avec tous les problèmes inhérents à une gestion de frame. Franchement, si je vous parle de cette méthode ici, c'est par honnêteté intellectuelle, mais je vous encourage à considérer cette méthode comme la technique de &quot;la dernière chance&quot;.&lt;/p&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/index.html#exemple4&quot;&gt;Voir l'inclusion via &lt;code&gt;iframe&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Qu'est-ce qu'on peut faire avec ce langage ?&lt;/h2&gt;
&lt;p&gt;Maintenant que je vous ai montré comment utiliser SVG dans vos documents HTML, on peut se concentrer sur son utilité réelle &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Dessin&lt;/h3&gt;
&lt;p&gt;
SVG étant avant tout un format d'image vectoriel, vous pouvez donc dessiner des formes : Des formes simples comme des lignes (lignes droites avec &lt;code&gt;line&lt;/code&gt; ou lignes brisées avec
&lt;code&gt;polyline&lt;/code&gt;), des polyèdres (des rectangles ou carrés avec &lt;code&gt;rect&lt;/code&gt; ou des
polygones avec &lt;code&gt;polygon&lt;/code&gt;), des ellipses (des cercles avec &lt;code&gt;circle&lt;/code&gt; ou des ellipses arbitraires avec &lt;code&gt;ellipse&lt;/code&gt;) ou des formes totalement arbitraires avec la balises &lt;code&gt;path&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il est possible d'appliquer des styles CSS à ces formes (via la balise &lt;code&gt;style&lt;/code&gt;). SVG enrichie les propriétés issues de la norme CSS 2 avec des propriétés qui lui sont propre, en particulier pour gérer le style des lignes (propriétés &lt;code&gt;stroke-*&lt;/code&gt;) et du remplissage des formes (propriétés &lt;code&gt;fill-*&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;On peut également embarquer des images bitmap dans un document SVG (via la balise &lt;code&gt;image&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Enfin, tous ces éléments peuvent être groupés entre eux pour constituer des ensembles de formes cohérents (et donc plus facile à manipuler de manière globale) en utilisant la balise &lt;code&gt;g&lt;/code&gt; et vous pouvez les dupliquer et les réutiliser à l'infini avec la balise &lt;code&gt;use&lt;/code&gt;. &lt;/p&gt;
&lt;h3&gt;Filtres et transformation&lt;/h3&gt;
&lt;h4&gt;Transformations&lt;/h4&gt;
&lt;p&gt;Un des grands intérêts des formes vectorielles, c'est qu'il est possible d'y appliquer des transformations sans perte de qualité. En effet, un tracé vectoriel est défini par un certain nombre de points clés dans un espace de coordonnées (contrairement aux images bitmap qui définissent tous les points du tracé de manière exhaustive et absolue). Il est donc très facile de déplacer ces points dans cet espace de coordonnées via de &quot;simples&quot; transformations mathématiques.&lt;/p&gt;
&lt;p&gt;En SVG les transformations s'appliquent via l'attribut &lt;code&gt;transform&lt;/code&gt; utilisable par toutes les balises. On peut appliquer autant de propriétés de transformations que l'on veut à un tracé, il suffit de séparer chacune d'elles par une virgule ou un espace. Vous avez à disposition, soit des transformations simples : déplacements (propriété &lt;code&gt;tranlate&lt;/code&gt;), rotations (propriété &lt;code&gt;rotate&lt;/code&gt;), déformations (changement d'échelle avec &lt;code&gt;scale&lt;/code&gt; et inclinaison avec &lt;code&gt;skewX&lt;/code&gt; et &lt;code&gt;skewY&lt;/code&gt;) ; soit des transformation matricielles arbitraires (via la propriété &lt;code&gt;matrix&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Par exemple, si vous voulez créer un losange, dessinez un carré et appliquez lui une rotation de 45° et une déformation verticalle :&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &lt;br /&gt;&quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;svg width=&quot;100&quot; height=&quot;100&quot; version=&quot;1.1&quot;&lt;br /&gt; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;rect x=&quot;25&quot; y=&quot;25&quot; width=&quot;50&quot; height=&quot;50&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transform=&quot;translate(50 12.5) scale(1 0.5) rotate(45)&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/losange.svg&quot;&gt;Les transformations en action&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans l'exemple précédent, notez que &lt;em&gt;les transformation s'appliquent de la droite vers la gauche&lt;/em&gt; (d'abord la rotation, puis le changement d'échelle puis le déplacement). La transformation &lt;code&gt;translate&lt;/code&gt; supplémentaire permet de replacer le losange au centre de la zone de dessin. Je ne vous détaillerai pas ici la gestion du système de coordonnées dans SVG, c'est assez compliqué et nécessiterait un article à part entière. Souvenez vous juste que c'est un point auquel vous devrez porter beaucoup d'attention dès que vous allez vouloir jouer avec les transformations.&lt;/p&gt;
&lt;h4&gt;Filtres&lt;/h4&gt;
&lt;p&gt;Les filtres sont un mécanisme qui permet d'appliquer des effets spéciaux à tout ou partie d'un document SVG. En effet, dans le cadre d'un dessin vectoriel, les courbes et les formes ne font pas tout. Les filtres permettent de créer des effets de flou (&lt;code&gt;feGaussianBlur&lt;/code&gt;), de lumière (&lt;code&gt;feSpecularLighting&lt;/code&gt;, &lt;code&gt;feDiffuseLighting&lt;/code&gt;, etc.), de mélange d'image (&lt;code&gt;feBlend&lt;/code&gt;, &lt;code&gt;feComposite&lt;/code&gt;, etc.), d'application de texture (&lt;code&gt;feTurbulence&lt;/code&gt;), etc.&lt;/p&gt;
&lt;p&gt;Ces effets de bases peuvent êtres combinés au sein de la balise &lt;code&gt;filter&lt;/code&gt; et chaînés entre eux pour créer des filtres complexes. Une fois un filtre défini, il est appliqué à un élément grâce à l'attribut &lt;code&gt;filter&lt;/code&gt;. Oui, vous avez bien lu, il y a une balise &lt;em&gt;ET&lt;/em&gt; un attribut &lt;code&gt;filter&lt;/code&gt;. Plutôt qu'une explication fastidieuse, voici un exemple ou un simple cercle noir est mis en relief : &lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot;&lt;br /&gt;&amp;nbsp;&quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&amp;gt;&lt;br /&gt;&amp;lt;svg version=&quot;1.1&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns=&quot;http://www.w3.org/2000/svg&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; x=&quot;0px&quot; y=&quot;0px&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width=&quot;100&quot; height=&quot;100&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;defs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter id=&quot;MonFiltre&quot; filterUnits=&quot;userSpaceOnUse&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;200&quot; height=&quot;120&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- On floute l'objet source --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feGaussianBlur in=&quot;SourceAlpha&quot; stdDeviation=&quot;5&quot; result=&quot;flou&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- On décale le résultat du flou qu'on appellera &quot;Ombre&quot; --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feOffset in=&quot;flou&quot; dx=&quot;3&quot; dy=&quot;3&quot; result=&quot;Ombre&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- On crée une source de lumière spéculaire avec un point d'éclairage en haut à gauche --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feSpecularLighting in=&quot;flou&quot; surfaceScale=&quot;10&quot; specularConstant=&quot;.75&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; specularExponent=&quot;1&quot; lighting-color=&quot;#EFEFEF&quot;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result=&quot;speculaireSortie&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;fePointLight x=&quot;-5000&quot; y=&quot;-10000&quot; z=&quot;2000&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/feSpecularLighting&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- on applique la source de lumière à l'objet source --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feComposite in=&quot;speculaireSortie&quot; in2=&quot;SourceAlpha&quot; operator=&quot;in&quot; result=&quot;speculaireSortie&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- On mélange le résultat de la lumière sur l'objet source avec l'objet source lui même --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feComposite in=&quot;SourceGraphic&quot; in2=&quot;speculaireSortie&quot; operator=&quot;arithmetic&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k1=&quot;0&quot; k2=&quot;1&quot; k3=&quot;1&quot; k4=&quot;0&quot; result=&quot;SourceEclairee&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- On empile l'objet éclairé avec son ombre pour obtenir le résultat final --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feMerge&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- d'abord l'ombre... --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feMergeNode in=&quot;Ombre&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- ...puis l'objet éclairé par dessus --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feMergeNode in=&quot;SourceEclairee&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/feMerge&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/defs&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- le filtre est appliqué au cercle qui gagne une ombre et prend du volume --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;circle style=&quot;fill:#000&quot; filter=&quot;url(#MonFiltre)&quot; cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;40&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/filtre.svg&quot;&gt;Les filtres en action&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Animation, Scripting et gestion évènementielle&lt;/h3&gt;
&lt;p&gt;Dessiner, c'est bien. Rendre interactif, c'est mieux, surtout quand on parle de Web &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;SVG étant un format XML, il est possible de le manipuler via le DOM. L'accès au DOM se fait via un langage de scripting. Dans la plus part des cas, c'est le Javascript qui est utilisé (sa version normalisé ECMAScript pour être exact qui est le langage utilisé par défaut dans la norme SVG), mais rien n'empêche d'imaginer utiliser d'autres langages comme Pyton ou VBScript par exemple. En fait cela dépend du logiciel que vous utiliserez pour visionner votre document SVG or dans un navigateur, assez naturellement, on se tournera vers Javascript. L'ajout de script se fait comme en HTML via la balise &lt;code&gt;script&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;SVG se conforme à la norme DOM pour la gestion des évènements, mais comme pour les styles CSS, il l'enrichie de certains évènements qui lui son propre. Par exemple, &lt;code&gt;SVGZoom&lt;/code&gt; qui permet de savoir quand un changement de taille d'image à lieu ou &lt;code&gt;SVGScroll&lt;/code&gt; qui permet de savoir quand est-ce qu'une vue d'un document est déplacée au sein même de la zone d'affichage du document SVG.&lt;/p&gt;
&lt;p&gt;Enfin, dernier point important, il est possible d'animer des objets SVG de manière déclarative (sans utiliser de langage de script). Pour cela, SVG se repose sur un autre langage, le SMIL. Là encore, un bon exemple valant mieux qu'un long discours, voila un exemple où une flèche tourne en rond en suivant un tracé (oui, j'aurai pu faire un truc plus sexy, mais au moins ça reste compréhensible) :&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 20010904//EN&quot; &lt;br /&gt;&amp;nbsp;&quot;http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd&quot;&amp;gt;&lt;br /&gt;&amp;lt;svg width=&quot;200&quot; height=&quot;200&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns=&quot;http://www.w3.org/2000/svg&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;defs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- On définie le tracé du mouvement : un cercle mais sans utiliser la balise circle --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;path id=&quot;trace&quot; d=&quot;M100,50 a50,50 0 1,0 1,0 z&quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/defs&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- On dessine le contour du tracé de mouvement en réutilisant le tracé. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;use xlink:href=&quot;http://jeremie.patonnier.net/post/2010/06/29/Introduction-a-SVG#trace&quot; fill=&quot;none&quot; stroke=&quot;grey&quot; stroke-width=&quot;1px&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Voici un triangle qui se déplacera sur le tracé de mouvement. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;path d=&quot;m0,0 l0,6 l20,-6 l-20,-6 z&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fill=&quot;yellow&quot; stroke=&quot;red&quot; stroke-width=&quot;2px&quot;&amp;nbsp; &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Définition de l'animation sur le tracé de mouvement --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;animateMotion dur=&quot;6s&quot; rotate=&quot;auto&quot; repeatCount=&quot;indefinite&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mpath xlink:href=&quot;http://jeremie.patonnier.net/post/2010/06/29/Introduction-a-SVG#trace&quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/animateMotion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/path&amp;gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a href=&quot;http://jeremie.patonnier.net/experiences/svg/introduction/animation.svg&quot;&gt;Voir l'animation en action&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Des logiciels pour se simplifier la vie&lt;/h2&gt;
&lt;p&gt;Même s'il n'est pas très compliqué d'éditer un document SVG à la main, il vous faudra passer par des logiciels d'édition SVG  si vous voulez faire des choses vraiment sexy au niveau design. Les principaux logiciels de dessin vectoriel du marché permettent à minima de produire des dessins statiques au format SVG. Par contre il est assez difficile de trouver des logiciels permettant d'exploiter les fonctions avancées de SVG comme l'animation ou l'interactivité via des scripts (à mon avis, c'est sans doute le principal frein à un déploiement massif de SVG). D'ailleurs sur ce point, si on compare à Flash... il n'existe pas d'équivalent au Adobe Flash IDE pour travailler avec SVG.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.inkscape.org/?lang=fr&quot;&gt;Inkscape&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Il s'agit d'un éditeur de dessin vectoriel libre et gratuit. Le SVG produit est de bonne qualité, même s'il faut un peu se méfier des options d'enregistrement si on&amp;nbsp; veut éviter une soupe de tag un peu indigeste. Les filtres sont relativement bien supportés (l'éditeur de filtres est assez intuitif). Par contre, il ne gère pas (encore) les animations ni le scripting. Il a l'ambition de supporter l'intégralité de la norme SVG 1.1 pour la sortie de sa version 1 (mais on n'y est pas encore).&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.adobe.com/fr/products/illustrator/&quot;&gt;&lt;strong&gt;Adobe Illustrator&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Un des logiciels historique de Adobe. Sa qualité en temps qu'éditeur vectoriel n'est plus à faire. L'exportation en SVG est d'excellente qualité. Les filtres sont parfaitement supportés mais leur édition est franchement mauvaise (édition en mode texte). Cela tiens au fait que Illustrator n'utilise pas SVG comme format natif et qu'il ne fait que de l'import/export à ce format. Ainsi, si vous utilisez certaines fonctionnalités ou filtres spécifiques à Illustrator, vous risquez d'avoir quelques surprises. Prenez le temps d'expérimenter. Il ne gère ni le scripting ni les animations.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://aviary.com/tools/vector-editor&quot;&gt;&lt;strong&gt;Aviary.com (Raven)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;La suite d'outils en ligne du site aviary.com propose un éditeur vectoriel appelé Raven. Cette éditeur exclusivement en ligne est assez frustre et ne permet que de faire du dessin. Il ne supporte ni les filtres, ni le scripting, ni les animations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/Amaya/&quot;&gt;Amaya&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Il s'agit de l'éditeur/navigateur développé par le W3C et l'INRIA. Il supporte la plupart des langages normalisés par le W3C, dont le SVG. Bien que son ergonomie soit douteuse à mon sens, c'est un des très rare (si ce n'est le seul) éditeur SVG qui gère les animations déclaratives.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il existe également un certains nombre de bibliothèques Javascript qui offrent un haut degré d'abstraction, comme par exemple &lt;a hreflang=&quot;en&quot; href=&quot;http://raphaeljs.com/&quot;&gt;RaphaelJS&lt;/a&gt; ou &lt;a hreflang=&quot;en&quot; href=&quot;http://code.google.com/p/svgweb/&quot;&gt;SVGWeb&lt;/a&gt;, pour créer et manipuler un documents SVG plus facilement qu'en utilisant directement les fonctions DOM. Elles permettent souvent de contourner les limites des différents navigateurs (en simulant le support de SVG dans IE ou en rajoutant le support des animations dans Firefox 3.6 par exemple).&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Voila pour un petit tour d'horizon rapide de cette technologie. Le couple SVG / HTML5 offre des opportunités graphiques sans précédent dans le web standard. Comme toutes les technologies web, SVG n'est pas très compliqué au premier abord mais regorge de subtilités dès qu'on se met à creuser. Prenez le temps de vous familiariser avec, vous ne devriez pas le regretter &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;En savoir plus&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;Pour vous rendre vraiment compte de ce qu'il est possible de faire avec ce langage, allez faire un tour sur &lt;a hreflang=&quot;en&quot; href=&quot;http://svg-wow.org/&quot;&gt;SVG Wow!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mozilla et Opera ont des articles et des démos assez bien détaillés :&lt;ul&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://hacks.mozilla.org/category/svg&quot;&gt;http://hacks.mozilla.org/category/svg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://dev.opera.com/articles/svg&quot;&gt;http://dev.opera.com/articles/svg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/People/Schepers/&quot;&gt;Doug Shepers&lt;/a&gt; du W3C SVG WG a réalisé un site d'introduction à SVG qui permet de bien démarrer avec ce langage (même si ça date un peu maintenant) : &lt;a hreflang=&quot;en&quot; href=&quot;http://svg-whiz.com/&quot;&gt;http://svg-whiz.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pour savoir exactement quelle fonctionnalité est supportée par quel navigateur, Jeff Schiller maintient une grille exhaustive : &lt;a hreflang=&quot;en&quot; href=&quot;http://www.codedread.com/svg-support.php&quot;&gt;http://www.codedread.com/svg-support.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Enfin, rien ne vaut un plongeon dans la norme pour s'auto-former (elle comporte de nombreux exemple très compréhensibles) :
&lt;ul&gt;&lt;li&gt;En anglais : &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/SVG/&quot;&gt;http://www.w3.org/TR/SVG/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;En français : &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.yoyodesign.org/doc/w3c/svg1/&quot;&gt;http://www.yoyodesign.org/doc/w3c/svg1/&lt;/a&gt; (pas tout à fait à jour, mais ça aide)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>

    

      </item>
  
</channel>
</rss>
