如何防止Safari css关键帧动画闪烁?

时间:2014-09-05 15:09:58

标签: css css3 safari css-animations

我尝试过将额外的关键帧(0%,1%,100%或0%,99%,100%)添加到设置-webkit-animation-fill-mode以转发到经常提到的-webkit的所有内容-backface-visibility:hidden;在其他线程中提到的技巧,但在Safari 7(桌面和iOS)的几乎每个动画迭代开始时,我仍然看到我的css关键帧动画中的闪烁。 Chrome似乎没有闪烁。

JSBin:http://jsbin.com/julor/2/edit

HTML:

<div class="ripple"></div>

CSS:

body {
  background-color: #90CBEA;
}

.ripple, .ripple:before, .ripple:after {
  background-image: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, .15) 100%);

  border-radius: 50%;
  position: absolute;
  top: 50%; left: 50%;
  -webkit-transform: translateX(-50%) translateY(-50%);
}

.ripple:before, .ripple:after {
  content: '';
  display: block; 
}

.ripple {
  -webkit-animation-name: innerRipple;
  -webkit-animation-duration: 3s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: ease-out;

  &:before {
    -webkit-animation-name: ripple;
  -webkit-animation-duration: 3s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: ease-out;
  }

  &:after {
    -webkit-animation-name: outerRipple;
  -webkit-animation-duration: 3s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: ease-out;
  }
}

@-webkit-keyframes innerRipple {
  from {
    height: 0px;
    width: 0px;
    opacity: 1;
  }

  to {
    height: 200px;
    width: 200px;
    opacity: 0;
  }
}

@-webkit-keyframes ripple {
  from {
    height: 0px;
    width: 0px;
    opacity: 1;
  }

  to {
    height: 300px;
    width: 300px;
    opacity: 0;
  }
}

@-webkit-keyframes outerRipple {
  from {
    height: 0px;
    width: 0px;
    opacity: 1;
  }

  to {
    height: 340px;
    width: 340px;
    opacity: 0;
  }
}

1 个答案:

答案 0 :(得分:2)

在早于99%之间添加帧会使Safari上的闪烁消失! (Safari 8 OS X)

@-webkit-keyframes innerRipple {
  0% { height: 0px; width: 0px; opacity: 1; }
  95% { height: 200px; width: 200px; opacity: 0; }
  100% { width: 0px; height: 0px; opacity: 0; }
}

@-webkit-keyframes ripple {
  0% { height: 0px; width: 0px; opacity: 1; }
  95% { height: 300px; width: 300px; opacity: 0; }
  100% { width: 0px; height: 0px; opacity: 0; }
}

@-webkit-keyframes outerRipple {
  0% { height: 0px; width: 0px; opacity: 1; }
  95% { height: 340px; width: 340px; opacity: 0; }
  100% { width: 0px; height: 0px; opacity: 0; }
}