Scale path from center

后端 未结 3 761
渐次进展
渐次进展 2020-12-06 04:37

I have the following SVG graphic:



        
相关标签:
3条回答
  • 2020-12-06 05:00

    The answer provided by aetheria earlier is great. There is another thing to take care of as well -- stroke-width, so that the outline stays of the same width while the object scales. Usage:

    stroke-width: (1/scaling-factor)
    

    So, if your scaling is by say 2, then:

    stroke-width: (0.5)
    

    NOTE: You shouldn't missout the transform: translate(...) scale(2) as mentioned by aetheria.

    0 讨论(0)
  • 2020-12-06 05:04

    You can alter the origin to center:

    .scaled-path-svg {
      svg {
        path {
          transform-origin: center;
          transform: scale(1.1);
        }
      }
    }
    
    0 讨论(0)
  • 2020-12-06 05:09

    If you know the coordinates of the center point, then you can combine a translate and scale in one transformation. The translation is calculated as: (1 - scale) * currentPosition.

    If the center is (10, 20) and you are scaling by 3 then translate by (1 - 3)*10, (1 - 3)*20 = (-20, -40):

    <g transform="translate(-20, -40) scale(3)">
        <path d="M45,11.5H33.333c0.735-1.159,1.167-2.528,1.167-4C34.5,3.364,31.136,0,27,0s-7.5,3.364-7.5,7.5c0,1.472,0.432,2.841,1.167,4H9l-9,32h54L45,11.5z M22.5,7.5C22.5,5.019,24.519,3,27,3s4.5,2.019,4.5,4.5c0,1.752-1.017,3.257-2.481,4h-4.037 C23.517,10.757,22.5,9.252,22.5,7.5z" id="control"/>
    </g>
    

    The transformations are applied in reverse order from the one they are declared, so in the example, above, the scale is performed first and then the translate. Scaling affects the coordinates so the translation here is in scaled coordinates.

    You can calculate the center point programmatically using element.getBBox().

    0 讨论(0)
提交回复
热议问题