SVGポジショニング


203

私はSVGで遊んでいて、ポジショニングにいくつか問題があります。gグループタグに含まれる一連の図形があります。コンテナーのように使用したいと思っていたので、x位置を設定すると、そのグループのすべての要素も移動します。しかし、それは可能ではないようです。

  1. ほとんどの人は、一緒に移動したい要素のグループをどのように配置しようとしていますか?
  2. 相対配置の概念はありますか?例:親を基準

回答:


276

g要素のすべては、現在の変換行列を基準にして配置されます。

コンテンツを移動するには、変換をg要素に配置するだけです。

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

リンク:からSVG 1.1仕様


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>

2つの長方形は(色は別として)同一ですが、親の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

14
gの代わりにsvgを使用することの欠点はありますか?
grabantot 2017年

34

他のコメントで述べたようtransformに、g要素の属性は必要なものです。を使用transform="translate(x,y)"してg周りを移動し、内の物gがに関連して移動しgます。


22

複数のSVGシェイプをグループ化してグループを配置するには、2つの方法があります。

アーロンが書いたように<g>transform属性で最初に使用します。ただしx<g>要素で属性を使用することはできません。

もう1つの方法は、ネストされた<svg>要素を使用することです。

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

このように、#group1 svgは#parentにネストされ、x=10は親svgを基準にしています。ただし、要素にtransform属性を使用することはできません。<svg>これは、<g>要素とはまったく逆です。


13
なぜ<g>にはaxとy属性がないのに、他のすべてのsvgタグにはあるのですか?それは、その位置は常に<SVG> ...ない相対位置の絶対的であることを意味する
reuns

2
オープンソース委員会はそのようなものです。
Muhammad Umer

同意する...それは悪いデザインの選択のようです。グループのX変換を単純にインクリメントするには、潜在的に複雑な文字列を記述し、他の場所にすべての変数を保存する必要があります
Eyelash

9
@ user1952009:SVGに組み込まれた設計の選択を実際に理解していない可能性があります。
ポールD.ウェイト2017

3
<g>はグループ化用です。それ自体で形状を表すものではないため、場所やサイズを指定しても意味がありません。ただし、「この変換をグループ全体に適用する」のように読み取ることができる変換属性を持つことは理にかなっています。
AlQafir
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.