Чистый CSS-слайдер, возвращающий пустое изображение на последнем слайде

#css

#css

Вопрос:

Я работаю с чистым слайдером HTML / CSS, который возвращает пустой слайд после самого последнего изображения в соответствии с этой скрипкой JS (https://codepen.io/dudleystorey/pen/ehKpi )

Как вы сможете увидеть по этой ссылке (http://eavestroughcleaning.ca/temp.php ) загружается изображение (всего 3) и перемещается в «пустую» область, удерживаясь в течение 5 секунд, прежде чем перезагрузить / вернуться к первому. Javascript отсутствует, и вы можете просматривать исходный код напрямую, однако, здесь это для хорошей оценки.

CSS:

     @keyframes slidy {
    0% { left: 0%; }
    20% { left: 0%; }
    25% { left: -100%; }
    45% { left: -100%; }
    50% { left: -200%; }
    70% { left: -200%; }
    75% { left: -300%; }
    95% { left: -300%; }
    100% { left: -400%; }
    }

    body { margin: 0; } 
    div#slider { overflow: hidden; }
    div#slider figure img { width: 20%; float: left; }
    div#slider figure { 
      position: relative;
      width: 500%;
      margin: 0;
      left: 0;
      text-align: left;
      font-size: 0;
      animation: 10s slidy infinite; 
    }
  

HTML:

     <div id="slider">
    <figure>
    <img src="slider-img1.jpg" alt></figure>
    <figure><img src="slider-img2.jpg" alt></figure>
    <figure><img src="slider-img3.jpg" alt></figure>
    </div>
  

Из моих исследований кажется, что эта проблема носит спорадический характер и, вероятно, основана на браузере или даже, возможно, на ОС (очевидно) Мне еще предстоит найти решение. Я использую Windows 10 (все обновлено) с Fire Mozilla Firefox (49.0.1). Я также попробовал это в Chrome для хорошей оценки, но, увы, столкнулся с той же проблемой. Предложения приветствуются.

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

1. Это потому, что код CSS, который вы используете, предназначен для 5 слайдов, а не для 3

Ответ №1:

Как уже упоминал @gaby-aka-g-petrioli, код CSS предназначен для 5 слайдов, а не для 3.

Попробуйте это:

 @keyframes slidy {
0% { left: 0%; }     /* 0 - 30% of animation time */
30% { left: 0%; }    /* 1st slide will be visible */
33% { left: -100%; } /* 30% - 33% slide change will occur */
63% { left: -100%; } /* etc.. */
66% { left: -200%; }
100% { left: -200%; }
}

body { margin: 0; } 
div#slider { overflow: hidden; }

div#slider figure img {
  width: 33.333%;    /* image will be 33.333% of total width */
  float: left;
}
div#slider figure { 
  position: relative;
  width: 300%;       /* total width of 3 slides (3*100%) */
  margin: 0;
  left: 0;
  text-align: left;
  font-size: 0;
  animation: 10s slidy infinite; /* length of animation */
}  
 <base href="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/">
<div id="slider">
  <figure>
    <img src="austin-fireworks.jpg" alt>
    <img src="taj-mahal_copy.jpg" alt>
    <img src="ibiza.jpg" alt>
  </figure>
</div>  

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

1. Спасибо за продолжение. Я попробовал ваш код, и у меня ничего нет. Страница полностью пуста: eavestroughcleaning.ca/temp.php Однако изображения там есть: eavestroughcleaning.ca/slider-img1.jpg

2. Сработал ли фрагмент кода (кнопка «Выполнить фрагмент кода») для вас? Попробуйте поместить туда несколько реальных изображений.

3. В целях тестирования вы можете заменить img: src на placehold.it/1000×572 . В этом случае строка: <базовый href=» s3-us-west-2.amazonaws.com/s.cdpn.io/4273 «> было бы устаревшим.

4. Да, начал работать, когда я дал ему абсолютный путь. Спасибо всем за помощь, особенно karlisup

5. Рад, что это сработало ;). Я был бы признателен, если бы вы могли отметить ответ как правильный. Заранее спасибо!

Ответ №2:

Предоставляемый вами слайдер предназначен для работы с 5 слайдами, вот почему у слайдера есть место, width: 500% где последний слайд отображается только при переходе к нему, затем анимация сбрасывается на первый слайд, и по этой причине у вас будет своего рода «прыжок» или «вспышка» вэкран.

Если вы хотите больше или меньше слайдов, вы должны поработать над слайдером width и установить его как количество слайдов, умноженное на 100%. И вы также должны изменить процент анимации, чтобы установить правильный переход между ними.

Решение с бесконечным циклом

Если вы хотите, чтобы слайды скользили, как в бесконечном цикле с плавным переходом между последним и первым слайдами, вы должны дублировать первый слайд и поместить его в качестве последнего слайда, как в этом примере.

С помощью этого решения, когда анимация завершена и переход находится на последнем слайде (который на самом деле является дублированным первым слайдом), infinite свойство в анимации сбрасывается и перезапускается, а последний дублированный слайд заменяется исходным первым слайдом без какого-либо плохого перехода к анимации.

Решение сброс слайдера на первый слайд

Наоборот, если вы предпочитаете сбросить ползунок и увидеть, как ползунок прокручивается обратно к первому изображению, в определении анимации при 100% вы должны сдвинуться до 0%

 @keyframes slidy {
    0% { left: 0%; }
    20% { left: 0%; }
    25% { left: -100%; }
    45% { left: -100%; }
    50% { left: -200%; }
    70% { left: -200%; }
    75% { left: -300%; }
    95% { left: -300%; }
    100% { left: 0%; }
}