SVG相对于父<g>的位置文本

Cha*_*ynn 17 svg

我需要相对于父母放置文本<g>.

目前,我有一个路径和一个文本元素包装在一个<g>.但是所有文本坐标都是相对于最外层的<g>.

<svg width="1000" height="550">
    <g transform="translate(500,275)" stroke-width="2" stroke="black">
        <g>
            <path d="M1.6838893488276108e-14,-275A275,275 0 0,1 238.15698604072065,137.49999999999994L0,0Z" id="path_0" style="fill: rgb(17, 17, 17);"></path>
            <text transform="translate(100, 100)" class="tooltipText" stroke-width="0" fill="white" style="text-anchor: middle;">text</text>
        </g>
        <g>
            <path d="M238.15698604072065,137.49999999999994A275,275 0 0,1 -238.1569860407206,137.50000000000009L0,0Z" id="path_1" style="fill: rgb(34, 34, 34);"></path>
            <text transform="translate(100, 100)" class="tooltipText" stroke-width="0" fill="white" style="text-anchor: middle;">text</text>
        </g>
        <g>
            <path d="M-238.1569860407206,137.50000000000009A275,275 0 0,1 -5.051668046482832e-14,-275L0,0Z" id="path_2" style="fill: rgb(51, 51, 51);"></path>
            <text transform="translate(100, 100)" class="tooltipText" stroke-width="0" fill="white" style="text-anchor: middle;">text</text>
        </g>
    </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

squ*_*age 25

很难看出你遇到麻烦的哪一部分,但我会尽我所能解释.

您的SVG图片宽1000像素,高550像素:

<svg width="1000" height="550">
Run Code Online (Sandbox Code Playgroud)

此SVG内的顶级节点是一个<g>节点,它将坐标系的原点从左上角移动到(500,275)(即绘图区域的中间;在SVG中,Y坐标从上到下增加)

<g transform="translate(500,275)" ... >
Run Code Online (Sandbox Code Playgroud)

因此,此顶级节点的所有子节点都将使用此变换的坐标系.您已添加其他<g>节点作为此顶级节点的子节点,但它们在此实例中并未真正执行任何操作,因为它们不包含任何属性:

<g>
Run Code Online (Sandbox Code Playgroud)

因此,<path>节点仍将使用由顶级设置的相同变换坐标系<g>.这些都产生圆形扇区,顶点为(0,0).并且因为(0,0)对应于此变换坐标系中绘图区域的中间,所以它们最终会到达:

<path d="M0-275A275 275 0 0 1 238 137.5L0 0Z" style="fill: rgb(17, 17, 17);"></path>
<path d="M238 137.5A275 275 0 0 1-238 137.5L0 0Z" style="fill: rgb(34, 34, 34);"></path>
<path d="M-238 137.5A275 275 0 0 1 0-275L0 0Z" style="fill: rgb(51, 51, 51);"></path>
Run Code Online (Sandbox Code Playgroud)

您的<text>节点也在此坐标系中绘制,但偏移(100,100),因为您添加了一个transform属性,将它们向下移动100个像素,向右移动100个像素:

<text transform="translate(100, 100)" ... >text</text>
Run Code Online (Sandbox Code Playgroud)

因此,最终结果是所有三个文本节点都是在相对于绘图区域左上角的坐标(600,375)处绘制的.如果您希望文本显示在其他位置,您将指定不同的偏移量.例如:

<text transform="translate(120,-80)" ... >text</text>
<text transform="translate(0,160)" ... >text</text>
<text transform="translate(-120,-80)" ... >text</text>
Run Code Online (Sandbox Code Playgroud)

<svg width="1000" height="550">
  <g transform="translate(500,275)" stroke-width="2" stroke="black">
    <g>
      <path d="M0-275A275 275 0 0 1 238 137.5L0 0Z" style="fill: rgb(17, 17, 17);"></path>
      <text transform="translate(120,-80)" class="tooltipText" stroke-width="0" fill="white" style="text-anchor: middle;">text</text>
    </g>
    <g>
      <path d="M238 137.5A275 275 0 0 1-238 137.5L0 0Z" style="fill: rgb(34, 34, 34);"></path>
      <text transform="translate(0,160)" class="tooltipText" stroke-width="0" fill="white" style="text-anchor: middle;">text</text>
    </g>
    <g>
      <path d="M-238 137.5A275 275 0 0 1 0-275L0 0Z" style="fill: rgb(51, 51, 51);"></path>
      <text transform="translate(-120,-80)" class="tooltipText" stroke-width="0" fill="white" style="text-anchor: middle;">text</text>
    </g>
  </g>
</svg>
Run Code Online (Sandbox Code Playgroud)