【问题标题】:Set X and Y value for g element of SVG为 SVG 的 g 元素设置 X 和 Y 值
【发布时间】:2018-11-08 19:33:55
【问题描述】:

我在 SVG 使用 HTML5 绘图方面相对较新。

我想做的是用g element在SVG中创建一组元素,这样g元素内的所有元素都可以像一个组一样工作,并且所有元素的基础 xy值可以从上g元素接收。

所以,我所做的就是这样-

<svg width="500" height="300" xmlns="http://www.w3.org/2000/svg">
  <g x="1000" y="1000">
    <title>SVG Title Demo example</title>
    <rect width="200" height="50"
    style="fill:wheat; stroke:blue; stroke-width:1px"/>
    <text style="text-anchor: middle;" class="small">My Text</text>
  </g>
</svg>

我期望的是 g 元素内的所有元素都会得到 x="1000"y="1000" 所以我的预期输出是这样的-

但我得到了这个-

重新-

我不喜欢在text 元素中设置 x 和 y 元素。如果需要,我只想将相对 x 和 y 设置为 text 元素,但这应该是相对于 g 元素的。

谁能帮助我在 SVG 中实现我的目标需要做些什么?

【问题讨论】:

标签: javascript css html svg


【解决方案1】:

&lt;g&gt; 元素不支持 x 或 y 属性。不过,您可以使用转换。

我已将值从 1000 减少到 100,否则输出在外部 &lt;svg&gt; 元素的 500 x 300 画布之外。

我在文本元素上提供了额外的 x 和 y 属性,因此它的位置与您的示例一样。如果需要,您可以将文本本身放入 &lt;g&gt; 元素或 &lt;svg&gt; 元素中。

<svg width="500" height="300" xmlns="http://www.w3.org/2000/svg">
  <g transform="translate(100, 100)">
    <title>SVG Title Demo example</title>
    <rect width="200" height="50"
    style="fill:wheat; stroke:blue; stroke-width:1px"/>
    <text x="100" y="30" style="text-anchor: middle;" class="small">My Text</text>
  </g>
</svg>

或使用额外的 &lt;g&gt; 元素来避免文本本身出现 x 和 y。

<svg width="500" height="300" xmlns="http://www.w3.org/2000/svg">
  <g transform="translate(100, 100)">
    <title>SVG Title Demo example</title>
    <rect width="200" height="50"
    style="fill:wheat; stroke:blue; stroke-width:1px"/>
    <g transform="translate(100, 30)">
        <text style="text-anchor: middle;" class="small">My Text</text>
    </g>
  </g>
</svg>

或者,您可以使用内部 &lt;svg&gt; 元素而不是 &lt;g&gt; 元素,因为它支持 x 和 y 属性

<svg width="500" height="300" xmlns="http://www.w3.org/2000/svg">
  <svg x="100" y="100">
    <title>SVG Title Demo example</title>
    <rect width="200" height="50"
    style="fill:wheat; stroke:blue; stroke-width:1px"/>
    <text x="100" y="30" style="text-anchor: middle;" class="small">My Text</text>
  </svg>
</svg>

【讨论】:

  • 您能否为每一项添加一些相对优点和注意事项?什么时候适合嵌套 svgs?是否存在性能缺陷?使用 transform 与原生 x 和 y 属性怎么样?
  • 我不会使用它们,而是在文本元素上设置 x 和 y 属性。出于某种深不可测的原因,OP不想以简单的方式做事。性能因浏览器、平台和显卡而异。
  • 我有一个相当复杂的设置,其中有一个嵌套选择。想象一个包含行和行内单元格的表格。有时我想重新排序行,并且我想更改行元素上的 y 坐标。我的行是&lt;g&gt;,但现在它是&lt;svg&gt;,行为有效,但并不漂亮。鉴于我的数据结构,单独更新每个元素上的 y 坐标会非常棘手,如果我能在行上这样做会很好......
  • 您可能应该作为一个单独的问题,尽管您必须清楚地定义“不漂亮”的含义。也许我的答案之一是给你的,试试看吧。
  • @AlexLenail 我倾向于建议使用嵌套的&lt;svg&gt; 元素更符合 SVG 的精神:您正在有效地嵌套图像,并且您正在创建一个类似于 OP 想要的结构使用&lt;g&gt; 元素。至于简单的做事,我个人认为单独应用绝对定位属性并不是简单的做事。
猜你喜欢
  • 2013-09-12
  • 2013-01-09
  • 2015-10-19
  • 2016-11-20
  • 1970-01-01
  • 2012-07-25
  • 2021-03-21
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多