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