SVG - 如何使矩形居中?

fee*_*lay 3 svg transform center

我有一个带有两个矩形的简单 SVG。我希望“内部”矩形正好位于 SVG 的中间。通过设置xy属性以50%左上角为中心。相反,我想将矩形的中间居中。我试过设置transform-origin为,center但它不起作用。

<svg width="100" height="100">
   <rect width="100%" height="100%" fill="gold" />
  
  
   <rect width="30" height="30" x="50%" y="50%" fill="green" />
</svg> 
Run Code Online (Sandbox Code Playgroud)

如何在不手动指定 x 和 y 属性的情况下实现此类功能?

enx*_*eta 7

代码说明:矩形的xy坐标表示左上角的位置。所以如果你给你的矩形,x="50" y="50"这会将矩形的左上角放在 SVG 画布的中间。要将矩形居中,您需要将其偏移一半宽度或高度:50 - (30/2) = 35。解决方案是<rect width="30" height="30" x="35" y="35" fill="green" />

<svg width="100" height="100" viewBox="0 0 100 100">
   <rect width="100%" height="100%" fill="gold" />
   <rect width="30" height="30" x="35" y="35" fill="green" />
</svg>
Run Code Online (Sandbox Code Playgroud)

更新:

op评论道:

我实际上更愿意为 x 和 y 设置 50% 而不是做一些数学运算

在这种情况下,您可能需要翻译您的 rect,但您仍然需要一些数学运算才能知道要翻译多少:

<svg width="100" height="100" viewBox="0 0 100 100">
   <rect width="100%" height="100%" fill="gold" />
   <rect width="30" height="30" x="50%" y="50%" transform="translate(-15,-15)" fill="green" />
</svg>
Run Code Online (Sandbox Code Playgroud)

<svg width="100" height="100" viewBox="0 0 100 100">
   <rect width="100%" height="100%" fill="gold" />
   <rect width="30" height="30" x="-15" y="-15" transform="translate(50,50)" fill="green" />
</svg>
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用多边形或以原点为中心的路径:

 <svg width="100" height="100" viewBox="0 0 100 100">
       <rect width="100%" height="100%" fill="gold" />
       <polygon points="-15,-15 15,-15 15,15 -15,15" transform="translate(50,50)" fill="green" />
  </svg>
Run Code Online (Sandbox Code Playgroud)

  • 有没有更好的方法来做到这一点?我不能将“原点”更改为中间而不是左上角吗?:) 我实际上更愿意为“x”和“y”设置“50%”,而不是做一些数学运算 (2认同)