SVG定位


203

我正在使用SVG,并且在定位方面遇到一些问题。我有一系列包含在g组标记中的形状。我希望像容器一样使用它,因此可以设置它的x位置,然后该组中的所有元素也将移动。但这似乎是不可能的。

  1. 大多数人如何定位您希望一并移动的一组元素?
  2. 有相对定位的概念吗?例如相对于其父级

Answers:



73

有一个比先前答案更短的选择。SVG元素也可以通过嵌套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>

这两个矩形是相同的(除了颜色),但是父svg元素具有不同的x值。

参见http://tutorials.jenkov.com/svg/svg-element.html


33
正确,SVG元素也可以是分组元素。我想指出的是,SVG元素默认情况下会实现裁剪(至少在Chrome中是这样)。这意味着任何溢出都不可见。与“ g”元素不同。只需将overflow =“ visible”设置为正常,就可以了。
bladnman 2013年

1
如果您要用百分比转换一组元素,这将非常有用:stackoverflow.com/a/17103928/470117
mems 2014年

14
使用svg代替g是否有任何缺点?
抓斗者

34

如另一条评论中所述transformg元素上的属性就是您想要的。使用transform="translate(x,y)"来回移动,遗嘱中的g事物g会相对于g


22

有两种方法可以将多个SVG形状分组并定位组:

正如Aaron所写,第一个<g>transform属性一起使用。但是您不能只x<g>元素上使用属性。

另一种方法是使用嵌套<svg>元素。

<svg id="parent">
   <svg id="group1" x="10">
      <!-- some shapes -->
   </svg>
</svg>

这样,#group1 svg嵌套在#parent中,并且x=10相对于父svg。但是,您不能transform<svg>element 上使用属性,这与<g>element 完全相反。


13
为什么<g>在所有其他svg标签都具有ax和y属性时却没有?这意味着该位置在<svg>中始终是绝对的......无相对位置,
重新启用

2
开源委员会就是这样。
穆罕默德·乌默尔

我同意...这似乎是一个错误的设计选择。仅增加组的X变换就需要编写一个可能复杂的字符串并将所有变量存储在其他位置
Eyelash

9
@ user1952009:有机会-只是机会-您实际上不了解SVG的设计选择。
Paul D. Waite

3
<g>用于分组。它本身不代表任何形状,因此具有位置或大小没有任何意义。但是,拥有一个transform属性是有意义的,您可以像“将此变换应用于整个组”那样阅读。
AlQafir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.