转换不适用于嵌入式 SVG Chrome

Posted

技术标签:

【中文标题】转换不适用于嵌入式 SVG Chrome【英文标题】:Transform is not applied on Embedded SVGs Chrome 【发布时间】:2020-12-30 23:33:51 【问题描述】:

我是使用 SVG 的新手,但一切都很好,直到我在 chrome 上尝试了我的代码并发现它不能正常工作,所有的转换属性都被忽略了。 Firefox 按预期完成。

我的问题是,当我将它分配给嵌入式 SVG(SVG 内的 SVG)时,transform 属性不起作用。 Firefox 不会出现此问题。

这是一个示例代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="style.css" type="text/css" />

    <title>Document</title>
  </head>
  <body>
    <svg
      viewBox="0 0 300 100"
      xmlns="http://www.w3.org/2000/svg"
      stroke="red"
      fill="grey"
    >
      <circle cx="50" cy="50" r="40" />
      <circle cx="150" cy="50" r="4" />

      <svg transform="translate(0,50)" viewBox="0 0 10 10" x="200" >
        <circle cx="5" cy="5" r="4" />
      </svg>
    </svg>
  </body>
</html>

您会注意到,当这段代码在 Firefox 中运行时,带有粗红色边框的圆圈会向下移动一点,但当代码在 chrome 中运行时,它会保持原位。

为什么会发生这种情况以及如何解决?

非常感谢!

【问题讨论】:

尝试删除翻译中的逗号。当涉及到 transform 属性时,SVG 的语法与 CSS 略有不同。它们都有效,所以我会说这很愚蠢,但就是这样。 @somethinghere 感谢您的回复,非常感谢您的帮助,但问题仍然存在。它仅适用于火狐。 :( 下面的答案解释了这种情况。你正在尝试一些非常新颖的东西,所以还没有支持。 【参考方案1】:

&lt;svg&gt; 元素上的transform 属性是随 SVG 2 规范添加的功能。它的实现还是有点不平衡。

只需设置属性y="50" 即可达到相同的效果,或者,如果由于某种原因您无法这样做,请将&lt;svg&gt; 元素包装在&lt;g&gt; 中并在那里应用转换。

【讨论】:

非常感谢您的回复。你帮了我很多!非常感谢!

以上是关于转换不适用于嵌入式 SVG Chrome的主要内容,如果未能解决你的问题,请参考以下文章

离子 - 嵌入式视频不适用于 ios

Embedded Jetty HTTP/2 不适用于 Firefox/Chrome,但在 Safari 上似乎没问题

AutoMapper,反向映射不适用于嵌入式对象?

SVG CSS过渡不适用于`use`元素(Chrome)

swfobject 不适用于 Chrome 中的 https

SVG 未在 Opera 和 Firefox 中显示,但在 Chrome 中显示