平滑背景比例css3变换

时间:2016-04-13 14:24:02

标签: css css-transitions css-animations css-transforms

尝试使用CSS动画和变换应用缩放背景图像,但似乎有点滞后:

Reproduction online

我能做些什么吗?

@keyframes animateBg {
  from {
    -ms-transform: scale(1,1);
    transform: scale(1,1);
    visibility: visible;
  }

  to {
    -ms-transform: scale(1.45, 1.45);
    transform: scale(1.45, 1.45);
  }
}
.animate-bg{
    -webkit-animation-name: animateBg;
    animation-name: animateBg;

}
.animate{
  -webkit-animation-duration: 5000ms;
  animation-duration: 5000ms;
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;

  -webkit-animation-timing-function: cubic-bezier(.3,0,.7,1);
  timing-function: cubic-bezier(.3,0,.7,1);
}

.bg{
    background-image: url(http://digital-photography-school.com/wp-content/uploads/flickr/2746960560_8711acfc60_o.jpg);
    height: 100%;
    width: 100%;
    display: block;
    position:absolute;
    z-index: -1;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    background-position: center;
    background-size: cover;
}

1 个答案:

答案 0 :(得分:5)

至少在Chrome中,添加translateZ会使其更加流畅

(也删除了关键帧的“可见性”)

html,body{
    height:100%;
    margin:0;
    padding:0;
    overflow:hidden;
}
.bg{
    background-image: url(http://digital-photography-school.com/wp-content/uploads/flickr/2746960560_8711acfc60_o.jpg);
    height: 100%;
    width: 100%;
    display: block;
    position:absolute;
    z-index: -1;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    background-position: center;
    background-size: cover;
}

.animate-bg{
    -webkit-animation-name: animateBg;
    animation-name: animateBg;

}
.animate{
  -webkit-animation-duration: 5000ms;
  animation-duration: 5000ms;
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;

  -webkit-animation-timing-function: cubic-bezier(.3,0,.7,1);
  animation-timing-function: cubic-bezier(.3,0,.7,1);
  animation-iteration-count: infinite;
}

    

@keyframes animateBg {
  from {
    -ms-transform: scale(1,1);
    transform: scale(1,1) translateZ(1px);
  }

  to {
    -ms-transform: scale(1.45, 1.45);
    transform: scale(1.45, 1.45) translateZ(1px);
  }
}
<div class="bg animate animate-bg">

</div>