In this example I want to rotate the hammer from its bottom so is there a way to know exactly the right coordinates of a specific point on the element or should I randomly try different points?
svg {
width: 50%;
}
.hammer-icon {
transform-origin: 200px 50px;
transition: transform .3s ease-out;
}
.hammer:hover .hammer-icon {
transform: rotate(45deg);
}
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -50 400 200">
<g class="hammer">
<circle class="hammer-bg" fill="#FFD466" cx="200" cy="50" r="90"></circle>
<path class="hammer-icon" fill="#FFFFFF" d="M262,32.9l-6.7-6.9c-1.4-1.4-3.6-1.4-5-0.1l-2.8,2.8l-14.6-15c-7-7.2-20.3-18.5-30.1-16.4
c-1.6,0.3-5.6,3.1-5.6,3.1l19,19.5l-26.3,25.6l-1.5-1.6c-1.4-1.4-3.6-1.4-5-0.1l-39.3,38.3c-1.4,1.4-1.4,3.6-0.1,5l14.4,14.8
c1.4,1.4,3.6,1.4,5,0.1l39.3-38.3c1.4-1.4,1.4-3.6,0.1-5l-1.5-1.6l26.3-25.6l8.3,8.5l-2.8,2.8c-1.4,1.4-1.4,3.6-0.1,5l6.7,6.9
c1.4,1.4,3.6,1.4,5,0.1l17.3-16.9C263.3,36.5,263.4,34.3,262,32.9z"></path>
</g>
</svg>
The transform-origin property is used in conjunction with CSS transforms, letting you change the point of origin of a transform..element { transform: rotate(360deg); transform-origin: top left; }
Definition and Usage. The transform-origin property allows you to change the position of transformed elements. 2D transformations can change the x- and y-axis of an element. 3D transformations can also change the z-axis of an element. To better understand the transform-origin property, view a demo.
When it comes to setting the values of transform-origin, you aren’t limited to lengths or percentages. You can also use CSS keywords to define your anchor point, such as left to set the origin to the left edge of the element, or right to put it at the far right edge:
To make the transform-origin point relative to the element, you need to use transform-box: fill-box;.
To make the transform-origin
point relative to the element, you need to use transform-box: fill-box;
.
Chrome doesn't support that property yet (CSS transform-box - Chrome Platform Status), but luckily (yet wrongfully) Chrome sets the transform-origin
relative to the element if you use percentages instead of pixels (https://css-tricks.com/transforms-on-svg-elements/).
So, to make something that works on most *) modern browsers, use transform-box: fill-box;
and transform-origin: xx% yy%;
.hammer-icon {
transform-origin: 15% 80%;
transform-box: fill-box;
...
}
https://jsfiddle.net/L1790vzo/8
*) IE/Edge doesn't support CSS transforms on SVG elements at all.
*) Proper support in Chrome v64 and Opera v51
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With