Анимация фонового положения CSS с гладкими результатами (субпиксельная анимация)
Я пытаюсь анимировать фоновую позицию div, медленно, но без него с рывким движением. Вы можете увидеть результат моих текущих усилий здесь:
http://jsfiddle.net/5pVr4/2/
@-webkit-keyframes MOVE-BG {
from {
background-position: 0% 0%
}
to {
background-position: 187% 0%
}
}
#content {
width: 100%;
height: 300px;
background: url(http://www.gstatic.com/webp/gallery/1.jpg) 0% 0% repeat;
text-align: center;
font-size: 26px;
color: #000;
-webkit-animation-name: MOVE-BG;
-webkit-animation-duration: 100s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
}
Я занимаюсь этим часами и не могу найти ничего, что будет медленно и плавно перемещаться на субпиксельном уровне. Мой текущий пример был составлен из кода примера на этой странице: http://css-tricks.com/parallax-background-css3/
Гладкость анимации, которую я получаю после, можно увидеть на этом примере translate():
http://css-tricks.com/tale-of-animation-performance/
Если это невозможно сделать с фоновой позицией, существует ли способ подделать повторяющийся фон с несколькими div и переместить эти divs с помощью translate?
Ответы
Ответ 1
Оформить заказ в этом примере:
http://jsfiddle.net/5pVr4/4/
<div id="content">Foreground content
<div class="bg"></div>
</div>
@-webkit-keyframes MOVE-BG {
from {
-webkit-transform: translateX(0);
}
to {
-webkit-transform: translateX(-187%);
}
}
#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;
-webkit-animation-name: MOVE-BG;
-webkit-animation-duration: 100s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
}
Ответ 2
Анимация фоновой позиции вызовет некоторые проблемы с производительностью. Браузеры будут анимировать свойства преобразования намного дешевле, включая перевод.
Вот пример, использующий перевод для бесконечной анимации слайда (без префиксов):
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;
}
Ответ 3
Вы должны немного настроить HTML и CSS
Рабочий демонстрационный пример
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;
}