【问题标题】:SVG - how to center a rectangle?SVG - 如何使矩形居中?
【发布时间】:2019-05-25 13:05:54
【问题描述】:

我有一个带有两个矩形的简单 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> 

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

【问题讨论】:

    标签: svg transform center


    【解决方案1】:

    您也可以不使用transform 属性进行计算。

    <svg width="100" height="100" viewBox="0 0 100 100">
       <rect width="100%" height="100%" fill="gold" />
       <rect width="30" height="30" x="calc(50% - 15)" y="calc(50% - 15)" fill="green" />
    </svg>

    【讨论】:

    • 它不起作用。请运行代码sn-p。
    【解决方案2】:

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

    <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>

    更新:

    操作员正在评论:

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

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

    <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>

    <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>

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

     <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>

    【讨论】:

    • 没有更好的方法吗?我不能将“原点”更改为在中间而不是左上角? :) 我实际上更愿意为xy 设置50% 而不是做一些数学运算
    猜你喜欢
    • 2018-08-29
    • 2021-02-19
    • 1970-01-01
    • 2013-05-04
    • 2021-11-24
    • 1970-01-01
    • 2014-11-11
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多