使用变换原点缩放 SVG 元素

bas*_*ent 5 html css svg transform scale

<html lang="en-US">
  <head>
    <link rel="stylesheet" href="https://codepen.io/basement/pen/oepKxY.css">
  </head>
  
  <body>
    <iframe src="https://s.codepen.io/basement/debug/zdpVyV/PNAvYLZmJRQr"></iframe>
    
    <div class="wrp">  
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"
           width="100" height="100"
           class="canvas"
      > 
        <defs>   
          <style type="text/css"> 
            polygon { fill: none; stroke-width: 0.5; stroke: #f00; }
          </style>       
        </defs>
        
        <g transform="translate( 0 12.5 ) scale( 1 )">
        
          <polygon 
            points="
              75,6.7
              75,93.3
              0,50
            " 
            transform="rotate( -30 50 50 )"
          />
          
        </g>   
        
      </svg>
    </div>
    <script src="origin.js"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想在定义特定变换原点的同时使上面代码片段中的红色三角形放大。使用 SVG 中的旋转属性,我们可以做到这一点:

transform="rotate( -30 50 50 )"
Run Code Online (Sandbox Code Playgroud)

第一个值:-30逆时针旋转元素。定义50 50变换原点(分别为 x 和 y)。我可以用 来做这个scale吗?我希望我的红色三角形能够放大,但保持其原点居中。

注意: 我知道transform-originCSS 中的内容,但我假设 CSS 使用的坐标系将相对于整个网页或其最近定位的元素,就像通常一样......我想用 SVG 坐标术语来定义它,例如完成旋转属性。

小智 4

你可以翻译-->缩放-->translate_back例如

<g transform="translate( 0 12.5 ) translate( 50 50) scale( 1.5 ) translate( -50 -50)">
Run Code Online (Sandbox Code Playgroud)

说明:假设您想使用 (50 50) 作为比例原点,这将首先将您的形状平移 (-50, -50),以便您所需的比例原点现在位于 (0, 0)。然后进行缩放,最后反转平移以将形状恢复到原来的位置。