SVG定位

Chr*_*mbo 182 grouping svg position

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

  1. 大多数人如何定位一组你希望同时移动的元素?
  2. 有相对定位的概念吗?例如,相对于其父母

Aar*_*lla 256

g元素中的所有内容都相对于当前变换矩阵定位.

要移动内容,只需将转换放在g元素中:

<g transform="translate(20,2.5) rotate(10)">
    <rect x="0" y="0" width="60" height="10"/>
</g>
Run Code Online (Sandbox Code Playgroud)

链接:实施例该SVG 1.1规范


Kağ*_*yal 60

有一个较短的替代前一个答案.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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对,SVG元素也可以是分组元素.我想指出SVG元素默认实现剪切(至少目前在Chrome中).这意味着任何溢出都不可见.与"g"元素不同.只要设置overflow ="visible"就可以恢复营业,如果这让你感到害怕. (32认同)
  • 使用svg代替g有什么缺点吗? (9认同)

cod*_*ead 31

正如其他注释中所提到的,元素的transform属性g就是你想要的.使用transform="translate(x,y)"移动g内部和周围的事物g会相对于移动g.


fen*_*huo 18

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

第一个<g>transform属性一起使用的Aaron写道.但是你不能只x<g>元素上使用一个属性.

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

<svg id="parent">
   <svg id="group1" x="10">
      <!-- some shapes -->
   </svg>
</svg>
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么<g>没有ax和y属性,而所有其他svg标签都有?这意味着位置在<svg>中始终是绝对的......没有相对位置, (12认同)
  • @ user1952009:有机会 - 只是一个机会 - 你实际上并不了解进入SVG的设计选择. (8认同)
  • &lt;g&gt; 用于分组。它本身不代表任何形状,因此它的位置或大小没有意义。不过,拥有一个 *transform* 属性是有意义的,您可以将其读作“将此变换应用于整个组”。 (4认同)
  • 开源委员会就是这样。 (2认同)