un cercle : un centre et un rayon
Pendant longtemps, pas de standard. Raisons commerciales
Les formats sont plus ou moins développés :
<object data="fichier.svg" type="image/svg+xml" width="200" height="200"/>ou simplement :
<img src="fichier.svg" alt=""/>
Dans le code HTML :
(transposables à la plupart des formats vectoriels)
<line>, <rect>, <circle>... <path>
<line x1="10" y1="10" x2="200" y2="10"/>
Une forme peut être remplie :
ou dessinée : voire même remplie et dessinée :style
des balises. la propriété fill
indique le remplissage. Elle peut valoir :
Les propriétés définissant le contour :
<svg xmlns="http://www.w3.org/2000/svg" style="fill: none; stroke: red; stroke-width: 10px;"> <path d="M10,10 L100,10 L100,100 L10,100 Z"/> </svg>
<path d="M100,100 C120,20 170,210 200,100"/>
La balise <g> permet de créer un groupe. Les groupes permettent de partager des styles, et de déplacer plusieurs éléments en leur associant une transformation.
<svg xmlns="http://www.w3.org/2000/svg"> <g style="fill: red;" transform="translate(30, 30)"> <circle cx="10" cy="10" r="10"/> <circle cx="30" cy="10" r="10"/> </g> <g style="fill: green;" transform="translate(100,60), rotate(30)"> <circle cx="10" cy="10" r="10"/> <circle cx="30" cy="10" r="10"/> </g> </svg>
Le groupe vert est tourné de 30°, puis translaté en 100, 60.
Rappel : quand un événement se produit
(onclick, etc...) sur un élément HTML, on
peut le passer au script qui le traite en nommant la
variable event
.
mais... quand un événement se produit sur
un élément SVG, la variable à utiliser
est evt
Exemple : un mouvement sur le grand cercle déclenchera l'affichage des coordonnées ; un clic sur ce même cercle fera passer le second cercle en bleu.
<svg xmlns="http://www.w3.org/2000/svg"> <circle cx="40" cy="40" r="40" onmousemove="montrerEvenement(evt)" onclick="mettreEnBleu(evt)"/> <circle id="cercle2" cx="100" cy="40" r="10"/> <text x="10" y="100" id="t1">un texte</text> </svg> <script> function mettreEnBleu(e) { document.getElementById('cercle2').setAttributeNS(null, "fill", "blue"); } function montrerEvenement(e) { t=document.getElementById('t1'); // innerHTML ne fonctionne pas ici t.removeChild(t.firstChild); var evInfo = "click : "+ e.clientX+","+e.clientY; t.appendChild(document.createTextNode("événement"+ e+ " " + evInfo)); } </script>
var svgNS= ="http://www.w3.org/2000/svg"; // Création d'une zone svg... var svgElement= document.createElementNS(svgNS, "svg"); // Création d'un cercle dans la zone : var cercle= document.createElementNS(svgNS, "cercle"); // pas de namespace sur les attributs... cercle.setAttributeNS(null, "cx", 10); cercle.setAttributeNS(null, "cy", 10); cercle.setAttributeNS(null, "r", 10);
Svg permet aussi des animations fluides sans utiliser javascript (ne fonctionne pas partout). On trouvera des exemples sur http://www.w3schools.com/svg/svg_examples.asp