Animate CSS background-position with smooth results (sub-pixel animation)

前端 未结 3 1586
栀梦
栀梦 2020-12-01 02:17

I\'m trying to animate the background-position of a div, slowly, but without it having jerky movement. You can see the result of my current efforts here:

http://jsf

相关标签:
3条回答
  • 2020-12-01 02:41

    Checkout this example:

    #content {
      height: 300px;
      text-align: center;
      font-size: 26px;
      color: #000;
      position:relative;
    }
    .bg{
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      z-index: -1;
      background: url(http://www.gstatic.com/webp/gallery/1.jpg) 0% 0% repeat;
      animation-name: MOVE-BG;
      animation-duration: 100s;
      animation-timing-function: linear;
      animation-iteration-count: infinite;
    }
    @keyframes MOVE-BG {
       from {
         transform: translateX(0);
       }
       to { 
         transform: translateX(-187%);
       }
    }
    <div id="content">Foreground content
      <div class="bg"></div>
    </div>

    http://jsfiddle.net/5pVr4/4/

    0 讨论(0)
  • 2020-12-01 02:42

    Animating background-position will cause some performance issues. Browsers will animate transform properties much cheaply, including translate.

    Here is an example using translate for an infinite slide animation (without prefixes):

    http://jsfiddle.net/brunomuller/5pVr4/504/

    @-webkit-keyframes bg-slide {
        from { transform: translateX(0); }
        to { transform: translateX(-50%); }
    }
    
    .wrapper {
        position:relative;
        width:400px;
        height: 300px;
        overflow:hidden;
    }
    
    .content {
        position: relative;
        text-align: center;
        font-size: 26px;
        color: #000;
    }
    
    .bg {
        width: 200%;
        background: url(http://www.gstatic.com/webp/gallery/1.jpg) repeat-x;
        position:absolute;
        top: 0;
        bottom: 0;
        left: 0;
        animation: bg-slide 20s linear infinite;
    }
    
    0 讨论(0)
  • 2020-12-01 02:48

    You should adjust your HTML and CSS little bit

    Working Demo

    HTML

    <div id="wrapper">
        <div id="page">
        Foreground content
    </div>
    
    <div id="content"> </div>
    </div>
    

    CSS

    @-webkit-keyframes MOVE-BG {
        from { left: 0; }
        to { left: -2000px; }
    }
    
    #wrapper {
        position:relative;
        width:800px;
        height: 300px;
        overflow:hidden;
    }
    
    #page {
        text-align: center;
        font-size: 26px;
        color: #000;
    }
    
    #content {
        width: 2000px;
        height: 300px;
        background: url(http://www.gstatic.com/webp/gallery/1.jpg) 0% 0% repeat;
        position:absolute;
        top: 0;
        left: 0;
        z-index:-1;
        -webkit-animation-name: MOVE-BG;
        -webkit-animation-duration: 100s;
        -webkit-animation-timing-function: linear;
        -webkit-animation-iteration-count: infinite;
    }
    
    0 讨论(0)
提交回复
热议问题