CSS3 background-позиция в процентах вообще не работает

#css #css-animations

#css #css-анимация

Вопрос:

Итак, я кодирую эффект параллакса в CSS3 с 3 слоями для заголовка страницы. Моя таблица стилей выглядит следующим образом:

 #graphic-layer { /* overall properties for graphic layers */
    position: absolute;
    background-position: center center;
    background-repeat: no-repeat;
    background-size: contain;
}
#graphic-layer.header { /* header-class */
    width: 100%;
    height: 150px;
    background-repeat: repeat-x;
    -webkit-animation-name: header;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-timing-function: linear;
}
#graphic-layer.header:nth-of-type(1) {  /* parallax layer 1 */
    background-image: url('images/header-background.jpg');
    -webkit-animation-duration: 100s;
}
#graphic-layer.header:nth-of-type(2) {  /* parallax layer 2 */
    background-image: url('images/header-middle.png');
    -webkit-animation-duration: 80s;
}
#graphic-layer.header:nth-of-type(3) { /* parallax layer 3 */
    background-image: url('images/header-foreground.png');
    -webkit-animation-duration: 60s;
}
@-webkit-keyframes header {  /* keyframes */
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 100% 0; /* <- PROBLEM HERE */
    }
}
 

РЕДАКТИРОВАТЬ: HTML, просто три экземпляра графического слоя с заголовком класса:

 <div id="graphic-layer" class="header"></div>
<div id="graphic-layer" class="header"></div>
<div id="graphic-layer" class="header"></div>
 

Пока все хорошо. Обратите внимание, что мой заголовок занимает 100% ширины экрана. Это прекрасно работает, если я установлю положение фона в ключевом кадре на 100% background-position: 1920px 0; равным (моя ширина экрана / окна), но как только разрешение окна изменится, это, очевидно, больше не будет работать. Если я установлю значение ниже, например, до 500 пикселей, изображение переместится на 500 пикселей и вернется к началу, но я хочу, чтобы оно непрерывно перемещалось без «прыжков».

Поэтому мне нужно решение, чтобы изображение перемещалось ровно на 100% ширины заголовка, а затем перезапускало анимацию. Но когда я устанавливаю положение фона в ключевом кадре на 100% background-position: 100% 0; , он вообще не перемещается.

В чем здесь проблема? Почему процентные значения не работают?

Редактировать:

Я сам нашел ответ!

Это была просто глупая ошибка в рассуждениях. #graphic-layer.header не обязательно должно быть 100% заголовка, но 100% изображения, что является статическим значением (в данном случае 1920 пикселей). Итак, если я установлю ширину в 3480 пикселей (1920×2), а затем изменю ключевые кадры на следующие:

 @-webkit-keyframes header {  /* keyframes */
    0% {
        left: 0;
    }
    100% {
        left: -1920px; /* <- Image size */
    }
}
 

… затем класс заголовка перемещается на 1920 пикселей влево и начинается снова, и из-за удвоенной ширины класса кажется, что это бесконечное изображение. Нет необходимости в относительных процентных значениях!

Комментарии:

1. Может быть, добавить скрипку и / или базовый html-код? Ваш код не кажется правильным #graphic-layer , имеет 3 экземпляра? Этот идентификатор находится в элементе header или вам не хватает . для обозначения класса?

2. Вы можете использовать id только один раз на страницу. Вы можете использовать graphic-layer1 , graphic-layer2 и graphic-layer3

3. Извините, это очень глупая и плохая привычка с ранних времен, когда я начал изучать CSS. Спасибо за подсказку, исправил мой код.