为啥这个 CSS3 动画在 MS Edge 或 IE11 中不起作用?

Posted

技术标签:

【中文标题】为啥这个 CSS3 动画在 MS Edge 或 IE11 中不起作用?【英文标题】:Why this CSS3 animation doesn't work in MS Edge or IE11?为什么这个 CSS3 动画在 MS Edge 或 IE11 中不起作用? 【发布时间】:2017-05-22 03:40:30 【问题描述】:

这里是fiddle,下面是 CSS 代码(html 只是一个 SVG 椭圆)。它适用于 Chrome、Firefox 和 Opera,但不适用于 IE 和 Edge。在 IE 和 Edge 中看动画怎么办?

#my-circle 
  stroke: blue;
  stroke-dasharray: 1100;
  stroke-dashoffset: 500;
  -moz-animation: draw-first-shape 1s forwards 3;
  -webkit-animation: draw-first-shape 1s forwards 3;
  animation: draw-first-shape 1s forwards 3;


@-moz-keyframes draw-first-shape 
  from 
    stroke-dashoffset: 1100;
  
  to 
    stroke-dashoffset: 0;
  

@-webkit-keyframes draw-first-shape 
  from 
    stroke-dashoffset: 1100;
  
  to 
    stroke-dashoffset: 0;
  

@keyframes draw-first-shape 
  from 
    stroke-dashoffset: 1100;
  
  to 
    stroke-dashoffset: 0;
  

【问题讨论】:

由于某种原因stroke-dashoffset 动画在 IE 中不起作用。但是,如果您像在this demo 中一样使用stroke-dasharray,那么它至少可以在Edge 中使用。它仍然无法在 IE11 中运行。 效果很好,谢谢! 重复***.com/questions/41470958/… 【参考方案1】:

尽管 MSDN 说 从 MS Edge 开始stroke-dashoffset 属性可以使用 CSS 动画和过渡进行动画处理,但它仍然不能出于某种原因工作。如果我们使用 stroke-dasharray 而不是 stroke-dashoffset 重新创建此动画,那么它在 Edge 中将按预期工作。

但它在 IE11 或更低版本中仍然无法工作,因为再次如 MSDN 所示,stroke-dasharray 可以使用 CSS 动画和仅来自 MS 的过渡进行动画处理边缘。

修改后的动画在最新版本的 Chrome、Firefox 和 Opera 中仍然有效。

#my-circle 
  stroke: blue;
  stroke-dasharray: 1100;
  stroke-dashoffset: 0;
  animation: draw-first-shape 1s forwards 3;

@keyframes draw-first-shape 
  from 
    stroke-dasharray: 0, 1100;
  
  to 
    stroke-dasharray: 1100, 1100;
  
<svg xmlns="http://www.w3.org/2000/svg"   viewBox="0 0 500.00001 300" id="svg2">
  <g id="layer1" transform="translate(0 -752.362)">
    <ellipse id="my-circle" cx="257.013" cy="907.735" rx="201.742" ry="111.465" fill="#fff" stroke="#007400" stroke- />
  </g>
</svg>

【讨论】:

【参考方案2】:

作为 MS Edge 的一种解决方法,您可以将 stroke-widthstroke-dashoffset 一起制作动画(对其值进行微小的变化)。例如,在问题的情况下:

@keyframes draw-first-shape 
    from 
        stroke-dashoffset: 1100;
        stroke-width: 3.03;
    
    to 
        stroke-dashoffset: 0;
        stroke-width: 3;
    

【讨论】:

以上是关于为啥这个 CSS3 动画在 MS Edge 或 IE11 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 CSS3 动画在 Chrome 中的表现如此缓慢?

CSS3动画

css3动画为啥就是不动呢

Firefox 和 CSS3 动画 - 为啥我的文本会抖动?

为啥这个 LSEP 符号出现在 Chrome 而不是 Firefox 或 Edge 上?

为啥这个 LSEP 符号出现在 Chrome 而不是 Firefox 或 Edge 上?