【问题标题】:transform-origin not working on firefox转换原点在 Firefox 上不起作用
【发布时间】:2015-05-17 02:33:05
【问题描述】:

我正在尝试在 Firefox 上制作此效果,但“transfrom-origin”无法正常工作,并且在 Firefox 上的结果看起来完全不同。 我想模仿挥动效果,它在 Chrome 和 Opera 以及 Vivaldi 中完美运行,至于 IE,我真的不在乎! 谢谢

 .arm-wave 
          {
          -webkit-transform-origin: top left;
          -webkit-animation: wave 2s ease-in-out infinite;
          -moz-animation: wave 2s ease-in-out infinite;
          -o-transform: wave 2s ease-in-out infinite;
          transform: wave 2s ease-in-out infinite;
          -ms-transform: wave 2s ease-in-out infinite;
         }
@-webkit-keyframes wave  
          {
     0% {-webkit-transform: rotate(0deg) translate(0px);transform: rotate(0deg) translate(0px);
          }
     20% {-webkit-transform: rotate(-180deg) translate(-33px);transform: rotate(-180deg) translate(-33px);
         }
     40% {
          -webkit-transform: rotate(-160deg) translate(-23px);transform:  rotate(-160deg) translate(-23px);
         }
     60% {
          -webkit-transform: rotate(-180deg) translate(-33px);transform: rotate(-180deg) translate(-33px);
         }
     80% {
          -webkit-transform: rotate(-160deg) translate(-23px);transform:     rotate(-160deg) translate(-23px);

        }

   100% {
         -webkit-transform: rotate(0deg) translate(0px);transform: rotate(0deg) translate(0px);
       }
     }
 @-moz-keyframes wave {

    0% {
        -moz-transform: rotate(0deg) translate(0px);transform: rotate(0deg) translate(0px);
       }
   20% {
       -moz-transform: rotate(-180deg) translate(-33px);transform: rotate(-180deg) translate(-33px);
       }
  40% {
       -moz-transform: rotate(-160deg) translate(-23px);transform: rotate(-160deg) translate(-23px);

      }
  60% {
      -moz-transform: rotate(-180deg) translate(-33px);transform: rotate(-180deg) translate(-33px);
      }
  80% {
      -moz-transform: rotate(-160deg) translate(-23px);transform: rotate(-160deg) translate(-23px);
    }
 100% {
     -moz-transform: rotate(0deg) translate(0px);transform: rotate(0deg) translate(0px);
      }
   }

这是 HTML 部分:

    <div id="my-svg-shape"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="591.1px"
     height="768px" viewBox="0 0 591.1 768" style="enable-background:new 0 0 591.1 768;" xml:space="preserve">
  <g id="shape">
<rect id="body" x="215.6" y="240.6" class="sweater-color" width="133.7" height="230.9"/>
    <g id="right-arm" class="arm-wave">
      <rect id="right-hand" x="375.6" y="403.9" class="skin-color" width="46.5" height="16.8"/>
      <rect id="right-el" x="375.6" y="249.8" class="sweater-color" width="46.5" height="151.6"/>
    </g>
    <g id="left-arm">
      <rect id="left-el" x="143.2" y="249.8" class="sweater-color" width="46.5" height="151.6"/>
      <rect id="left-hand" x="143.2" y="403.9" class="skin-color" width="46.5" height="16.8"/>
    </g>


  </g>
  </svg> </div>

http://jsfiddle.net/rizkallah/wxs0v9gx/1/

【问题讨论】:

  • 我相信 FF 对transform-origin 的出发点与其他浏览器在 SVG 方面的出发点不同。 -css-tricks.com/svg-animation-on-css-transforms。我认为FF使用0 0而不是使用50% 50%
  • 测试用例只包含 Firefox 明显忽略的 -webkit-transform-origin。

标签: css firefox svg rotation


【解决方案1】:

我在 cmets FF 中提到的 A 对 transform-origin 有不同的解释(至少据我了解),但自该评论以来我已经做了一些额外的(快速)研究。链接文章https://css-tricks.com/svg-animation-on-css-transforms/信息量很大。

Chrome 使用50% 50 关联正在转换的对象的中心。

Firefox 使用50% 50%SVG 父级的中心相关。

因此,Chrome 的 top left 将在 Firefox 中转换为 Xpx Ypx,其中 X 和 Y 是 转换后的元素的左上角坐标。

所以...对于右臂

<g id="right-arm" class="arm-wave">
      <rect id="right-hand" x="375.6" y="403.9" class="skin-color" width="46.5" height="16.8"/>
      <rect id="right-el" **x="375.6" y="249.8" class="sweater-color" width="46.5" height="151.6"/>
</g>

我们会使用...

transform-origin: 375.6px 249.8px;
-webkit-transform-origin: top left;

JSfiddle Demo

【讨论】:

  • 哦,非常感谢 Paulie_D!它完美地工作。就像标题所说的“一个非常复杂的爱情故事”
猜你喜欢
  • 2014-06-26
  • 2014-10-10
  • 2013-02-14
  • 2018-09-20
  • 2015-02-05
  • 1970-01-01
  • 2013-01-21
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多