turismo - Posicionamiento SVG
usa (4)
Estoy jugando con SVG y tengo algunos problemas con el posicionamiento. Tengo una serie de formas que están contenidas en la etiqueta del grupo g
. Tenía la esperanza de usarlo como un contenedor, así que podría establecer su posición x y luego todos los elementos en ese grupo también se moverían. Pero eso no parece ser posible.
- ¿Cómo va la mayoría de las personas a posicionar un grupo de elementos que desea mover en tándem?
- ¿Hay algún concepto de posicionamiento relativo? por ejemplo, en relación con su padre
Como se menciona en el otro comentario, el atributo transform
en el elemento g
es lo que desea. Usa transform="translate(x,y)"
para mover g
y las cosas dentro de g
se moverán en relación con g
.
Hay dos formas de agrupar varias formas de SVG y posicionar el grupo:
El primero en usar <g>
con el atributo de transform
como Aaron escribió. Pero no puedes usar un atributo x
en el elemento <g>
.
La otra forma es usar el elemento <svg>
anidado.
<svg id="parent">
<svg id="group1" x="10">
<!-- some shapes -->
</svg>
</svg>
De esta forma, el # group1 svg está anidado en #parent, y el x=10
es relativo al svg principal. Sin embargo, no puede usar el atributo de transform
en el elemento <svg>
, que es todo lo contrario del elemento <g>
.
Hay una alternativa más corta a la respuesta anterior. Los elementos SVG también se pueden agrupar por elementos svg de anidamiento:
<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>
Los dos rectángulos son idénticos (aparte de los colores), pero los elementos svg principales tienen valores de x diferentes.
Todo en el elemento g se posiciona con relación a la matriz de transformación actual.
Para mover el contenido, simplemente ponga la transformación en el elemento g:
<g transform="translate(20,2.5) rotate(10)">
<rect x="0" y="0" width="60" height="10"/>
</g>
Enlaces: Example de la especificación SVG 1.1