Je joue avec SVG et j'ai quelques problèmes de positionnement. J'ai une série de formes qui sont contenues dans la balise de groupe g
. J'espérais l'utiliser comme un conteneur afin de pouvoir définir sa position x et ensuite tous les éléments de ce groupe se déplaceraient également. Mais cela ne semble pas être possible.
Tout dans l'élément g est positionné par rapport à la matrice de transformation actuelle.
Pour déplacer le contenu, il suffit de mettre la transformation dans l'élément g:
<g transform="translate(20,2.5) rotate(10)">
<rect x="0" y="0" width="60" height="10"/>
</g>
Liens: Exemple de la spécification SVG 1.1
Il existe une alternative plus courte à la réponse précédente. Les éléments SVG peuvent également être regroupés en imbriquant des éléments svg:
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<svg x="10">
<rect x="10" y="10" height="100" width="100" style="stroke:#ff0000;fill: #0000ff"/>
</svg>
<svg x="200">
<rect x="10" y="10" height="100" width="100" style="stroke:#009900;fill: #00cc00"/>
</svg>
</svg>
Les deux rectangles sont identiques (à l'exception des couleurs), mais les éléments parent svg ont des valeurs x différentes.
Comme mentionné dans l'autre commentaire, l'attribut transform
de l'élément g
correspond à vos souhaits. Utilisez transform="translate(x,y)"
pour déplacer la g
et les éléments contenus dans la g
se déplaceront par rapport à la g
.
Il existe deux manières de regrouper plusieurs formes SVG et de positionner le groupe:
Le premier à utiliser <g>
avec l'attribut transform
comme l'a écrit Aaron. Mais vous ne pouvez pas simplement utiliser un attribut x
sur l'élément <g>
.
L'autre façon consiste à utiliser l'élément imbriqué <svg>
.
<svg id="parent">
<svg id="group1" x="10">
<!-- some shapes -->
</svg>
</svg>
De cette manière, le groupe # group1 svg est imbriqué dans #parent et le x=10
est relatif au groupe parent svg. Cependant, vous ne pouvez pas utiliser l'attribut transform
sur l'élément <svg>
, contrairement à l'élément <g>
.