Сегодня мы создадим полноэкранное слайдшоу при помощи одного только CSS. Мы будем создавать различные переходы для изображений, а также сделаем появление названий используя CSS-анимацию.
Span-ы будут содержать элементы, которые будут иметь фоновое изображение используемое в слайдшоу.
CSS
В первую очередь давайтесоздадим стили для неупорядоченного списка.Списокбудет иметь position:fixed, и мы будемрастягивать егона весь экран.Мы будем также использоватьпсевдо-элемент:after, чтобы поместитьрисунок вверхней части изображения:
Мы будем использовать изображение с повторяющимися точками, но вы можете также использовать, например, CSS-градиент с определенной прозрачностью.
Тег span, который будет содержать изображения слайд-шоу, будет позиционироваться абсолютно и имеют ширину и высоту 100%. Поскольку у нас есть некоторый текст внутри, мы сделаем цвет прозрачным, поскольку мы не хотим его видеть сразу. Свойство background-size будет иметь значение "cover", для того чтобы фоновое изображение охватывало всю страницу, вне зависимости от размера экрана. Прозрачность установлена равной 0. Затем мы изменим это в нашей анимации:
Анимация для каждого тега span длится 36 секунд и запускается неограниченное количество раз. Но давайте посмотрим на детали, во-первых, мы создадим стили для блока с заголовком:
.cb-slideshow li div { z-index:1000; position:absolute; bottom:30px; left:0px; width:100%; text-align:center;
opacity:0; color:#fff;
animation: titleAnimation 36s linear infinite 0s; } .cb-slideshow li div h3 { font-family:'BebasNeueRegular','Arial Narrow', Arial,sans-serif; font-size:240px; padding:0; line-height:200px; }
Анимация для этого блока также будет длиться 36 секунд.
Теперь мы будем определять фоновые изображения для всех тегов span и задержку анимации, таким образом каждое следующее изображение слайдшоу и его название будут появляться через 6 секунд после предыдущего:
.cb-slideshow li:nth-child(2) div {
animation-delay: 6s; } .cb-slideshow li:nth-child(3) div {
animation-delay: 12s; } .cb-slideshow li:nth-child(4) div {
animation-delay: 18s; } .cb-slideshow li:nth-child(5) div {
animation-delay: 24s; } .cb-slideshow li:nth-child(6) div {
animation-delay: 30s; }
Теперь давайте посмотрим на анимацию слайдшоу. Каждый тег span будет иметь анимацию продолжительностью 36 секунд. За эти 36 секунд, сначала мы изменим непрозрачность от 0 до 1, это когда анимация проиграет 8% от своей продолжительности. Затем эта непрозрачность будет оставаться неизменной до 17% от времени продолжительности анимации. При достижении 25%, непрозрачность будет снова равна 0 и такой останется до самого конца.
Итак, почему именно эти значения? Мы хотим, чтобы каждое изображение было видимым в течение 6 секунд, затем в конце цикла, мы хотим, чтобы первое изображение показалось еще раз. У нас есть 6 изображений, поэтому нам нужно 36 секунд на весь цикл. Теперь нам нужно, чтобы "время" непрозрачности было соответствующее. Зная, что наш второй кадр анимации начнется через 6 секунд после начала анимации, мы должны знать, на каком проценте анимации потребуется убрать первое изображение. Разделив 6 на 36 мы получим 0,166 ..., это и будет шагом для кадров анимации равным 16%. Теперь, поскольку мы не хотим чтобы изображения просто исчезали все время, мы определим промежуточные шаги, которые мы установим на половину того, что мы рассчитали, то есть 8%. После этого мы сделаем, чтобы изображение начало исчезать на 17%, и полностью исчезло на 25%.
Давайте так же позаботимся о размере шрифта заголовка. Мы будем использовать media queries для того, чтобы установить размер шрифта меньше при определенной ширине экрана:
@media screen and (max-width: 1140px) { .cb-slideshow li div h3 {font-size:140px} } @media screen and (max-width: 600px) { .cb-slideshow li div h3 {font-size:80px} }
И это все, для простой версии слайдшоу! Теперь давайте посмотрим, как можно немного оживить переходы.
Альтернативный пример анимации
Теперь мы можем поиграть немного с анимацией для показа изображений и их названий.
Следующая анимация немного увеличит масштаб изображения и немного его повернет: