svg 子元素上的 CSS 转换原点问题 [英] CSS transform origin issue on svg sub-element

查看:33
本文介绍了svg 子元素上的 CSS 转换原点问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在尝试缩放子元素时遇到了转换原点的问题.

I'm having issues with the transform-origin while attempting to scale sub-elements.

当尝试在较大的 svg 中缩放动画框时,它使用来自整个 svg 的变换原点 (0,0),而不是我尝试缩放的元素的中心.

While attempting to scale animate a box within a larger svg, it uses the transform origin (0,0) from the overall svg, rather than the center of the element I am trying to scale.

这使它看起来像是从左上角飞入",这不是我想要的.我希望从元素中心缩放.

This makes it appear like it is "flying in from the top left" which is not what I am looking for. I am looking to make it scale from the elements center.

如何相对于我正在制作动画的特定元素设置变换原点,而不必硬编码子元素本身的 (x,y) 位置.

How do I get the transform-origin to be set relative to the specific element I am animating, without having to hardcode the (x,y) position of the sub-element itself.

这是我正在处理的问题的一个简单示例

Here is a simple example of the issue I'm dealing

@keyframes scaleBox {
  from {transform: scale(0);}
  to {transform: scale(1);}
  }
  #animated-box {
  	animation: scaleBox 2s infinite;
  }

<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" style="
        width: 195px;
    "><defs>
    <style>.cls-1{fill:#7f7777;}.cls-2{fill:#fff;}</style>
    </defs>
    <rect class="cls-1" x="0.5" y="0.5" width="99" height="99"></rect>
    <path d="M99,1V99H1V1H99m1-1H0V100H100V0Z"></path>
    <rect id="animated-box" class="cls-2" x="10.5" y="8.5" width="22" height="6"></rect></svg>

推荐答案

你需要transform-b​​ox:fill-box;

You need transform-box: fill-box;

@keyframes scaleBox {
  from {transform: scale(0);}
  to {transform: scale(1);}
  }
  #animated-box {
    transform-box: fill-box;
  	animation: scaleBox 2s infinite;
  }

<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" style="
        width: 195px;
    "><defs>
    <style>.cls-1{fill:#7f7777;}.cls-2{fill:#fff;}</style>
    </defs>
    <rect class="cls-1" x="0.5" y="0.5" width="99" height="99"></rect>
    <path d="M99,1V99H1V1H99m1-1H0V100H100V0Z"></path>
    <rect id="animated-box" class="cls-2" x="10.5" y="8.5" width="22" height="6"></rect></svg>

这篇关于svg 子元素上的 CSS 转换原点问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆