基本 SVG - 如何嵌套元素?

Posted

技术标签:

【中文标题】基本 SVG - 如何嵌套元素?【英文标题】:Basic SVG - How to nest elements? 【发布时间】:2019-06-01 14:33:05 【问题描述】:

我真的对 SVG 一无所知,但我需要将它用于我正在构建的应用程序。因此,非常感谢您对入门的帮助。

我想在 SVG 形状内嵌套一个 div,我想它会像这样工作:

<svg   viewBox="0 0 250 250">
  <rect x="0" y="0"   fill="red">
    <foreignObject  >
      <div>TEST</div>
    </foreignObject>
  </rect>
</svg>

但如您所见,它只呈现rect 元素。

即使我尝试只使用text,它仍然不会出现,如您所见:

<svg   viewBox="0 0 250 250">
  <rect x="0" y="0"   fill="red">
    <text x="50%" y="50%">TEST 2</text>
  </rect>
</svg>

那么我在这里做错了什么?为什么 SVG 元素嵌套在其他 SVG 元素中时不出现?我怎样才能让他们这样做?

谢谢

【问题讨论】:

那么这并不能真正解决嵌套问题,因为矩形会自动关闭并且无法嵌套子级,对吧? 【参考方案1】:

SVG 只允许specific elements to be containers。一些最常见的通常使用&lt;g&gt; 元素和&lt;svg&gt; 元素。其他容器用于特定目的。

所有 SVG 元素基本上都是绝对定位的,SVG 中没有reflow 的概念,因此您可以将事物作为兄弟姐妹放置并放置在您想要的任何位置。您根本不需要像在 html 中那样嵌套东西。

【讨论】:

感谢您的信息。那么你会如何推荐定位兄弟元素,以便一个总是在另一个元素之内呢?因为最终我要拖动容器元素,我希望内容也随之拖动 你必须在拖拽代码中实现一些特定的逻辑,以防止应该留在较大元素内的元素被重新定位,使其出现在外面。 我明白了。感谢您的帮助 @RobertLongson 是否可以向您发送一封关于潜在咨询工作的快速电子邮件?在您的网站上找不到联系信息。当你看到这个时请注意,这样评论可以被删除而不会使页面混乱。非常感谢您过去提供的所有帮助以及对 SVG 的贡献。

以上是关于基本 SVG - 如何嵌套元素?的主要内容,如果未能解决你的问题,请参考以下文章

SVG中嵌套类的CSS选择器

扁平化 SVG 嵌套转换的工具 [关闭]

非常大的嵌套数组 ngFor SVG 渲染性能问题,架构问题

尝试将 :focus 样式应用于样式化组件内的嵌套 SVG

如何连接相对路径或生成嵌套文件夹中包含的唯一标识符 svg?

为啥这个嵌套的 SVG 在 Firefox 中不起作用?