首页 > web前端 > css教程 > 为什么在 Firefox 中设置 SVG 组的变换原点不起作用?

为什么在 Firefox 中设置 SVG 组的变换原点不起作用?

Susan Sarandon
发布: 2024-11-29 11:13:11
原创
429 人浏览过

Why Doesn't Setting the Transform Origin for an SVG Group Work in Firefox?

Firefox中为SVG组设置变换原点不起作用

使用 transform-origin 在 Firefox 中遇到了问题(版本18 ,其他版本未测试)。WebKit 浏览器按预期工作。我尝试将原点设置为组的中心,但到目前为止我尝试的一切都没有奏效。

这是代码:

#test {
  -webkit-transform-origin: 50% 50%;
  transform-origin: center center;
  -webkit-animation: prop 2s infinite;
  animation: prop 2s infinite;
}

@-webkit-keyframes prop {
  0% {
    -webkit-transform: scale(1, 1);
  }
  20% {
    -webkit-transform: scale(1, .8);
  }
  40% {
    -webkit-transform: scale(1, .6);
  }
  50% {
    -webkit-transform: scale(1, .4);
  }
  60% {
    -webkit-transform: scale(1, .2);
  }
  70% {
    -webkit-transform: scale(1, .4);
  }
  80% {
    -webkit-transform: scale(1, .6);
  }
  90% {
    -webkit-transform: scale(1, .8);
  }
  100% {
    -webkit-transform: scale(1, 1);
  }
}

@keyframes prop {
  0% {
    transform: matrix(1, 0, 0, 1, 0, 0);
  }
  20% {
    transform: matrix(1, 0, 0, .8, 0, 0);
  }
  40% {
    transform: matrix(1, 0, 0, .6, 0, 0);
  }
  50% {
    transform: matrix(1, 0, 0, .4, 0, 0);
  }
  60% {
    transform: matrix(1, 0, 0, .2, 0, 0);
  }
  70% {
    transform: matrix(1, 0, 0, .4, 0, 0);
  }
  80% {
    transform: matrix(1, 0, 0, .6, 0, 0);
  }
  90% {
    transform: matrix(1, 0, 0, .8, 0, 0);
  }
  100% {
    transform: matrix(1, 0, 0, 1, 0, 0);
  }
}
登录后复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128px" height="128px" viewBox="0 0 16 16">
    <g>
登录后复制

解决方案

我试图使用CSS变换围绕其中心点旋转一个简单的齿轮svg图形。我在Firefox中遇到了与您相同的问题;transform-origin 似乎没有任何效果。

解决方案是绘制原始svg形状,使其中心位于坐标0, 0:

<svg x="0px" y="0px" width="400px" height="400px" viewBox="0 0 400 400">
    <rect>
登录后复制

然后在其周围添加一个组并平移到您想要的位置:

<svg x="0px" y="0px" width="400px" height="400px" viewBox="0 0 400 400">
    <g transform="translate(150, 100)">
        <rect>
登录后复制

现在你可以应用CSS变换,这些变换应该可以在Firefox中工作(我根据用户操作使用JavaScript向HTML标记添加一个类(js-rotateObject),并使用Minimizr检查浏览器是否可以处理变换和变换(.csstransforms.csstransitions):

#myObject {
    transform: rotate(0deg);
    transition: all 1s linear;
}

.csstransforms.csstransitions.js-rotateObject #myObject {
    transform: rotate(360deg);
}
登录后复制

希望有帮助。

以上是为什么在 Firefox 中设置 SVG 组的变换原点不起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板